DirectoryTreeIterator

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : DirectoryTreeIterator

Re: DirectoryTreeIterator

par stealth35 » 28 mars 2010, 20:58

sans passer par une class exterieur on pourrait faire comme ca
$dir = __DIR__;
$sub = explode(DIRECTORY_SEPARATOR, $dir);
	
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::SELF_FIRST);
	
foreach($objects as $object)
{
    $path = explode(DIRECTORY_SEPARATOR, $object->getPath());
    echo str_repeat('|', count($path) - count($sub) + 1) . '-' . $object->getFilename() . PHP_EOL;
}

Re: DirectoryTreeIterator

par stealth35 » 28 mars 2010, 20:46

:oops: c'est vrai copié sans regardé :oops: :oops:
c'est pas bien :non:

:wink:

Re: DirectoryTreeIterator

par visualight » 28 mars 2010, 20:45

:oops: c'est vrai copié sans regardé :oops: :oops:
merci ;)

Re: DirectoryTreeIterator

par stealth35 » 28 mars 2010, 20:41

parce que t'as copier sans comprendre :wink:

c'est pas name qui faut afficher c'est $object

$name c'est la clé donc ici le nom de fichier, $bject c'est que tu veux

Re: DirectoryTreeIterator

par visualight » 28 mars 2010, 20:36

Ok, mais pourquoi quand j'utilise DirectoryTreeIterator ca m'affiche pas la structure de l'arbre avec les |nomdossier et les | - nomfichier ?
Comme je l'ai marqué plus haut, ca m'affiche tout en block et non structuré comme la classe devrait le faire

$path = realpath('/home/xxx/www/test');

$objects = new DirectoryTreeIterator($path);
foreach($objects as $name => $object){
    echo "$name\n";
}

Ca maffiche les données comme ceci :
favicon.ico medias banners banner2.swf banner.png banner.swf images icon-plusmoins.png playlist.png videopreview.jpg icon-user_annonceur.png full_top.gif icon-refresh.png icon-view13.png icon-plus32.png fleche.png icon-photos.png icon-download13.png watermark_medium.png default_picture.png icon-help.png watermark_big.png icon-place.png highslide loader.gif geckodimmer.png close.png zoomin.cur controlbar4.gif
Pourquoi la structure ne s'affiche pas ?

Merci pour vos réponses,
raph

Re: DirectoryTreeIterator

par stealth35 » 28 mars 2010, 20:23

non RecursiveDirectoryIterator ca te liste uniquement tout les fichiers récursivement et c'est tout
sinon la class DirectoryTreeIterator est complete, mais faudrait mieux que tu comprennes le code avant de la copier :wink:

et comment marche la class ? comme un iterator donc comme ca :
$dir = new DirectoryTreeIterator('mon/path');
foreach($dir as $file)
{
	echo $file . '<br />';
}
ps : t'aurais pu laissé dans l'autre sujet :wink:

DirectoryTreeIterator

par visualight » 28 mars 2010, 19:40

Bonjour,

J'aimerai avoir des explications sur la classe DirectoryTreeIterator.
1. ou puis je télécharger la classe complete car je n'ai trouvé que ceci (mais peut être est-ce suffisant ??) :
class DirectoryTreeIterator extends RecursiveIteratorIterator
{
	function __construct($path)
	{
	 parent::__construct(new RecursiveCachingIterator(new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_FILENAME), CachingIterator::CALL_TOSTRING|CachingIterator::CATCH_GET_CHILD), 1);
	}

	function current()
	{
	 $tree = '';
		for ($l=0; $l < $this->getDepth(); $l++) {
		 $tree .= $this->getSubIterator($l)->hasNext() ? '| ' : '  ';
		}
	 return $tree . ($this->getSubIterator($l)->hasNext() ? '|-' : '\-') 
	 . $this->getSubIterator($l)->__toString();
	}

	function __call($func, $params)
	{
	 return call_user_func_array(array($this->getSubIterator(), $func), $params);
	}
}

2. Comment marche la classe?? Voici le code que j'utilise mais impossible d'afficher un arbre(tree) des fichiers et dossiers.
$path = realpath('/home/xxx/www/test');

//$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
$objects = new DirectoryTreeIterator($path);
foreach($objects as $name => $object){
    echo "$name\n";
}
Ca maffiche les données comme ceci :
favicon.ico medias banners banner2.swf banner.png banner.swf images icon-plusmoins.png playlist.png videopreview.jpg icon-user_annonceur.png full_top.gif icon-refresh.png icon-view13.png icon-plus32.png fleche.png icon-photos.png icon-download13.png watermark_medium.png default_picture.png icon-help.png watermark_big.png icon-place.png highslide loader.gif geckodimmer.png close.png zoomin.cur controlbar4.gif
Alors que ca devrait me donner un truc du genre (ne pas faire attention aux noms des fichiers et dossiers => c'est un exemple) :

|-ch01
| |-recipe01
| | |-example01.php
| | \-example02.php
| |-recipe02
| | |-example01.php
| | \-example02.php
| |-recipe03
| | \-example01.php


Merci pour votre aide,
raph