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数组即可.
问题是scandir还返回.和..,这意味着"这个目录"和"父目录",分别.SSo你无限地扫描同一个目录.只需过滤掉那些..
foreach ($items as $item){
if($item=="." || $item == "..") continue;
// rest of the code here...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
428 次 |
| 最近记录: |