最新消息:yaf表单扩展中新增加了浮点数、日期和集合的校验。php yaf框架扩展实践三——表单

php递归获取目录内的文件,包含子目录

PHP 5423浏览 7评论

封装成了一个方法,代码如下:

function readFileFromDir($dir) {
    if (!is_dir($dir)) {
        return false;
    }
    //打开目录
    $handle = opendir($dir);
    while (($file = readdir($handle)) !== false) {
        //排除掉当前目录和上一个目录
        if ($file == "." || $file == "..") {
            continue;
        }
        $file = $dir . DIRECTORY_SEPARATOR . $file;
        //如果是文件就打印出来,否则递归调用
        if (is_file($file)) {
            print $file . '<br />';
        } elseif (is_dir($file)) {
            readFileFromDir($file);
        }
    }
}

调用方式:

$dir = '/home/www/test'; 
readFileFromDir($dir);

查看php手册的话,还有一个方法scandir也可以使用,不过这个方法会一次性获取单级目录下的所有文件,存放到数组里,如果目录里的文件比较多的话,会卡。

转载请注明:快乐编程 » php递归获取目录内的文件,包含子目录

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (7)

  1. 这个方法好,递归是好东西啊!
    xiaomingtt5年前 (2012-12-26)回复
    • 陈杰斌
      目录层级一般不会成百上千,用递归的方法代码看起来简洁。
      山涧林鱼5年前 (2012-12-27)回复
  2. 陈杰斌
    第7行代码中,目录名称如果为0会读不出来
    头大5年前 (2013-01-18)回复
    • 陈杰斌
      谢谢,已经修正。要用恒不等于(!==)判断
      山涧林鱼5年前 (2013-01-18)回复
  3. 还有个淫荡的方法, 直接继承 FilterIterator 这个类。
    ghost5年前 (2013-02-01)回复
  4. glob('path/*');
    sasumi2年前 (2015-07-27)回复
    • 陈杰斌
      这个方法应该类似scandir,不过支持正则搜索,不错的哟
      陈杰斌2年前 (2015-07-31)回复