php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.09.2009, 12:53  
Neuer Benutzer
 
Registriert seit: 06.08.2009
Beiträge: 8
PHP-Kenntnisse:
Anfänger
celindir befindet sich auf einem aufstrebenden Ast
Standard

Hallo zusammen,

da hab ich wohl Mist gebaut.
Man sollte an einer fremden Funktion nichts rumschrauben, wenn man sie noch nicht versteht.

Die Ursprüngliche Funktion PHP: SPL Functions - Manual
ist dazu gedacht nur Verzeichnisse (Nicht Dateien) zu listen.
Dann funktioniert sie wohl auch.

PHP-Code:
<?php
/**
 * Limit Depth RecursiveIteratorIterator class
 *
 */
class LimitRecursiveIteratorIterator extends RecursiveIteratorIterator
{
   protected 
$depth_limit;

   
/**
     * No depth limit by default
     *
   **/
   
public function __construct ($it$mode RecursiveIteratorIterator::CHILD_FIRST$depth_limit = -1)
   {
       
parent::__construct($it$mode);
       
$this->depth_limit $depth_limit;
   }

   
/**
     * After the call to next() if depth is bigger than limit then
     * just skip all subIterators for that depth until depth end.
     *
   **/
   
public function next ()
   {
       
parent::next();

       if (
$this->getDepth() == $this->depth_limit)
       {
           while (
$this->getSubIterator()->valid())
               
$this->getSubIterator()->next();
           
parent::next();
       }
   }
}


/**
 * Directories only filter iterator class
 *
 */
class DirectoriesOnlyIterator extends FilterIterator implements RecursiveIterator
{
    public function 
__construct ($path)
    {
        
parent::__construct(new RecursiveDirectoryIterator($path));
    }

    public function 
accept()
    {
        return 
$this->getInnerIterator()->hasChildren();
    }

    public function 
hasChildren ()
    {
        return 
$this->getInnerIterator()->hasChildren();
    }
   
    public function 
getChildren ()
    {
        return new 
self($this->getInnerIterator()->getPathname());
    }
}

?>



<?php

$basedir 
'./demo';
$max_depth 2;
$mode=RecursiveIteratorIterator::SELF_FIRST;
//$basedir = '/is/htdocs/wp1057178_2B46F0ALGI/www/celindir/pixx/demo';
$it = new LimitRecursiveIteratorIterator(new DirectoriesOnlyIterator($basedir), $mode$max_depth);
print 
"The Result for depth= $max_depth<br>";
// list all dirs and 1st subdir of the c: drive (might take a while depending on how many you have)


foreach ($it as $key => $value)
{

print 
"$value<br>";
}

?>
Code:
The Result for depth= 9
./demo/1000
./demo/1000/1100
./demo/1000/1100/1110
./demo/1000/1100/1110/1111
./demo/1000/1100/1110/1112
./demo/1000/1100/1120
./demo/1000/1100/1130
./demo/1000/1100/1140
./demo/1000/1200
./demo/1000/1300
./demo/1000/1400
./demo/2000
./demo/2000/2100
./demo/2000/2100/2110
./demo/2000/2100/2120
./demo/2000/2200
./demo/2000/2300
./demo/3000
./demo/4000
Enstpricht meiner Verzeichnisstruktur.

Code:
The Result for depth= 1
./demo/1000
./demo/2000
./demo/3000
./demo/4000
Korrekt!

Code:
The Result for depth= 3
./demo/1000
./demo/1000/1100
./demo/1000/1100/1110
./demo/1000/1100/1120
./demo/1000/1100/1130
./demo/1000/1100/1140
./demo/1000/1200
./demo/1000/1300
./demo/1000/1400
./demo/2000
./demo/2000/2100
./demo/2000/2100/2110
./demo/2000/2100/2120
./demo/2000/2200
./demo/2000/2300
./demo/3000
./demo/4000
Auch Korrekt

Wen ich also mit dem Ergebnis weiterarbeite sollte ich auch die adarin befindlichen Dateien ausgeben können.

Gruß

Celindir
celindir ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Rekursive Dateisuche :::: Mit exec oder RecursiveDirectoryIterator unterschiedlich celindir PHP Tipps 2009 2 06.08.2009 15:32
Rekursive Abfrage #Avedo Datenbanken 14 05.05.2009 18:18
Rekursive Funktion funktioniert lokal, aber nicht remote? Anotherone PHP-Fortgeschrittene 1 21.06.2008 08:11
rekursive Funktionen ?? usima PHP Tipps 2008 2 04.05.2008 11:25
Traffic pro IP begrenzen PHP Tipps 2006 6 17.01.2006 21:42
Anzahl der Datensätze je Seite begrenzen Loenne PHP Tipps 2006 14 04.01.2006 16:02
abfrage begrenzen Cyrus Datenbanken 4 26.10.2005 11:29
Textfeld begrenzen von der Anzahl der Zeichen PHP Tipps 2005-2 11 13.10.2005 11:15
[Erledigt] Anzahl von Einträgen begrenzen + Formulareinträge prüfen PHP Tipps 2005-2 32 07.07.2005 17:33
Betteln begrenzen PHP Tipps 2004-2 16 30.12.2004 14:12
Zeilenumbrüche Begrenzen I-Spy PHP Tipps 2004-2 12 30.11.2004 20:49
Ausgabelänge eines Feldes begrenzen? db PHP Tipps 2004 3 07.10.2004 16:08
Rekursive Funktion ... finde fehler nicht ... PHP-Fortgeschrittene 1 27.09.2004 03:44
Rekursive Funktion tut nicht richtig??? PHP-Fortgeschrittene 8 09.07.2004 15:39

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
verzeichnistiefe prüfen, php basedir scandir beschr, php rekursiv dateisuche tutorial, recursiveiteratoriterator::child_first, dir verzeichnistiefe einschränken, php rekursive dateisuche nach name, php scandir rekursiv, $depth_limit php, php function zur dateisuche, verzeichnisstruktur 1000_ 1100_ 1110_ 2000_ 3000_, php recursiveiteratoriterator::child_first, php rekursive suche in dateien, php $results begrenzen, dir lister verzeichnistiefe, php rekursive suche limit, php rekursiv nach datei suchen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:50 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum