/**
  * 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;
 }