文件目录的操作

hyx 2018-07-14 09:35:31 91次 0

文件目录的操作

文件操作步骤

1.      得到文件路径对应的资源

Opendir:打开一个目录,需要一个路径参数,返回一个资源

2.      需要从资源理获取对应的数据

Readdir:读取,从资源里面读取一个对应的文件,当前文件指针所指向的文件,将文件指针下移一位。返回当前文件的文件名字或者false.可以显示使用资源参数,也可以不提供,因为系统会向上自动寻找文件的路径资源.

目录相关函数

Rewinddir:重置目录资源的指针,回到第一个文件(.)

Closedir:释放文件资源

Scandir:浏览目录,把所有的文件都获得,并存放到一个数组返回

遍历目录

1.      获得路径资源

2.      逐个的读取文件信息

3.      关闭资源

目录操作的原理

Opendir 所做的事情

1.      找到对应的目录
2.      将目录中所以文件全部读入到内存(包含子文件夹下的所有文件)
3.      将目录指针指向第一个文件

Readdir

1.      读取当前指针所指向的文件的文件名
2.      将目录指针向下移动一位


文件相关函数

File_exists : 判断文件是否存在。存在返回true不存在返回false

Is_dir:判断给定的路径是否是一个路径,如果是路径返回true,否则返回false

Is_file:判断给定的路径是否是一个文件,如果是文件返回true,否则返回false

Mkdir:创建文件夹,不能创建同名文件夹(必须保证当前文件夹有PHP所有组权限进行写操作)

Rmdir:删除文件夹,

Getcwd:获取当前操作目录

Chdir:改变当前操作目录,代表进入到目标目录

 

 


遍历所有文件夹及子目录

1.      得到一个路径

2.      获得路径资源

3.      获取指针所指向的文件名

4.      判断当前文件是否是一个路径

a)      如果是路径:进入到子目录(改变工作路径)

b)      如果是文件:直接输出

5.      关闭资源

 

递归

在函数内部调用函数本身

函数用来解决某一类问题,在函数的内部又碰到了之前碰到的一样的问题,接下来调用函数本身来解决该子问题


例子:

function myscandir($dirname,&$arr_files) {
        $arr = array();
        $dir=opendir($dirname);

        while($filename=readdir($dir)){
            $file=$dirname."/".$filename;
            if($filename!="." && $filename!=".."){
                if(is_dir($file)){
                    myscandir($file,$arr_files); //递归完成    
                }else{
                    $arr_files[] = $file;
                }
            }
        }
        closedir($dir);
    }
    
    $arr_files = array();
    myscandir('/www/web/test',$arr_files);
    print_r($arr_files);
 //求目录大小
     function toSize( $size){ 
         $dw="Bytes"; 
         if( $size >  pow(2, 30)){ 
             $size= round( $size/ pow(2, 30), 2); 
             $dw="GB"; 
        } else  if( $size >  pow(2, 20)){ 
             $size= round( $size/ pow(2, 20), 2); 
             $dw="MB"; 
        } else  if( $size >  pow(2, 10)){ 
             $size= round( $size/ pow(2, 10), 2); 
             $dw="KB"; 
        } else{  
             $dw="bytes"; 
        } 
         return  $size. $dw; 
    } 

     function dirsize( $dirname) { 
         $dirsize=0; 

         $dir= opendir( $dirname); 

         while( $filename= readdir( $dir)){ 
             $file= $dirname."/". $filename; 
             if( $filename!="." &&  $filename!=".."){ 
                 if( is_dir( $file)){ 
                     $dirsize+=dirsize( $file);  // 递归完成     
                } else{ 
                     $dirsize+= filesize( $file); 
                } 
            } 
        } 
         closedir( $dir); 

         return  $dirsize; 

    }








 



发表评论

注:*为必填

回复 的评论
*
选择
*
*