PHP递归函数导致PHP耗尽内存?

Eri*_*tor 0 php

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

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

$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));
Run Code Online (Sandbox Code Playgroud)

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

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

循环逻辑:扫描根目录,然后遍历生成的数组.如果找到另一个目录,请将其名称设置为$ result数组的键,然后再次运行proccess().如果找到文件,只需将文件名推送到$ result数组即可.

I w*_*ce. 5

问题是scandir还返回...,这意味着"这个目录"和"父目录",分别.SSo你无限地扫描同一个目录.只需过滤掉那些..

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