2011-06-14 15 views
11

Dizinde dosyaları listeleyen bir kod parçasını sonlandırıyorum. Dosyaları bir dizinde listelemede hiçbir sorunum yok, ancak bir sebepten dolayı dosyanın "." Olmadığından emin olmak için isDot() yöntemini alabilirim. veya "..". Bunun hata sonuçlarının altında şu: Ben Dizin yineleyici kullanıyordum Recursive yineleyici kullanarak bölümüne geçtikten ve iyi çalıştıisDot() neden yanımda değil? (PHP)

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

önce. Aşağıdaki kodda bir sorun var mı? İşe yaramalı. DirectoryIterator::current() için (yöntem, bir foreach -loop içinde çağrı)

$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;    

     }  
} 

cevap

28

Bu tip DirectoryIterator kendisini bir nesne, döndürür. FileSystemIterator (RecursiveDirectoryIterator genişler), SplFileInfo nesnesini varsayılan olarak döndürür. Sen flags

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

aracılığıyla Ama senin durumunda, dönüş ne olduğunu, etkileyebilir, bir öğenin bir nokta dosyası olursa test etmek gerekmez. Sadece FilesystemIterator::SKIP_DOTS'u ayarlayın ve hiç görünmeyecek. Not, bu aynı zamanda default behavior.

+2

Harika bir açıklama! Bunu bana açıkladığın için teşekkürler. – thomascirca