POO - RecursiveDirectoryIterator

Résolu
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014 - 23 avril 2011 à 17:41
inwebo Messages postés 380 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();

2 réponses

phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
23 avril 2011 à 19:12
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);



______________________________________________________________________
3
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
23 avril 2011 à 19:38
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();
0
Rejoignez-nous