From 5fa815b34d722c552df82df8d45a596ca816f192 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Fri, 27 Jan 2012 20:35:42 +0000 Subject: [PATCH] Follow-up r110159: set the FilesystemIterator flags when that class is available (PHP >= 5.3). Apparently, some versions of PHP 5.3 have different defaults that others for SKIP_DOTS. --- includes/filerepo/backend/FSFileBackend.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/includes/filerepo/backend/FSFileBackend.php b/includes/filerepo/backend/FSFileBackend.php index f229577c1c..602385ec98 100644 --- a/includes/filerepo/backend/FSFileBackend.php +++ b/includes/filerepo/backend/FSFileBackend.php @@ -550,7 +550,17 @@ class FSFileBackendFileList implements Iterator { $this->suffixStart = strlen( $dir ) + 1; // size of "path/to/dir/" try { # Get an iterator that will return leaf nodes (non-directories) - $this->iter = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dir ) ); + if ( MWInit::classExists( 'FilesystemIterator' ) ) { // PHP >= 5.3 + # RecursiveDirectoryIterator extends FilesystemIterator. + # FilesystemIterator::SKIP_DOTS default is inconsistent in PHP 5.3.x. + $flags = FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS; + $this->iter = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator( $dir, $flags ) ); + } else { // PHP < 5.3 + # RecursiveDirectoryIterator extends DirectoryIterator + $this->iter = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator( $dir ) ); + } } catch ( UnexpectedValueException $e ) { $this->iter = null; // bad permissions? deleted? } -- 2.20.1