Bug #78094 [Opn->Ver]: File Search Problem Excessive Time

From: Date: Sun, 02 Jun 2019 11:51:38 +0000
Subject: Bug #78094 [Opn->Ver]: File Search Problem Excessive Time
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-221081@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=78094&edit=1 ID: 78094 Updated by: cmb@php.net Reported by: dpfender44 at gmail dot com Summary: File Search Problem Excessive Time -Status: Open +Status: Verified Type: Bug Package: *Directory/Filesystem functions Operating System: Windows 10 -PHP Version: Next Major Version +PHP Version: 7.4Git-2019-06-02 (snap) Block user comment: N Private report: N New Comment: Thanks for reporting this issue. I can confirm a severe performance regression with the following script: <?php $start = hrtime(true); $count = scandirrec('D:/git/php/php-src/ext'); $end = hrtime(true); printf("%d files found in %f sec\n", $count, ($end-$start)/1e9); function scandirrec($dir) { $count = 0; $owd = getcwd(); chdir($dir); $files = scandir('.'); foreach ($files as $file) { if ($file[0] === '.') continue; if (is_dir($file)) { $count += scandirrec("$dir/$file"); } else { $count++; } } chdir($owd); return $count; } ?> Running with php-7.3.6-nts-Win32-VC15-x64, I get something like: 14105 files found in 0.245927 sec but with php-7.4-nts-windows-vs16-x64-r7a64150 and php-7.4-nts-windows-vc15-x64-re2f8d90 (latest VC 15 snap), something like: 14105 files found in 1.028066 sec (all three PHP versions running without php.ini) Previous Comments: ------------------------------------------------------------------------ [2019-06-01 15:00:20] dpfender44 at gmail dot com All of the filesystem functions take longer than in PHP 7.3.6 and is_dir() is the worst. Elapsed time for a recursive file search over several directories is in units of seconds. Time values are derived from using microtime() before and after each system function is used. Total count of files returned is 777; PHP 7.3.6 getcwd total 0.00004625 is_dir total 0.02332211 opendir total 0.00398731 readdir total 0.00258327 chdir total 0.00327039 closedir total 0.00072503 Total Elapsed 0.03843498 PHP 7.4.0-dev getcwd total 0 00007987 is_dir total 3.32146049 opendir total 0.00476623 readdir total 0.00765395 chdir total 0.00488377 closedir total 0.00070310 Total Elapsed 3.35602283 ------------------------------------------------------------------------ [2019-06-01 11:14:58] ab@php.net Thanks for the report. Could you please reduce the repro snippet to the absolutely required lines, only Windows related, only issue related? Thanks. ------------------------------------------------------------------------ [2019-05-31 17:09:43] dpfender44 at gmail dot com Description: ------------ My function scan_dir() uses opendir(), chdir(), readdir(), is_dir(), closedir() to scan for files on the server. PHP version 7.4.0-dev does the same scan as version 7.3.6 but takes about 100 times longer. This is all done on the same server, but just switching between PHP versions on 5/31/19. The extra time seems to be spent doing readdir(). Test script: --------------- http://djpsrc.djpnet.dyndns.org/test_scan_dir.php.txt Expected result: ---------------- PHP version 7.3.6 Operating System Microsoft Windows [Version 10.0.17763.503] File search types: .mp4|.webm|.mp3|.wav|.mid|.txt Units of seconds (Unix timestamp from microtime()): Start file search time (1559247589.134) End file search time (1559247589.1699) Elapsed time (0.035879135131836) Resulting file match count (777) Actual result: -------------- PHP version 7.4.0-dev Operating System Microsoft Windows [Version 10.0.17763.503] File search types: .mp4|.webm|.mp3|.wav|.mid|.txt Units of seconds (Unix timestamp from microtime()): Start file search time (1559320102.0205) End file search time (1559320105.3702) Elapsed time (3.3497362136841) Resulting file match count (777) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=78094&edit=1

« previous php.bugs (#221081) next »