#44018 [Opn]: RecursiveDirectoryIterator options inconsistancy

From: Date: Tue, 30 Sep 2008 22:18:51 +0000
Subject: #44018 [Opn]: RecursiveDirectoryIterator options inconsistancy
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-129375@lists.php.net to get a copy of this message
ID: 44018 User updated by: jordan dot raub at dataxltd dot com Reported By: jordan dot raub at dataxltd dot com Status: Open Bug Type: SPL related Operating System: * PHP Version: 5.2.5 Assigned To: helly New Comment: patch.... diff php5.2-200809302030/ext/spl/spl_directory.c php52/ext/spl/spl_directory.c 683,686c683 < } else if (SPL_FILE_DIR_CURRENT(intern, SPL_FILE_DIR_CURRENT_AS_FILEINFO)) { < spl_filesystem_object_get_file_name(intern TSRMLS_CC); < spl_filesystem_object_create_type(0, intern, SPL_FS_INFO, NULL, return_value TSRMLS_CC); < } else { --- > } else if (SPL_FILE_DIR_CURRENT(intern, SPL_FILE_DIR_CURRENT_AS_SELF)) { 688a686,688 > } else { > spl_filesystem_object_get_file_name(intern TSRMLS_CC); > spl_filesystem_object_create_type(0, intern, SPL_FS_INFO, NULL, return_value TSRMLS_CC); 966c966 < long flags = SPL_FILE_DIR_KEY_AS_PATHNAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO; --- > long flags = SPL_FILE_DIR_KEY_AS_PATHNAME|SPL_FILE_DIR_CURRENT_AS_SELF; 1258c1258,1260 < } else if (SPL_FILE_DIR_CURRENT(object, SPL_FILE_DIR_CURRENT_AS_FILEINFO)) { --- > } else if (SPL_FILE_DIR_CURRENT(object, SPL_FILE_DIR_CURRENT_AS_SELF)) { > *data = (zval**)&iterator->intern.data; > } else { 1265,1266d1266 < } else { < *data = (zval**)&iterator->intern.data; diff php5.2-200809302030/ext/spl/spl_directory.h php52/ext/spl/spl_directory.h 96,97c96,97 < #define SPL_FILE_DIR_CURRENT_AS_FILEINFO 0x00000000 /* make RecursiveDirectoryTree::current() return SplFileInfo */ < #define SPL_FILE_DIR_CURRENT_AS_SELF 0x00000010 /* make RecursiveDirectoryTree::current() return getSelf() */ --- > #define SPL_FILE_DIR_CURRENT_AS_FILEINFO 0x00000010 /* make RecursiveDirectoryTree::current() return SplFileInfo */ > #define SPL_FILE_DIR_CURRENT_AS_SELF 0x00000000 /* make RecursiveDirectoryTree::current() return getSelf() */ UnitTest --TEST-- Bug #44018 (RecursiveDirectoryIterator options inconsistancy) --FILE-- <?php foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__))) as $key => $file) { if(strpos($key, '/tests') !== false) { echo get_class($file) . "\n"; } } $options = 0; foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)), $options) as $key => $file) { if(strpos($key, '/tests') !== false) { echo get_class($file) . "\n"; } } $options = RecursiveDirectoryIterator::CURRENT_AS_FILEINFO; foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)), $options) as $key => $file) { if(strpos($key, '/tests') !== false) { echo get_class($file) . "\n"; } } $options = RecursiveDirectoryIterator::KEY_AS_FILENAME; foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)), $options) as $key => $file) { if('tests' === $key) { echo get_class($file) . "\n"; } } $options = RecursiveDirectoryIterator::CURRENT_AS_FILEINFO | RecursiveDirectoryIterator::KEY_AS_FILENAME; foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)), $options) as $key => $file) { if('tests' === $key) { echo get_class($file) . "\n"; } } ?> --EXPECTF-- RecursiveDirectoryIterator RecursiveDirectoryIterator SplFileInfo RecursiveDirectoryIterator SplFileInfo Previous Comments: ------------------------------------------------------------------------ [2008-09-30 21:32:34] jordan dot raub at dataxltd dot com re-opened ------------------------------------------------------------------------ [2008-09-30 21:32:02] jordan dot raub at dataxltd dot com Broken again... here it is from a snapshot... looks like CURRENT_AS_FILEINFO == 0 now $options not passed string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/dir" object(SplFileInfo)#3 (0) { } string(83) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#4 (0) { } $options = 0 string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/dir" object(SplFileInfo)#3 (0) { } string(83) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#4 (0) { } $options = 0 string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/dir" object(SplFileInfo)#3 (0) { } string(83) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#4 (0) { } $options = 100 string(3) "dir" object(SplFileInfo)#3 (0) { } string(34) "RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#4 (0) { } $options = 100 string(3) "dir" object(SplFileInfo)#3 (0) { } string(34) "RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#4 (0) { } ------------------------------------------------------------------------ [2008-02-05 16:13:52] jordan dot raub at dataxltd dot com works fine now... ------------------------------------------------------------------------ [2008-02-05 09:49:27] helly@php.net Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows (zip): http://snaps.php.net/win32/php5.2-win32-latest.zip For Windows (installer): http://snaps.php.net/win32/php5.2-win32-installer-latest.msi Can you './cvsclean' and rebuild 5.2 or at least 'touch ext/spl/spl_directory.c && make' ? The last fix for 5.2 was only in the headers and in my checks it worked correct. ------------------------------------------------------------------------ [2008-02-04 22:08:20] jordan dot raub at dataxltd dot com had to reopen it. php5.3cvs works fine but php5.2cvs fixed the error but put added a bug.. php5.3cvs works fine. the test script I ran now give the appropriate output: $options not passed string(21) "/virtualhosts/tmp/dir" object(RecursiveDirectoryIterator)#1 (4) { ["pathName":"SplFileInfo":private]=> string(17) "/virtualhosts/tmp" ["fileName":"SplFileInfo":private]=> string(21) "/virtualhosts/tmp/dir" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest.php" object(RecursiveDirectoryIterator)#1 (4) { ["pathName":"SplFileInfo":private]=> string(17) "/virtualhosts/tmp" ["fileName":"SplFileInfo":private]=> string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest.php" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } $options = 0 string(21) "/virtualhosts/tmp/dir" object(RecursiveDirectoryIterator)#2 (4) { ["pathName":"SplFileInfo":private]=> string(17) "/virtualhosts/tmp" ["fileName":"SplFileInfo":private]=> string(21) "/virtualhosts/tmp/dir" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest.php" object(RecursiveDirectoryIterator)#2 (4) { ["pathName":"SplFileInfo":private]=> string(17) "/virtualhosts/tmp" ["fileName":"SplFileInfo":private]=> string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest.php" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } $options = 10 string(21) "/virtualhosts/tmp/dir" object(SplFileInfo)#4 (2) { ["pathName":"SplFileInfo":private]=> string(17) "/virtualhosts/tmp" ["fileName":"SplFileInfo":private]=> string(21) "/virtualhosts/tmp/dir" } string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#2 (2) { ["pathName":"SplFileInfo":private]=> string(17) "/virtualhosts/tmp" ["fileName":"SplFileInfo":private]=> string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest.php" } $options = 100 string(3) "dir" object(RecursiveDirectoryIterator)#1 (3) { ["pathName":"SplFileInfo":private]=> string(17) "/virtualhosts/tmp" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } string(34) "RecursiveDirectoryIteratorTest.php" object(RecursiveDirectoryIterator)#1 (3) { ["pathName":"SplFileInfo":private]=> string(17) "/virtualhosts/tmp" ["glob":"DirectoryIterator":private]=> bool(false) ["subPathName":"RecursiveDirectoryIterator":private]=> string(0) "" } $options = 110 string(3) "dir" object(SplFileInfo)#4 (2) { ["pathName":"SplFileInfo":private]=> string(17) "/virtualhosts/tmp" ["fileName":"SplFileInfo":private]=> string(21) "/virtualhosts/tmp/dir" } string(34) "RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#1 (2) { ["pathName":"SplFileInfo":private]=> string(17) "/virtualhosts/tmp" ["fileName":"SplFileInfo":private]=> string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest.php" } but php5.2cvs gives me: $options not passed string(3) "dir" object(RecursiveDirectoryIterator)#1 (0) { } string(34) "RecursiveDirectoryIteratorTest.php" object(RecursiveDirectoryIterator)#1 (0) { } $options = 0 string(3) "dir" object(RecursiveDirectoryIterator)#2 (0) { } string(34) "RecursiveDirectoryIteratorTest.php" object(RecursiveDirectoryIterator)#2 (0) { } $options = 10 string(3) "dir" object(SplFileInfo)#4 (0) { } string(34) "RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#2 (0) { } $options = 0 string(3) "dir" object(RecursiveDirectoryIterator)#1 (0) { } string(34) "RecursiveDirectoryIteratorTest.php" object(RecursiveDirectoryIterator)#1 (0) { } $options = 10 string(3) "dir" object(SplFileInfo)#4 (0) { } string(34) "RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#1 (0) { } notice the KEY_AS_FILENAME constant isn't working as it is in php5.3 cvs.. php5.2 ext/spl/spl_directory.h:102:#define SPL_FILE_DIR_KEY_AS_FILENAME 0x00000000 /* make RecursiveDirectoryTree::key() return getFilename() */ php5.3 ext/spl/spl_directory.h:102:#define SPL_FILE_DIR_KEY_AS_FILENAME 0x00000100 /* make RecursiveDirectoryTree::key() return getFilename() */ thanks again :) ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/44018 -- Edit this bug report at http://bugs.php.net/?id=44018&edit=1

« previous php.bugs (#129375) next »