找回密码
 注册

[PHP] PHP扫描文件夹并以相对路径返回所有文件和子目录中的文件

php 发表于 2015/11/29 03:17 | 显示全部楼层 |阅读模式
PHP将一个目录中的所有文件及其子目录中的文件,以相对路径的形式作为数组返回指定目录的文件列表,类似于 Windows 中的 dir 命令,PHP中有glob()函数,但是glob()函数只能返回当前目录中的文件列表,不会将子目录中的文件也包含进来。我们可以通过递归来实现。当然,也可以递归调用glob()函数来实现。
以相对路径返回目录的文件列表是非常有用的,比如使用ZipArchive将整个文件夹压缩到一个压缩文件中的时候,或者复制文件夹、删除目录删除所有子目录及文件。
  1. <?php
  2.         /*
  3.          * PHP 扫描文件夹,并以相对路径保存当前目录和所有子目录中的文件
  4.          * @author 吴先成 www.wuxiancheng.cn www.51-n.com
  5.          * @param string $path 要扫描文件夹的路径
  6.          * @param string $rpath 指定要显示的相对路径,所有文件都会添加这个参数作为路径前缀
  7.          * @return array 返回目录中的文件列表,文件夹不作为文件,并且结果集中不包含.和..
  8.         */        
  9.         function flist($path,$rpath=''){
  10.                 $flist=array();
  11.                 if($files=scandir($path)){
  12.                         foreach($files as $file){
  13.                                 if($file==='.'||$file==='..'){
  14.                                         continue;
  15.                                 }
  16.                                 $rpath = trim(str_replace('\\','',$rpath),'/').'/';
  17.                                 $fpath = $path.'/'.$file;
  18.                                 if(is_dir($fpath)){
  19.                                         $flist = array_merge($flist, flist($fpath,$rpath.$file));
  20.                                 }else{
  21.                                         $flist[] = ltrim($rpath.$file,'/');
  22.                                 }
  23.                         }
  24.                 }
  25.                 $flist = array_reverse($flist);
  26.                 return $flist;
  27.         }
  28. ?>
复制代码
调用方法
  1. <?php
  2.         echo '<pre>';
  3.         print_r(flist('./'));
  4.         echo '<pre>';
  5. ?>
复制代码
  1. Array
  2. (
  3.     [0] => what.zip
  4.     [1] => src/css/style.css
  5.     [2] => src/images/right-arrow.png
  6.     [3] => src/images/psd/xc.psd
  7. )
复制代码

手机版|轻松E站

轻松E站

快速回复 返回顶部 返回列表