首页 > 代码库 > PHP文件操作:遍历文件目录

PHP文件操作:遍历文件目录

  1 <?php  2     /*遍历目录,列出目录中的文件  3      * array scandir(string $directory [,int $sorting_order])  4      * $directory为待遍历目录的路径名,$sorting_order为可选参数,设置文件的降序或者升序排列  5      * */  6     $path=‘./‘;          //为当前目录  7     if(file_exists($path)){  8         $files_asc=scandir($path);  9         $files_desc=scandir($path,1); 10          11         echo ‘<p>该目录下的文件(升序排列):<br>‘; 12         print_r($files_asc); 13         echo ‘<p>该目录下的文件(降序排序):<br>‘; 14         print_r($files_desc); 15     } 16     else{ 17         echo‘该目录不存在!‘; 18     } 19      20     /*递归的遍历所在目录及其所有子目录,即所谓的遍历目录树*/ 21     /* 22      * 递归函数 23      * 遍历目录树 24      * 输入参数:目录路径 25      * 输出结果:多维数组表示的目录树 26      * */ 27     function GetDirFree($path){ 28         $tree = array(); 29         $tmp = array(); 30          31         if(!is_dir($path)) return null;           //如果不是路径则返回null 32          33         $files =  scandir($path);        //列出当前目录下的所有文件和目录 34          35         foreach($files as $value){ 36             if($value==‘.‘||$value==‘..‘)      //跳过当前的目录名和父目录名 37                 continue; 38              39             $full_path = $path.‘/‘.$value;      //获取子文件或目录的完整路径 40             if(is_dir($full_path)){ 41                 $tree[$value]=GetDirFree($full_path); 42             } 43             else{ 44                 $tmp[]=$value; 45             } 46         } 47         //将文件添加到结果数组末尾 48         $tree = array_merge($tree,$tmp); 49         return $tree; 50     } 51     //$path=‘./‘; 52     echo ‘<br>‘.‘递归遍历目录及其子目录‘; 53     print_r(GetDirFree($path)); 54      55     /*复制、移动目录*/ 56     /*递归函数 57      * 复制目录 58      * 输入参数:源目录路径,目的目录路径 59      * 输出目录;复制成功则返回TRUE,否则返回false*/ 60      61     function copyDir($source_path,$dest_path){ 62         if(!is_dir($source_path)){                 //如果不是路径则返回false 63             return false; 64         } 65         if(!file_exists($dest_path)){            //如果不存在目录则创建目录 66             if(!mkdir($dest_path))  return false; 67         } 68          69         $files=scandir($source_path); 70         foreach($files as $value){ 71             if($value==‘.‘||$value==‘..‘) continue;   //跳过当前的目录名和父目录名 72              73             $child_source_path=$source_path.‘/‘.$value;  //获取子文件或目录的完整路径 74              75             $child_dest_path=$dest_path.‘/‘.$value; 76              77             if(is_dir($child_source_path)){                //如果存在子目录,则复制子目录 78                 if(!copyDir($source_path, $dest_path)){ 79                     return false; 80                 } 81             } 82             else { 83                 if(!copy($child_source_path,$child_dest_path)){ 84                     return false;                            //复制子文件 85                 } 86             } 87         } 88          89         return true; 90     } 91      92     $source_path=‘./test_dir‘; 93     $dest_path=‘./copy_test_dir‘; 94     $result=copyDir($source_path, $dest_path); 95     if($result) echo ‘目录复制成功‘; 96     else echo ‘目录复制失败‘; 97      98     /*递归删除目录 99      * 删除目录内容100      * 输入参数:目录路径101      * 输出结果:删除成功则返回true,否则返回false102      * */103     function delDir($path){104         if(!is_dir($path)) return false;105         if(!file_exists($path))    return false;106         107         $files=scandir($path);108         foreach($files as $value){109             if($value==‘.‘||$value==‘..‘) continue;110             111             $child_path=$path.‘/‘.$value;112             if(is_dir($child_path)){113                 if(!delDir($child_path)){114                     return false;115                 }116             }117             else{118                 if(!unlink($child_path)){119                     return false;120                 }121             }122         }123         if(!rmdir($path))  return false;124         return true;125     }126     $path=‘./copy_test_dir‘;127     $result=delDir($path);128     if($result) echo‘目录删除成功‘;129     else echo‘目录删除失败‘;130     131     /*移动目录,是复制目录和删除目录的结合132      * 递归函数133      * 移动目录内容134      * 输入参数:原目录路径,目的目录路径135      * 输出结果:移动成功则返回true,反正返回false136      * 使用copydir()函数和deldir()函数*/137     function moveDir($source_path,$dest_path){138         if(!copyDir($source_path, $dest_path))  return false;139         if(!delDir($source_path))        return false;140         return true;141     }142     143     $source_path=‘./test_dir‘;144     $dest_path=‘./move_test_dir‘;145     $result=moveDir($source_path, $dest_path);146     if($result) echo ‘目录移动成功!‘;147     else echo‘移动失败‘;148     149     ?>150