gpt4 book ai didi

PHP: scandir() 太慢

转载 作者:可可西里 更新时间:2023-11-01 12:54:46 26 4
gpt4 key购买 nike

我必须创建一个函数,将所有子文件夹列出到一个文件夹中。我有一个无文件过滤器,但该函数使用 scandir() 进行列表。这使得应用程序非常慢。是否有 scandir() 的替代方案,即使是非 native php 函数?提前致谢!

最佳答案

你可以使用 readdir,它可能会更快,像这样:

function readDirectory($Directory,$Recursive = true)
{
if(is_dir($Directory) === false)
{
return false;
}

try
{
$Resource = opendir($Directory);
$Found = array();

while(false !== ($Item = readdir($Resource)))
{
if($Item == "." || $Item == "..")
{
continue;
}

if($Recursive === true && is_dir($Item))
{
$Found[] = readDirectory($Directory . $Item);
}else
{
$Found[] = $Directory . $Item;
}
}
}catch(Exception $e)
{
return false;
}

return $Found;
}

可能需要一些调整,但这基本上就是 scandir 所做的,它应该更快,如果不是请写一个更新,因为我想看看我是否可以做出更快的解决方案。

另一个问题是,如果您读取一个非常大的目录,您会在内部存储器中填充一个数组,而这可能就是您的内存所在的位置。

您可以尝试创建一个读取偏移量的函数,这样您就可以一次返回 50 个文件!

一次读取大块文件使用起来也很简单,就像这样:

$offset = 0;
while(false !== ($Batch = ReadFilesByOffset("/tmp",$offset)))
{
//Use $batch here which contains 50 or less files!

//Increment the offset:
$offset += 50;
}

关于PHP: scandir() 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5172784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com