2011-06-14 23 views
11

Estoy finalizando un segmento de código que enumera los archivos en un directorio. No tengo problemas para enumerar los archivos en un directorio, pero por algún motivo puedo utilizar el método isDot() para asegurarme de que el archivo no sea un "." o "..." La siguiente debajo de los resultados en este error:¿Por qué IsDot() falla en mí? (PHP)

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

Antes de que yo cambié a usar el iterador recursiva que estaba usando el Directorio de iterador y funcionó bien. ¿Hay algo mal con el código a continuación? Deberia de funcionar.

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

     }  
} 

Respuesta

28

Esto es, porque DirectoryIterator::current() (el método, que es llamada dentro de un -loop foreach) devuelve un objeto, que es en sí de tipo DirectoryIterator. FileSystemIterator (que se extiende RecursiveDirectoryIterator) devuelve un objeto de SplFileInfo por defecto. Puede influir, ¿cuál es el retorno, a través de flags

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

Pero en su caso, no es necesario poner a prueba, si un artículo es un archivo de puntos. Simplemente configure FilesystemIterator::SKIP_DOTS y no aparecerán en absoluto. Tenga en cuenta que este es también el default behavior.

+2

¡Gran explicación! Gracias por explicarme eso. – thomascirca

Cuestiones relacionadas