php列出目录下所有文件(包括子目录)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php列出目录下所有文件(包括子目录)相关的知识,希望对你有一定的参考价值。
顺便输出到一个文件中
<?php/**
* Goofy 2011-11-30
* getDir()去文件夹列表,getFile()去对应文件夹下面的文件列表,二者的区别在于判断有没有“.”后缀的文件,其他都一样
*/
//获取文件目录列表,该方法返回数组
function getDir($dir)
$dirArray[]=NULL;
if (false != ($handle = opendir ( $dir )))
$i=0;
while ( false !== ($file = readdir ( $handle )) )
//去掉"“.”、“..”以及带“.xxx”后缀的文件
if ($file != "." && $file != ".."&&!strpos($file,"."))
$dirArray[$i]=$file;
$i++;
//关闭句柄
closedir ( $handle );
return $dirArray;
//获取文件列表
function getFile($dir)
$fileArray[]=NULL;
if (false != ($handle = opendir ( $dir )))
$i=0;
while ( false !== ($file = readdir ( $handle )) )
//去掉"“.”、“..”以及带“.xxx”后缀的文件
if ($file != "." && $file != ".."&&strpos($file,"."))
$fileArray[$i]="./imageroot/current/".$file;
if($i==100)
break;
$i++;
//关闭句柄
closedir ( $handle );
return $fileArray;
//调用方法getDir("./dir")……
?> 参考技术A 1、列出当前目录的文件、文件夹完整路径
ls -1
|awk 'print i$0' i=`pwd`'/' (注意:这里 ls 后面那是个数字 1 而不是字母
l)
2、列出当前目录及子目录的文件、文件夹完整路径
ls -R
|awk 'print i$0' i=`pwd`'/'
2b)
列出当前目录及子目录下的文件夹完整路径
ls
-FR | grep /$ | sed "s:^:`pwd`/:"
3、用find实现,好像运行要慢些
find
/ -name "*.*" -exec ls \;
4、递归列出当前目录及子目录名称
ls
-FR | grep /$
5、递归列出当前目录及子目录名称,包括相关属性
ls
-lR | grep "^d"
#
drwxr-xr-x 3 idea idea 4096 Aug 2 2009 images
6、只列出当前目录下的子目录
用ls只列出子目录
ls
-d */ 参考技术B 空上没有函数可以直接列出的,一般叫么调用系统命令 tree 然后tree返回的是一段目录树文本,自己用字符串函数处理一下得到所有文件和目录。但是tree并不是所有linux发行版都有的命令,有些是没这命令的。
最可靠方法使用目录递归,我这里写了一个函数,你可以参考。是把目录下包括子目录的所有文件和路径 列出来到数组里的,你如有其它需要可以改改:
函数复制到你的代码 里,然后调用时只需要传你要递归的目录就可以了。
/**
* 目录递归函数
* @param [type] $dir [基本目录]
* @param [type] &$allfile [每次递归结果]
* @return [type] [description]
*/
function dirinfo($dir, &$allfile)
//static $allfile = array();
if (is_dir($dir))
$dir = realpath($dir);
$dirhandle = opendir($dir);
while (false !== ($file = readdir($dirhandle)))
$filename = $dir .'/'. $file;
if ($file == '.' || $file == '..' || is_link($filename))
continue;
if (is_dir($filename))
if (!isset($allfile))
$allfile = array();
dirinfo($filename, $allfile);
else
$allfile[] = $filename;
closedir($dirhandle);
return $allfile;
参考技术C function scan_file($path)
$item=scandir($path);
foreach($item as $k=>$v)
if($v=='.' || $v=='..') continue;
$v=$path.'\\'.$v;
if(is_dir($v))
scan_file($v);
else
echo $v."<Br/>";
scan_file('E:\MyPHP');追问
不行啊
追答scan_file('你的路径');
代码是测试通过的.
谢谢了!
本回答被提问者采纳 参考技术D function getFile($path)foreach(scandir($path) as $file)
if($file!="." && $file!="..")
if(is_dir($file))
getFile($file);
$files[]=$file;
以上是关于php列出目录下所有文件(包括子目录)的主要内容,如果未能解决你的问题,请参考以下文章