wiem to pytanie może nie być aktualne, ale aby dołączyć, zrobiłem kilka testów (takich jak Aufziehvogel i Sayahan) z niewielką różnicą - w katalogu z 1 000 000 małych (kilka bajtów) plików.
$dir = dirname(__FILE__) . '/dir';
$startScan = microtime(true);
$array = scandir($dir);
for ($i = 0, $j = count($array); $i < $j; $i++) {
// Code
}
$endScan = microtime(true);
unset($array);
$startRead = microtime(true);
$handle = opendir($dir);
while (false !== ($entry = readdir($handle))) {
// Code
}
$endRead = microtime(true);
unset($handle);
unset($entry);
$startDir = microtime(true);
$files = new DirectoryIterator($dir);
foreach ($files as $file) {
// Code
}
$endDir = microtime(true);
unset($files);
echo 'scandir: ', ($endScan - $startScan), PHP_EOL;
echo 'readdir: ', ($endRead - $startRead), PHP_EOL;
echo 'DirectoryIterator: ', ($endDir - $startDir), PHP_EOL;
Wyniki (HDD):
scandir: 1.9403479099274
readdir: 0.79462885856628
DirectoryIterator: 0.5853099822998
Wyniki (SSD):
scandir: 0.83593201637268
readdir: 0.35835003852844
DirectoryIterator: 0.28022909164429
CPU: AMD A10-4600M APU z Radeon (TM) HD Graphics (4 rdzenie)
MEM: 8G
PHP: 5.6.29
możliwy duplikat [Katalog do tablicy z PHP] (http://stackoverflow.com/questions/2120287/directory-to-array-with-php) – salathe