PHP递归函数导致PHP内存不足


PHP recursive function causing PHP to run out of memory?

Fatal error: Allowed memory size of 805306368 bytes exhausted (tried to
allocate 8192 bytes) in *directory* on line 6

这是当我尝试运行这个脚本访问页面时抛出的错误:

$root = '../public_html/';
function proccess($dir) {
    $items = scandir($dir);
    $result = array();
    foreach ($items as $item)
    {
        if (is_dir($item))
            $result[$item] = proccess($item);
        else
            array_push($result, $item);
    }
    return $result;
}
print_r(proccess($root));

我想要完成的是在我的服务器上的public_html目录中建立一个代表目录树的关联数组。我试图为自己创建一个图形索引…主要是为了好玩,但这已经变成了一个关于递归的学习经验!

在我看来,这个函数看起来相当简单,我的服务器上没有那么多文件……所以,除非我不小心创建了一个无限递归循环,否则我不明白为什么会耗尽内存。

循环逻辑:扫描根目录,然后遍历结果数组。如果它找到另一个目录,则将其名称设置为$result数组的键,并再次运行process()。如果它找到一个文件,只需将文件名推入$result数组。

问题是scandir也返回...,分别表示"此目录"answers"父目录"。所以你在无限扫描同一个目录。把它们过滤掉…

foreach ($items as $item){
     if($item=="." || $item == "..") continue;
     // rest of the code here...
}