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

分享到:

相关文章