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