从目录和子目录 php 中获取所有文件、大小、路径

Posted

技术标签:

【中文标题】从目录和子目录 php 中获取所有文件、大小、路径【英文标题】:Fetch all files,size,path from directories and subdirectories php 【发布时间】:2013-08-30 05:03:16 【问题描述】:

我想使用一个函数从所有目录和子目录中获取所有文件名、大小、路径。我已经使用递归函数做了同样的事情。这是我的代码。

function scan_dir($path, $exclude)

$ite = new RecursiveDirectoryIterator($path);
$bytestotal=0;
$nbfiles=0;

$file_data = array();

$i= 0;
foreach (new RecursiveIteratorIterator($ite,RecursiveIteratorIterator::CHILD_FIRST) as $filename => $cur) 


if ($cur->isDir())
    
        continue ;
    

    $files = str_replace('\\','/', $filename);
     $filesize = $cur->getSize();

    $exclude = array_filter($exclude);


     $data = array('name'=>$files, 'path'=>$cur->getPath(),'size'=>$cur->getSize());
     $file_data[] = $data;  
    $i++;
    $nbfiles++;

    $bytestotal += $filesize;       
 
  $bytestotal = $bytestotal;
  return array( 'total_files'=> $nbfiles, 'total_size' => $bytestotal, 'files'=> $file_data);

问题是当我在 linux 服务器上运行我的代码时,由于递归函数,它运行缓慢。请问我可以有相同的替代品,以便我可以获得相同的输出但使用不同的功能。

我想添加一个 if else 部分,即检查服务器,if 它是 linux 然后 else 递归函数 非常感谢任何帮助。

【问题讨论】:

单独检查 linux 并不能解决问题。速度通常是因为树的深度/大小和底层文件系统。也许你需要减少深度(使用递归迭代器可以控制深度php.net/recursiveiteratoriterator.setmaxdepth) 【参考方案1】:

使用glob

$folder = dirname( __FILE__ ) ."./images/*";
foreach( glob( './images/*.*' ) as $filename ) 
    echo $filename;
    echo $size = filesize($filename);

【讨论】:

以上是关于从目录和子目录 php 中获取所有文件、大小、路径的主要内容,如果未能解决你的问题,请参考以下文章

php 遍历文件夹文件问题

PHP - 如何从目录和子目录中获取最新文件

php如何获取目录下所有文件名

如何使用 php 和 javascript 从目录中获取文件名

Linux 下获取当前路径所有目录大小并排序

PHP 获取指定目录下所有文件(包含子目录)