He hecho algunas pruebas. (Gracias a Aufziehvogel para la construcción)
$count = 100000;
$dir = dirname(__FILE__);
$startScan = microtime(true);
for ($i=0;$i<$count;$i++) {
$array = scandir($dir);
}
$endScan = microtime(true);
$startRead = microtime(true);
for ($i=0;$i<$count;$i++) {
$handle = opendir($dir);
while (false !== ($entry = readdir($handle))) {
// We do not know what to do
}
}
$endRead = microtime(true);
$startGlob = microtime(true);
for ($i=0;$i<$count;$i++) {
$array3 = glob('*');
}
$endGlob = microtime(true);
echo "scandir: " . ($endScan-$startScan) . "\n";
echo "readdir: " . ($endRead-$startRead) . "\n";
echo "glob : " . ($endGlob-$startGlob) . "\n";
Resultados servidor Linux:
scandir: 0.82553291320801
readdir: 0.91677618026733
glob : 0.76309990882874
Este Reasults de 4 núcleos (8 hilos) Intel E3-1240 Cpu Linux + servidor Apache.
Pero los resultados de Windows Servidores son lo opuesto. servidor de Windows + Apache - Intel Q8400 4 Core (4 hilos)
Server Resultados de Windows:
$count = 10000; // it was on linux 100000 :)
scandir: 0.61557507515
readdir: 0.614650011063
glob : 1.92112612724
(carpeta incluye 13 archivos Si los archivos es aumento, los resultados pueden ser diferentes.)
posible duplicado de [Directorio a array con PHP] (http://stackoverflow.com/questions/2120287/directory-to-array-with-php) – salathe