I know this question may be not actual now, but to append I have done some tests (like Aufziehvogel and Sayahan) with a small difference - on a directory with 1,000,000 small (a few bytes) files.
$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;
Results (HDD):
scandir: 1.9403479099274
readdir: 0.79462885856628
DirectoryIterator: 0.5853099822998
Results (SSD):
scandir: 0.83593201637268
readdir: 0.35835003852844
DirectoryIterator: 0.28022909164429
CPU: AMD A10-4600M APU with Radeon(tm) HD Graphics (4 cores)
MEM: 8G
PHP: 5.6.29