tôi biết câu hỏi này có thể không thực tế bây giờ, nhưng để nối thêm tôi đã thực hiện một số thử nghiệm (như Aufziehvogel và Sayahan) với một sự khác biệt nhỏ - trên một thư mục với các tệp nhỏ 1.000.000 (một vài byte).
$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;
Kết quả (HDD):
scandir: 1.9403479099274
readdir: 0.79462885856628
DirectoryIterator: 0.5853099822998
Kết quả (SSD):
scandir: 0.83593201637268
readdir: 0.35835003852844
DirectoryIterator: 0.28022909164429
CPU: AMD A10-4600M APU với Radeon (tm) HD Graphics (4 lõi)
MEM: 8G
PHP: 5.6.29
có thể trùng lặp của [Thư mục để mảng với PHP] (http://stackoverflow.com/questions/2120287/directory-to-array-with-php) – salathe