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数组的键,然后再次运行proccess()。如果找到文件,只需将文件名推送到$ result数组。
答案 0 :(得分:5)
问题是scandir
还返回.
和..
,分别表示“此目录”和“父目录”。 SSo你无限地扫描同一个目录。只需过滤掉那些..
foreach ($items as $item){
if($item=="." || $item == "..") continue;
// rest of the code here...
}