/** * Support for readdir(). * * @return string|bool the next filename, or false if there are no more * files in the directory * @see http://www.php.net/manual/en/function.readdir.php */ public function dir_readdir() { while ($this->_directoryIterator->valid()) { $key = $this->_directoryIterator->key(); $current = $this->_directoryIterator->current(); $iterator = $this->_directoryIterator->getInnerIterator(); try { $this->_directoryIterator->next(); } catch (Services_Amazon_S3_Exception $e) { return false; } if (is_string($current)) { // Return "." or ".." return $key; } if ($iterator instanceof Services_Amazon_S3_ObjectIterator) { // Strip prefix and any trailing slash $key = rtrim(substr($key, strlen($iterator->prefix)), '/'); } else { // When iterating over buckets, $current is a bucket instance $key = $current->name; } // Subdirectories may be represented in two different ways - make // sure not to report duplicates $subdirectory = false; if (substr($key, -9) == '_$folder$') { $subdirectory = $key = substr($key, 0, -9); } elseif ($current instanceof Services_Amazon_S3_Prefix) { $subdirectory = $key; } if ($subdirectory) { if (!in_array($key, $this->_subdirectories)) { $this->_subdirectories[] = $key; return $key; } } else { return $key; } } return false; }