ID: 34778 Updated by: [EMAIL PROTECTED] Reported By: richard dot quadling at bandvulc dot co dot uk -Status: Open +Status: Feedback Bug Type: SPL related Operating System: Windows XP SP2 PHP Version: 5.0.5 New Comment:
Please try using this CVS snapshot: http://snaps.php.net/php5-latest.tar.gz For Windows: http://snaps.php.net/win32/php5-win32-latest.zip Previous Comments: ------------------------------------------------------------------------ [2005-10-07 14:05:18] richard dot quadling at bandvulc dot co dot uk I altered the code just to show those that are different ... <?php class class_DirectoryWalker extends RecursiveIteratorIterator { function __construct($path) { parent::__construct(new CachingRecursiveIterator(new RecursiveDirectoryIterator($path), CIT_CALL_TOSTRING | CIT_CATCH_GET_CHILD), 1); } function __call($func, $params) { return call_user_func_array(array($this->getSubIterator(), $func), $params); } } $objDIR = new class_DirectoryWalker('M:/Datastore'); foreach($objDIR as $sKey => &$objValue) { if (filetype($sKey) != $objValue->getType()) { echo filetype($sKey) . ' ' . $objValue->getType() . " $sKey\n"; } } ?> and get things like ... dir file M:/Datastore/Bandvulc Department Desktops/Sales/bij1100 file dir M:/Datastore/Bandvulc Department Desktops/Sales/bij1100/win2k_xp/english/hpzvip09.dl_ Here we see a directory (filetype()) which the next line is a file within that directory and that line is being shown as a directory when in fact it is obviously a folder. ------------------------------------------------------------------------ [2005-10-07 13:41:59] richard dot quadling at bandvulc dot co dot uk Description: ------------ I'm using SPL RecursiveIteratorIterator, CachingRecursiveIterator and RecursiveDirectoryIterator to get ALL the files in a directory structure. Some of the files are being identied as directories when using DirectoryIterator::getType() and comparing this to the result of filetype(). Reproduce code: --------------- <?php class class_DirectoryWalker extends RecursiveIteratorIterator { function __construct($path) { parent::__construct(new CachingRecursiveIterator(new RecursiveDirectoryIterator($path), CIT_CALL_TOSTRING | CIT_CATCH_GET_CHILD), 1); } function __call($func, $params) { return call_user_func_array(array($this->getSubIterator(), $func), $params); } } $objDIR = new class_DirectoryWalker('M:/Datastore'); foreach($objDIR as $sKey => &$objValue) { echo filetype($sKey) . ' ' . $objValue->getType() . " $sKey\n"; } ?> Expected result: ---------------- dir dir M:/Datastore/Bandvulc Department Desktops dir dir M:/Datastore/Bandvulc Department Desktops/Accounts file file M:/Datastore/Bandvulc Department Desktops/Accounts/Shortcut to ECDL.lnk dir dir M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts file file M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Bandvulc Tyre Contracts.lnk file file M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Shortcut to Salvesen Europe Contacts.lnk file file M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Shortcut to Sinead Williams on bandsbs.lnk file file M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Shortcut to Strike Rates 2005.lnk dir dir M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Unused Desktop Shortcuts file file M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Unused Desktop Shortcuts/Access Accounts (btc v1).lnk file file M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Unused Desktop Shortcuts/Access Accounts (btc v2).lnk Actual result: -------------- dir dir M:/Datastore/Bandvulc Department Desktops dir dir M:/Datastore/Bandvulc Department Desktops/Accounts file dir M:/Datastore/Bandvulc Department Desktops/Accounts/Shortcut to ECDL.lnk dir dir M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts file file M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Bandvulc Tyre Contracts.lnk file file M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Shortcut to Salvesen Europe Contacts.lnk file file M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Shortcut to Sinead Williams on bandsbs.lnk file dir M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Shortcut to Strike Rates 2005.lnk dir dir M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Unused Desktop Shortcuts file file M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Unused Desktop Shortcuts/Access Accounts (btc v1).lnk file file M:/Datastore/Bandvulc Department Desktops/Bandvulc Tyre Contracts/Unused Desktop Shortcuts/Access Accounts (btc v2).lnk ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=34778&edit=1