Domanda

Ho scritto uno script che utilizza la classe FilterIterator che viene dal PHP Standard Library (SPL) e ottengo diverse behabours attraversavano versioni 5.x di PHP :( Qui l'accettare () Funzione:

public function accept()
{   
$current = $this->current();
print_r($current);      

    return true;
}   

Ed ecco la sua uscita per PHP 5.3.1:

DirectoryIterator Object
(
    [pathName:SplFileInfo:private] => /Users/alex/Sites/dev/php/fscms/content/.
    [fileName:SplFileInfo:private] => .
    [glob:DirectoryIterator:private] => 
    [subPathName:RecursiveDirectoryIterator:private] => 
)
DirectoryIterator Object
(
    [pathName:SplFileInfo:private] => /Users/alex/Sites/dev/php/fscms/content/..
    [fileName:SplFileInfo:private] => ..
    [glob:DirectoryIterator:private] => 
    [subPathName:RecursiveDirectoryIterator:private] => 
)
DirectoryIterator Object
(
    [pathName:SplFileInfo:private] => /Users/alex/Sites/dev/php/fscms/content/.DS_Store
    [fileName:SplFileInfo:private] => .DS_Store
    [glob:DirectoryIterator:private] => 
    [subPathName:RecursiveDirectoryIterator:private] => 
)

Ed ecco quello che ottengo con lo stesso codice in PHP 5.2.5

DirectoryIterator Object
(
)
DirectoryIterator Object
(
)
DirectoryIterator Object
(
)

Il secondo ha permesso 755 su tutti i file. Whats up con dat?

È stato utile?

Soluzione

Sembra che questo è in realtà OK! Chiamare i metodi sul DirectoryIterator apparentemente vuota oggetti opere. I problemi che ho avuto erano altrove e aveva a che fare con la clonazione di questi oggetti. Sembra PHP 5.3 cloni profondo mentre 5.2 non in modo che tutti i riferimenti vengono uccisi ad ogni iterazione (o qualcosa di simile). Il suo un brutto, non-documentata pasticcio: PHP sucks

Altri suggerimenti

Da PHP.net:

  • Nota: Dal PHP 5.3.0 questa estensione non può più essere disattivato ed è quindi sempre a disposizione.

Forse il tuo PHP 5.2.5 di configurazione è in qualche modo incompleto / sbagliato? Avete il vostro errore log leve impostato per visualizzare gli avvisi? In caso contrario, regolare ed eseguire di nuovo il codice per vedere se il suo lancio eventuali avvisi ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top