incompatible DirectoryIterator + comportement FilterIterator en PHP?
Question
J'ai écrit un script qui utilise la classe FilterIterator qui vient de la Standard PHP Library (SPL) et je reçois différentes behabours accross versions 5.x PHP :( Ici, la fonction accept ():
public function accept()
{
$current = $this->current();
print_r($current);
return true;
}
et Heres sa sortie pour 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] =>
)
et voici ce que je reçois avec le même code sous PHP 5.2.5
DirectoryIterator Object
(
)
DirectoryIterator Object
(
)
DirectoryIterator Object
(
)
Ce dernier a l'autorisation 755 sur tous les fichiers. Ce qui est avec dat?
La solution
On dirait que c'est en fait OK! Appel de méthodes sur les objets DirectoryIterator apparemment vide œuvres. Les problèmes que je rencontrais étaient ailleurs et eu à voir avec le clonage de ces objets. Semble PHP 5.3 clones en profondeur tandis que 5.2 ne pas toutes les références se font tuer à chaque itération (ou quelque chose comme ça). Son laid, le désordre non documenté: PHP suce
Autres conseils
De PHP.net:
- Remarque: PHP 5.3.0 cette extension ne peut plus être désactivé et est donc toujours disponible.
Peut-être votre PHP configuration 5.2.5 est en quelque sorte incomplète / mal? Avez-vous votre erreur Leve journal configuré pour afficher des avertissements? Sinon, régler et exécutez votre nouveau code pour voir si son lancer des avertissements ...