当前位置:首页 > PHP教程 > php文件操作 > 列表

关于PHP目录操作总结

发布:smiling 来源: PHP粉丝网  添加日期:2022-05-30 08:57:22 浏览: 评论:0 

PHP目录操作(附封装好的目录操作函数文件)

目录函数库常用API

  1. $path='test'; 
  2.  
  3. var_dump(is_dir($path));//检测是否为目录 
  4.  
  5. echo '<hr/>'; 
  6.  
  7. echo getcwd();//得到当前的工作目录 
  8.  
  9. echo '<hr/>'; 
  10.  
  11. //得到磁盘总大小 
  12.  
  13. echo disk_total_space('/'); 
  14.  
  15. echo '<hr/>'; 
  16.  
  17. //得到磁盘可用空间 
  18.  
  19. echo disk_free_space('/'); 

创建、删除目录

多级目录

  1. //创建目录 
  2.  
  3. //mkdir($path,$mode,$flag):创建目录 
  4.  
  5. var_dump(mkdir('a')); 
  6.  
  7. //检测目录是否存在,不存在则创建 
  8.  
  9.  $path='king'; 
  10.  
  11.  if(!file_exists($path)){ 
  12.  
  13.    if(mkdir($path)){ 
  14.  
  15.      echo '目录创建成功'; 
  16.  
  17.    }else{ 
  18.  
  19.      echo '目录创建失败'; 
  20.  
  21.    } 
  22.  
  23.  }else{ 
  24.  
  25.    echo '目录已存在'; 
  26.  
  27.  } 
  28.  
  29. //创建多级目录 b/c 
  30.  
  31.  $path='b'.DIRECTORY_SEPARATOR.'c'; 
  32.  
  33.  echo $path; 
  34.  
  35.  var_dump(mkdir($path,755,true)); 
  36.  
  37.  //删除目录 
  38.  
  39.  var_dump(rmdir('a')); 
  40.  
  41.  var_dump(rmdir('b')); 
  42.  
  43.  var_dump(rmdir('a')); 

读取目录

  1. $path='webuploader-master'; 
  2.  
  3.     //打开指定目录 
  4.  
  5.     $handle=opendir($path); 
  6.  
  7.     var_dump($handle);//resource(5) of type (stream) 
  8.  
  9.     //遍历文件,获取类型 
  10.  
  11.      while(($item=readdir($handle))!==false){ 
  12.  
  13.        echo $item,"\n"; 
  14.  
  15.        echo filetype($path.DIRECTORY_SEPARATOR.$item),"\n";//获取文件类型 
  16.  
  17.        echo "\n"; 
  18.  
  19.      } 
  20.  
  21.     //遍历文件,获取类型2 
  22.  
  23.     while(($item=readdir($handle))!==false){ 
  24.  
  25.       //去掉.和.. 
  26.  
  27.       if($item!='.'&&$item!='..'){ 
  28.  
  29.         //检测是否是文件 
  30.  
  31.         if(is_file($path.'/'.$item)){ 
  32.  
  33.           echo '文件:',$item,"\n"; 
  34.  
  35.         }else{ 
  36.  
  37.           echo '目录:',$item,"\n"; 
  38.  
  39.         } 
  40.  
  41.       } 
  42.  
  43.     } 
  44.  
  45.     //rewinddir()重置遍历指针 
  46.  
  47.     rewinddir(); 
  48.  
  49.     var_dump(readdir($handle));// . 
  50.  
  51.      //关闭句柄 
  52.  
  53.      closedir($handle); 

DirectoryIterator迭代器的使用

  1. $dir=new DirectoryIterator(__DIR__); 
  2.  
  3.   //print_r($dir); 
  4.  
  5.   foreach($dir as $fileInfo){ 
  6.  
  7.     if($fileInfo->getFilename()!='.'&&$fileInfo->getFilename()!='..'){ 
  8.  
  9.       echo $fileInfo->getFilename(),"\n";//文件名 
  10.  
  11.       echo $fileInfo->getType(),"\n";//文件类型 
  12.  
  13.     } 
  14.  
  15.   } 

【超级实用目录相关函数封装】

dir.func.php

  1. /** 
  2.  
  3.  * 检测目录是否为空 
  4.  
  5.  * @method check_empty_dir 
  6.  
  7.  * @param  string          $path 目录名 
  8.  
  9.  * @return boolean         true|false 
  10.  
  11.  */ 
  12.  
  13. function check_empty_dir(string $path){ 
  14.  
  15.   //检测目录是否存在,存在则打开 
  16.  
  17.   if(!is_dir($path)){ 
  18.  
  19.     return false; 
  20.  
  21.   } 
  22.  
  23.   //打开指定目录 
  24.  
  25.   $handle=opendir($path); 
  26.  
  27.   //读取 
  28.  
  29.   while(($item=@readdir($handle))!==false){ 
  30.  
  31.     //去掉.和..操作 
  32.  
  33.     if($item!='.'&&$item!='..'){ 
  34.  
  35.       return false; 
  36.  
  37.     } 
  38.  
  39.   } 
  40.  
  41.   //关闭句柄 
  42.  
  43.   closedir($handle); 
  44.  
  45.   return true; 
  46.  
  47. } 
  48.  
  49. ------------------- 
  50.  
  51. /** 
  52.  
  53.  * 读取目录下的所有文件 
  54.  
  55.  * @method read_directory 
  56.  
  57.  * @param  string         $path 目录名称 
  58.  
  59.  * @return void            直接输出目录下的所有文件及子目录 
  60.  
  61.  */ 
  62.  
  63. function read_directory(string $path){ 
  64.  
  65.   if(!is_dir($path)){ 
  66.  
  67.     return false; 
  68.  
  69.   } 
  70.  
  71.   $handle=opendir($path); 
  72.  
  73.   while(($item=@readdir($handle))!==false){ 
  74.  
  75.     if($item!='.'&&$item!='..'){ 
  76.  
  77.       $pathName=$path.DIRECTORY_SEPARATOR.$item; 
  78.  
  79.       if(is_file($pathName)){ 
  80.  
  81.         echo '文件:',$item,'<br/>'; 
  82.  
  83.       }else{ 
  84.  
  85.         echo '目录:',$item,'<br/>'; 
  86.  
  87.         $func=__FUNCTION__; 
  88.  
  89.         $func($pathName); 
  90.  
  91.       } 
  92.  
  93.     } 
  94.  
  95.   } 
  96.  
  97.   closedir($handle); 
  98.  
  99. } 
  100.  
  101. // read_directory('a'); 
  102.  
  103. ------------------- 
  104.  
  105. /** 
  106.  
  107.  * 遍历目录下所有内容返回 
  108.  
  109.  * @method read_directory1 
  110.  
  111.  * @param  string          $path 目录名称 
  112.  
  113.  * @return mixed            false|array 
  114.  
  115.  */ 
  116.  
  117. function read_directory1(string $path){ 
  118.  
  119.   if(!is_dir($path)){ 
  120.  
  121.     return false; 
  122.  
  123.   } 
  124.  
  125.   $handle=opendir($path); 
  126.  
  127.   while(($item=@readdir($handle))!==false){ 
  128.  
  129.     if($item!='.'&&$item!='..'){ 
  130.  
  131.       $pathName=$path.DIRECTORY_SEPARATOR.$item; 
  132.  
  133.       if(is_file($pathName)){ 
  134.  
  135.         $arr['file'][]=$pathName; 
  136.  
  137.       }elseif(is_dir($pathName)){ 
  138.  
  139.         $arr['dir'][]=$pathName; 
  140.  
  141.         $func=__FUNCTION__; 
  142.  
  143.         $func($pathName); 
  144.  
  145.       } 
  146.  
  147.     } 
  148.  
  149.   } 
  150.  
  151.   closedir($handle); 
  152.  
  153.   return $arr; 
  154.  
  155. } 
  156.  
  157. // $res=read_directory1('a'); 
  158.  
  159. // print_r($res); 
  160.  
  161. ------------------- 
  162.  
  163. /** 
  164.  
  165.  * 读取目录中的所有文件 
  166.  
  167.  * @method get_all_files 
  168.  
  169.  * @param  string        $path 目录名称 
  170.  
  171.  * @return mixed              false|array 
  172.  
  173.  */ 
  174.  
  175. function get_all_files(string $path){ 
  176.  
  177.   if(!is_dir($path)){ 
  178.  
  179.     return false; 
  180.  
  181.   } 
  182.  
  183.   if($handle=opendir($path)){ 
  184.  
  185.     $res=[]; 
  186.  
  187.     while(($item=readdir($handle))!==false){ 
  188.  
  189.       if($item!='.'&&$item!='..'){ 
  190.  
  191.         $pathName=$path.DIRECTORY_SEPARATOR.$item; 
  192.  
  193.         is_dir($pathName)?$res[$pathName]=get_all_files($pathName):$res[]=$pathName; 
  194.  
  195.       } 
  196.  
  197.     } 
  198.  
  199.     closedir($handle); 
  200.  
  201.     return $res; 
  202.  
  203.   }else{ 
  204.  
  205.     return false; 
  206.  
  207.   } 
  208.  
  209. } 
  210.  
  211. // print_r(get_all_files('a')); 
  212.  
  213. ------------------- 
  214.  
  215. /** 
  216.  
  217.  * 得到目录大小 
  218.  
  219.  * @method get_dir_size 
  220.  
  221.  * @param  string       $path 目录名称 
  222.  
  223.  * @return mixed             false|int 
  224.  
  225.  */ 
  226.  
  227. function get_dir_size(string $path){ 
  228.  
  229.   if(!is_dir($path)){ 
  230.  
  231.     return false; 
  232.  
  233.   } 
  234.  
  235.   static $sum=0; 
  236.  
  237.   $handle=opendir($path); 
  238.  
  239.   while(($item=readdir($handle))!==false){ 
  240.  
  241.     if($item!='.'&&$item!='..'){ 
  242.  
  243.       $pathName=$path.DIRECTORY_SEPARATOR.$item; 
  244.  
  245.       if(is_file($pathName)){ 
  246.  
  247.         $sum+=filesize($pathName); 
  248.  
  249.       }else{ 
  250.  
  251.         $func=__FUNCTION__; 
  252.  
  253.         $func($pathName); 
  254.  
  255.       } 
  256.  
  257.     } 
  258.  
  259.   } 
  260.  
  261.   closedir($handle); 
  262.  
  263.   return $sum; 
  264.  
  265. } 
  266.  
  267. // echo get_dir_size('a'); 
  268.  
  269. ------------------- 
  270.  
  271. /** 
  272.  
  273.  * 重命名目录 
  274.  
  275.  * @method rename_dir 
  276.  
  277.  * @param  string     $oldName 原目录 
  278.  
  279.  * @param  string     $newName 新目录 
  280.  
  281.  * @return boolean              true|false 
  282.  
  283.  */ 
  284.  
  285. function rename_dir(string $oldName,string $newName){ 
  286.  
  287.   //检测原文件是否存在,或者当前目录下存在同名目录 
  288.  
  289.   $dest=dirname($oldName).DIRECTORY_SEPARATOR.$newName; 
  290.  
  291.   if(!is_dir($oldName)|| file_exists($dest)){ 
  292.  
  293.     return false; 
  294.  
  295.   } 
  296.  
  297.   if(rename($oldName,$dest)){ 
  298.  
  299.     return true; 
  300.  
  301.   } 
  302.  
  303.   return false; 
  304.  
  305. } 
  306.  
  307. //重命名 
  308.  
  309. // var_dump(rename_dir('a','aaaa')); 
  310.  
  311. // var_dump(rename_dir('b','c')); 
  312.  
  313. ------------------- 
  314.  
  315. /** 
  316.  
  317.  * 剪切目录 
  318.  
  319.  * @method cut_dir 
  320.  
  321.  * @param  string  $src 原目录 
  322.  
  323.  * @param  string  $dst 新目录位置 
  324.  
  325.  * @return boolean       true|false 
  326.  
  327.  */ 
  328.  
  329. function cut_dir(string $src,string $dst){ 
  330.  
  331.   //检测原目录是否存在,不存在返回false 
  332.  
  333.   if(!is_dir($src)){ 
  334.  
  335.     return false; 
  336.  
  337.   } 
  338.  
  339.   //检测目录路径是否存在,不存在则创建 
  340.  
  341.   if(!is_dir($dst)){ 
  342.  
  343.     mkdir($dst,755,true); 
  344.  
  345.   } 
  346.  
  347.   //检测目录路径下是否存在同名目录 
  348.  
  349.   $dest=$dst.DIRECTORY_SEPARATOR.basename($src); 
  350.  
  351.   if(is_dir($dest)){ 
  352.  
  353.     return false; 
  354.  
  355.   } 
  356.  
  357.   //剪切 
  358.  
  359.   if(rename($src,$dest)){ 
  360.  
  361.     return true; 
  362.  
  363.   } 
  364.  
  365.   return false; 
  366.  
  367. } 
  368.  
  369. // var_dump(cut_dir('d','uploads')); 
  370.  
  371. // var_dump(cut_dir('c','test1')); 
  372.  
  373. // var_dump(cut_dir('test1','test2')); 
  374.  
  375. ------------------- 
  376.  
  377. /** 
  378.  
  379.  * 拷贝目录操作 
  380.  
  381.  * @method copy_dir 
  382.  
  383.  * @param  string   $src 原目录 
  384.  
  385.  * @param  string   $dst 目标路径 
  386.  
  387.  * @return boolean        true|false 
  388.  
  389.  */ 
  390.  
  391. function copy_dir(string $src,string $dst){ 
  392.  
  393.   //检测原目录是否存在 
  394.  
  395.   if(!is_dir($src)){ 
  396.  
  397.     return false; 
  398.  
  399.   } 
  400.  
  401.   //检测目标目录是否存在,不存在则创建 
  402.  
  403.   if(!is_dir($dst)){ 
  404.  
  405.     mkdir($dst,755,true); 
  406.  
  407.   } 
  408.  
  409.   //检测目标目录下是否存在同名文件 
  410.  
  411.   $dest=$dst.DIRECTORY_SEPARATOR.basename($src); 
  412.  
  413.   if(is_dir($dest)){ 
  414.  
  415.     return false; 
  416.  
  417.   } 
  418.  
  419.   $handle=opendir($src); 
  420.  
  421.   while(($item=@readdir($handle))!==false){ 
  422.  
  423.     if($item!='.'&&$item!='..'){ 
  424.  
  425.       if(is_file($src.DIRECTORY_SEPARATOR.$item)){ 
  426.  
  427.         copy($src.DIRECTORY_SEPARATOR.$item,$dst.DIRECTORY_SEPARATOR.$item); 
  428.  
  429.       } 
  430.  
  431.       if(is_dir($src.DIRECTORY_SEPARATOR.$item)){ 
  432.  
  433.         $func=__FUNCTION__; 
  434.  
  435.         $func($src.DIRECTORY_SEPARATOR.$item,$dst.DIRECTORY_SEPARATOR.$item); 
  436.  
  437.       } 
  438.  
  439.     } 
  440.  
  441.   } 
  442.  
  443.   closedir($handle); 
  444.  
  445.   return true; 
  446.  
  447. } 
  448.  
  449. // var_dump(copy_dir('uploads','test2/uploads')); 
  450.  
  451. ------------------- 
  452.  
  453. /** 
  454.  
  455.  * 删除非空目录 
  456.  
  457.  * @method del_dir 
  458.  
  459.  * @param  string  $path 目录名称 
  460.  
  461.  * @return boolean        true|false 
  462.  
  463.  */ 
  464.  
  465. function del_dir(string $path){ 
  466.  
  467.   //检测目录是否存在 
  468.  
  469.   if(!is_dir($path)){ 
  470.  
  471.     return false; 
  472.  
  473.   } 
  474.  
  475.   $handle=opendir($path); 
  476.  
  477.   while(($item=@readdir($handle))!==false){ 
  478.  
  479.     if($item!='.'&&$item!='..'){ 
  480.  
  481.       $pathName=$path.DIRECTORY_SEPARATOR.$item; 
  482.  
  483.       if(is_file($pathName)){ 
  484.  
  485.         @unlink($pathName); 
  486.  
  487.       }else{ 
  488.  
  489.         $func=__FUNCTION__; 
  490.  
  491.         $func($pathName); 
  492.  
  493.       } 
  494.  
  495.     } 
  496.  
  497.   } 
  498.  
  499.   closedir($handle); 
  500.  
  501.   rmdir($path); 
  502.  
  503.   return true; 
  504.  
  505. } 
  506.  
  507. // var_dump(del_dir('test2')); 

DIRECTORY_SEPARATOR

在 windows 我们习惯性的使用“\”作为文件分隔符,但是在 linux 上系统不认识这个标识,于是就要引入这个 php 内置变量了:DIRECTORY_SEPARATOR。

比如开发机器是 windows,有一个图片上传程序,而使用了(\)作为文件分隔符,调试机器上指定的上传文件保存目录:define('ROOT',dirname(__FILE__)."\upload"),在本地调试都很正常,但是上传到 linux 服务器的时候会发现会出错。这个问题就是出在文件的分隔符上,windows 上习惯性的使用\作为文件分隔符,但是在 linux 上只认识“/”,

于是就要引入下面这个 php 内置变量 DIRECTORY_SEPARATOR。

Tags: PHP目录操作

分享到:

相关文章