diff options
Diffstat (limited to 'includes/filetransfer/filetransfer.inc')
-rw-r--r-- | includes/filetransfer/filetransfer.inc | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/includes/filetransfer/filetransfer.inc b/includes/filetransfer/filetransfer.inc index 1afaa9e0f..a917ff7cd 100644 --- a/includes/filetransfer/filetransfer.inc +++ b/includes/filetransfer/filetransfer.inc @@ -208,7 +208,7 @@ abstract class FileTransfer { $destination = $destination . '/' . basename($source); } $this->createDirectory($destination); - foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST) as $filename => $file) { + foreach (new RecursiveIteratorIterator(new SkipDotsRecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST) as $filename => $file) { $relative_path = substr($filename, strlen($source)); if ($file->isDir()) { $this->createDirectory($destination . $relative_path); @@ -345,3 +345,31 @@ interface FileTransferChmodInterface { */ function chmodJailed($path, $mode, $recursive); } + +/** + * Provides an interface for iterating recursively over filesystem directories. + * + * Manually skips '.' and '..' directories, since no existing method is + * available in PHP 5.2. + * + * @todo Depreciate in favor of RecursiveDirectoryIterator::SKIP_DOTS once PHP + * 5.3 or later is required. + */ +class SkipDotsRecursiveDirectoryIterator extends RecursiveDirectoryIterator { + /** + * Constructs a SkipDotsRecursiveDirectoryIterator + * + * @param $path + * The path of the directory to be iterated over. + */ + function __construct($path) { + parent::__construct($path); + } + + function next() { + parent::next(); + while ($this->isDot()) { + parent::next(); + } + } +} |