POO - RecursiveDirectoryIterator [Résolu]

Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014
- - Dernière réponse : inwebo
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014
- 23 avril 2011 à 19:38
Bonjour à tous,

Je suis en train de tester la SPL de PHP et plus précisément la class RecursiveDirectoryIterator. J'ai du mal à comprendre son fonctionnement et les retours effectués.

Organisation du répertoire
:
[list]
[*] /
[*] /test/1/
[*] /test/2/
[*] /test/3/
[*] /test/4/
[*] inc.class.my.files.php
[*] index.php
/list
Chaque dossier est vide.

Le contenu des fichiers


inc.class.my.files.php

<?php

Class MyRecursiveFiles extends RecursiveDirectoryIterator {


public $path;
public $nbrFiles;
public $nbrDirs;
public $totalSize;
public $ret = array();

public function __construct( $path ) {

$this->totalFiles	 = 0 ;
$this->totalDirs	 = 0 ;

$it =  new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $path, FilesystemIterator::SKIP_DOTS ) );

while( $it->valid() ) {

if( $it->isDir() ) {
echo  $it->key();
}

$it->next();
}		
}
}
?>


index.php
<?php

include('inc.class.my.files.php');

try {
$path  = 'test/';
$listAllItems = new MyRecursiveFiles( $path );

}
catch ( Exception $e ) {
echo $e->getMessage();
}

?>

Retour du script :


test\1


Retour attendu

test\1
test\2
test\3
test\4


Pour quelles raisons cette classe liste-elle seulement le premier élément ?
Ne doit-elle pas parcourir l'ensemble des dossiers ?
Pourquoi n'indexe t-elle pas les dossiers vides ?

Le documentation est assez légère dans la SPL, j'ai bien fait le tour des différentes méthodes de parcours de d'arborescence, glob, globiterator, scandir etc ...

Merci d'avance


_________________________________
( $toBe || !$toBe ) = $this->Question();
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
403
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
7
3
Merci
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);



______________________________________________________________________

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 111 internautes nous ont dit merci ce mois-ci

Commenter la réponse de phpAnonyme
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014
0
Merci
Merci,

concis et efficace !
Peut-être aurais tu le temps de me faire un rapide topo sur ce qu'il se passe ?

Cordialement

________________________________________
( $toBe || !$toBe ) = $this->Question();
Commenter la réponse de inwebo