#42679 [Opn->Bgs]: scandir() is much more slower than readdir()
ID: 42679
Updated by: iliaa@php.net
Reported By: nangnahz at gmail dot com
-Status: Open
+Status: Bogus
Bug Type: Performance problem
Operating System: Ubuntu 7.04
PHP Version: 5.2.4
New Comment:
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
scandir() does a lot more then readdir
Previous Comments:
------------------------------------------------------------------------
[2007-09-15 22:45:10] nangnahz at gmail dot com
Description:
------------
I try to traversal a directory. Include about 20000 files and 200
directories.
Use scandir function, it cost about 70 seconds.
Then I use readdir function, it cost only 6 seconds!
System Version:
Linux ubuntu 2.6.20-16-generic
Apache/2.2.6
PHP/5.2.4
Mysql/5.0.45
Reproduce code:
---------------
<?php
function useScandir($dir) {
$i = 0;
while ($dir) {
foreach (scandir($dir[0]) as $filename) {
if ($filename != '.' && $filename != '..') {
$filename = $dir[0] . '/' . $filename;
if (is_dir($filename)) {
echo $i . " [dir] " . $filename . "<br>";
$dir[] = $filename;
} else {
echo $i . " file: " . $filename . "<br>";
}
$i++;
}
}
array_shift($dir);
}
}
useScandir(array ("/data/www/manual"));
?>
<?php
function useReaddir($dir) {
$i = 0;
while ($dir) {
$dh = opendir($dir[0]);
while (false !== ($filename = readdir($dh))) {
if ($filename != '.' && $filename != '..') {
$filename = $dir[0] . "/" . $filename;
if (is_dir($filename)) {
echo $i . " [dir] " . $filename . "<br>";
$dir[] = $filename;
} else {
echo $i . " file: " . $filename . "<br>";
}
$i++;
}
}
closedir($dh);
array_shift($dir);
}
}
useReaddir(array ('/data/www/manual'));
?>
Expected result:
----------------
run fast!!!
Actual result:
--------------
it's very slow......
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=42679&edit=1
Thread (2 messages)