PHP写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。

本文介绍了一个PHP脚本如何实现目录遍历的功能,并详细解释了递归操作的过程。通过具体的代码实例,展示了如何使用opendir(), readdir() 和 is_dir() 函数来获取指定目录下的所有文件和子目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

狭义上来说,目录就相当于一个文件夹,里面含有文件和文件夹,其中里面的文件夹又是一个目录,所以涉及到递归操作
例如:D盘下建立文件夹testscandir,testscandir有文件a.php,b.php和文件夹c,文件夹c里有c1.txt和c2.doc

<?php 
function xf_scandir($dir)
{
     $files = array();
     if( $handle=opendir($dir) ){                             //$handle=Resource id #3

        while( ($file = readdir($handle)) !== false ){       //echo $file;echo "<hr>"; //$file分别是 .  ..   a.php   b.php   c
            if( $file != ".." && $file != "." ){
                if( is_dir($dir . "/" . $file) ){   //文件夹c           
                        $files[$file] = xf_scandir($dir . "/" . $file);                                      
                }else{                              //文件a.php,b.php                 
                    $files[] = $file;                          //var_dump($file);echo "<hr>";//分别是 a.php  b.php
                }
            }
        }


        closedir($handle);
        return $files;
    }
}

$re=xf_scandir('D:\testscandir');
var_dump($re);
/*
array (size=3)
  0 => string 'a.php' (length=5)
  1 => string 'b.php' (length=5)
  'c' => 
    array (size=2)
      0 => string 'c1.txt' (length=6)
      1 => string 'c2.doc' (length=6)
*/


?>

opendir(path,context); //打开目录句柄
path 必需。规定要打开的目录路径。
context 可选。规定目录句柄的环境。context 是可修改目录流的行为的一套选项。
返回值:
成功则返回目录句柄资源。失败则返回 FALSE。
如果路径不是合法目录,或者由于许可限制或文件系统错误导致的目录不能打开,则抛出 E_WARNING 级别的错误。
您可以通过在函数名称前添加 ‘@’ 来隐藏 opendir() 的错误输出。

readdir(dir_handle); //返回目录中下一个文件的文件名
dir_handle 可选。指定之前由 opendir() 打开的目录句柄资源。如果该参数未指定,则使用最后一个由 opendir() 打开的链接。
返回值: 若成功则返回条目名称(文件名),失败则返回 FALSE。

bool is_dir ( string $filename )
如果文件名存在并且为目录则返回 TRUE。如果 filename 是一个相对路径,则按照当前工作目录检查其相对路径。

scandir(directory,sorting_order,context); //返回指定目录中的文件和目录的数组
directory 必需。规定要扫描的目录。
sorting_order
可选。规定排列顺序。默认是 0,表示按字母升序排列。
如果设置为 SCANDIR_SORT_DESCENDING 或者 1,则表示按字母降序排列。
如果设置为 SCANDIR_SORT_NONE,则返回未排列的结果。
context 可选。规定目录句柄的环境。context 是可修改目录流的行为的一套选项。
返回值:
若成功则返回文件和目录的数组。失败则返回 FALSE。
如果 directory 不是目录,则抛出 E_WARNING 级别的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值