之前xu版主的一个方法在这里借用一下
<?php
$dir='d:\\';
$res=glob($dir);
for($i=0;$i<count($res);$i++){
if(is_dir($res[$i])){
 $res=array_merge($res,glob($res[$i].'/*'));
$g=glob($res[$i].'/*');
var_dump($g);
}
}
?>

解决方案 »

  1.   

    你 为什么把 if ($filename == '.' || $filename == '..') continue; 注释掉?当 $filename = '.' 和 $filename =  '..' 时,is_dir(realpath($dir.'/'.$filename) 成立,不就产生死循环了吗?其实用 glob 函数 或 目录迭代器要简单的多
      

  2.   

     这边递归耗内存应该是mysql的insert操作耗内存比较严重, 可以考虑使用load data infile 这种方式优化一下。。
      

  3.   

    if ($filename == '.' || $filename == '..') continue; 這句是必須有的,否則會死循環。
      

  4.   

    用PHP自带的SPL库处理会快很多:例如
    $iterator = new \RecursiveIteratorIterator(new RecursiveDirectoryIterator('./'));
    foreach ($iterator as $it){
    echo $it->getFilename(),'->',$it->getSize(),'<br/>';
    }可以自己参考下手册,SPL还是封装的蛮好的
      

  5.   

    memory_get_peak_usage
    我用这个函数分别测试了空脚本和你的代码运行于一个全是零碎文件的8.4G的D盘,结果相差无几
    有点搞不懂了
      

  6.   

    if ($filename == '.' || $filename == '..') continue;
    这个要加上。