У меня есть приложение PHP 5.3.4, работающее в Windows XP SP3, где мне нужно проиндексировать содержимое каталога на удаленном ПК. Самый большой каталог, который я индексирую, содержит около 18 000 элементов
Этот вызов найдет такие элементы, как \\somepc.mycorp.com\foo\mydir\bar\zoo.zip
.
// look in all the directories in \\somepc.mycorp.com\foo for directories containing a file \bar\zoo.zip
$item_list = GetFileList('\\\\somepc.mycorp.com\\foo', '\\bar\\zoo.zip');
Реализуется как:
function GetFileList($base_dir, $path_mask)
{
$result= array();
if ($handle = opendir($base_dir))
{
while (false !== ($entry = readdir($handle)))
{
// only add items that match the mask we're looking for
if ($entry != "." &&
$entry != ".." &&
file_exists($base_dir.'\\$entry\\$path_mask'))
{
array_push($result, $entry);
}
}
closedir($handle);
}
return $result;
}
К сожалению, для самых больших структур каталогов эта операция может занять более часа. Если я уберу фильтр и просто вставлю каждый элемент в массив, он завершится через несколько секунд.
Есть ли более быстрый способ сделать это?