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列出目录下所有文件(包括子目录)的主要内容,如果未能解决你的问题,请参考以下文章

Linux列出当前目录下的文件和目录用啥命令

Linux列出当前目录下的文件和目录用啥命令

Linux命令学习-ls命令

linux ls列出目录下所有文件数量

linux文件和目录处理命令

Linux命令复盘