2011-06-14 9 views
11

ディレクトリ内のファイルをリストするコードセグメントを完成させています。ディレクトリにファイルをリストするのに問題はありませんが、何らかの理由でisDot()メソッドを使ってファイルが "。"ではないことを確認できます。または ".."。このエラーに下回る結果となり、以下:私はディレクトリイテレータを使用していた再帰イテレータを使用してに切り替え、それがうまく働いたなぜisDot()が失敗するのですか? (PHP)

Fatal error: Call to undefined method SplFileInfo::isDot() in .... 

前に。下のコードに何か問題はありますか?それは動作するはずです。

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathToFolder)); 

//if there is a subdirectory it makes sure the proper extension is passed 
foreach($files as $name => $file){  

      if (!$file->isDot()) { //this is where it shuts me down   

      $realfile = str_replace($pathToFolder, "", $file); 
      $url = getDownloadLink($folderID, $realfile); 
     $fileArray[] = $url;    

     }  
} 

答えて

28

DirectoryIterator::current()foreach - ループ内でコールされるメソッドは、)タイプDirectoryIteratorそれ自体であるオブジェクトを返すので、これは、ありますFileSystemIterator(そのRecursiveDirectoryIteratorが拡張)は、デフォルトでSplFileInfoのオブジェクトを返します。あなたはflags

$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator(
    $pathToFolder, 
    FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_SELF)); 

経由しかし、あなたの場合には、戻り値が何であるか、影響を与えることができ、あなたは項目がドットファイルである場合は、テストする必要はありません。 FilesystemIterator::SKIP_DOTSと設定すると、まったく表示されません。これもdefault behaviorであることに注意してください。

+2

大きな説明!それを私に説明してくれてありがとう。 – thomascirca

関連する問題