php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.02.2009, 01:35  
Erfahrener Benutzer
 
Registriert seit: 06.11.2008
Beiträge: 208
stayInside befindet sich auf einem aufstrebenden Ast
Standard Mehrere Ordner auslesen, klappt nicht so ganz :(

Moinsen,

ich bastel mir gerade eine Methode, mit der ich bequem Ordner auslesen kann.

Hier mal der Code:

PHP-Code:
public static function read($strFolder$blnSelfInclude true$blnFolderOnly true$blnFilesOnly false)
    {
        if (!isset(
$strFolder) ||
            !
is_string($strFolder))
        {
            throw new 
Exception('Ungültig');    
        }
        
        static 
$arrEntries     = array();
        
$resHandleFile     opendir($strFolder);

        while ((
$strEntry readdir($resHandleFile)) !== false)
        {
            if (
mb_substr($strEntry01) === '.')
            {
                continue;
            }
            
            if (
mb_substr($strFolder, -11) !== '/')
            {
                
$strFolder .= '/';
            }

            
$strEntry $strFolder $strEntry;
            
            if (
$blnSelfInclude)
            {
                
$arrEntries[] = $strFolder;
            }
            
            if (!
is_dir($strEntry))
            {
                if ((
$blnFolderOnly === false && $blnFilesOnly === true) ||
                    (
$blnFolderOnly === true && $blnFilesOnly === true) ||
                    (
$blnFolderOnly === false && $blnFilesOnly === false))
                {
                    
$arrEntries[] = $strEntry;
                }
            }
            else if (
is_dir($strEntry))
            {
                if ((
$blnFolderOnly === true && $blnFilesOnly === false) ||
                    (
$blnFolderOnly === true && $blnFilesOnly === true) ||
                    (
$blnFolderOnly === false && $blnFilesOnly === false))
                {
                    if (
mb_substr($strEntry, -11) !== '/')
                    {
                        
$strEntry .= '/';
                    }
            
                    
$arrEntries[] = $strEntry;
                }
            
                
self :: read($strEntry$blnFolderOnly$blnFilesOnly);
            }
        }
        
        
closedir($resHandleFile);
        
        return (
array_unique($arrEntries));
    } 
Ich will das das statische Array nur pro Aufruf gilt. Wird die Funktion erneut aufgerufen, soll er ein neues erstellen.

Zum Beispiel:

PHP-Code:
$arrDirectories = array
        (
            
'Root'        => Folder :: read($GLOBALS['DIR']['ROOT'], truefalse),
            
'General'    => Folder :: read($GLOBALS['SYSDIR']['GENERAL'], truefalse)
        ); 
Das Array General enthält nun auch noch die Values von Root.

Bin gerade ein wenig müde, und finde keine Lösung.

Kurze Infos zur Methode:

PHP-Code:
$strFolder Ordnerpfad zum auslesen
$blnSelfInclude 
Ob der eigene Pfad dem Array hinzugefügt werden soll
$blnFolderOnly 
Ob nur Ordner ins Array eingetragen werden sollen
$blnFilesOnly 
Ob nur Dateien ins Array eingetragen werden sollen 
Schonmal ein Dankeschön

Gruß
Benny
stayInside ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.02.2009, 11:43  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.248
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Zitat:
Bin gerade ein wenig müde, und finde keine Lösung.
Dann mach später weiter. Oder stell ne konkrete Frage.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 10.02.2009, 12:16  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Vielleicht interessieren Dich auch PHP: RecursiveDirectoryIterator - Manual, PHP: ParentIterator - Manual und PHP: FilterIterator - Manual
David ist offline  
Alt 10.02.2009, 14:54  
Erfahrener Benutzer
 
Registriert seit: 06.11.2008
Beiträge: 208
stayInside befindet sich auf einem aufstrebenden Ast
Standard

Die Frage ist, wie ich die statische Variable nach jedem Aufruf löschen kann. Ich habe im Moment eine Flag drin, das die Methode erkennt ob sie in einer Rekursion ist oder nicht. Aber wenn ich unset($arrEntries); mache, nimmt er mir dennoch die alten Dateien mit.

Das mit dem Iterator ist doch für Klassen, oder seh ich das falsch?
stayInside ist offline  
Alt 10.02.2009, 14:58  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
Zitat von stayInside Beitrag anzeigen
Das mit dem Iterator ist doch für Klassen, oder seh ich das falsch?
Ist es. Aber offensichtlich verwendest Du Klassen
Zitat:
public static function read(
Wo ist also das Problem?


Statt unset($arrEntries); solltest Du mal $arrEntries=array(); versuchen.
David ist offline  
Alt 10.02.2009, 15:26  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.248
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Gegenvorschlag: Benutz keine statische Variable. Ein Flag brauchst Du auch nicht.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 10.02.2009, 15:55  
Erfahrener Benutzer
 
Benutzerbild von GelaMu
 
Registriert seit: 05.03.2006
Beiträge: 183
GelaMu
Standard

@stayInside,

das mit der statischen Variable solltest du mal anders machen. Wie bist du überhaupt darauf gekommen? Wie auch immer. Schau dir mal diese Funktion an. Vielleicht nützt es dir was: globr(). Diese Funktion arbeitet ohne Rekursion (ruft sich nicht selbst auf, wenn es auf ein Ordner stößt), gibt aber alles Inhalt aus einem Ordner zurück (rekursiv).

Grüße,
GelaMu

Geändert von GelaMu (10.02.2009 um 15:59 Uhr).
GelaMu ist offline  
Alt 10.02.2009, 21:56  
Erfahrener Benutzer
 
Registriert seit: 06.11.2008
Beiträge: 208
stayInside befindet sich auf einem aufstrebenden Ast
Standard

Okay, ich denke ich bin soweit fertig, wenn jemand Interesse hat, hier der Code

Damit ich unterscheiden kann ob File oder Ordner, geh ich das Array nochmal mit einer foreach durch, vielleicht gibt es da noch Verbesserungsvorschläge.

PHP-Code:
    public static function read($strFolder$blnSelfInclude true$blnShowFolder true$blnShowFiles true)
    {
        if (!isset(
$strFolder) ||
            !
is_string($strFolder))
        {
            throw new 
Exception('Ungültig');    
        }
        
        
$strFolder rtrim($strFolder'/');
        
        if (
is_dir($strFolder))
        {
            
$arrEntriesTemp array_merge(array_slice(glob($strFolder '/*'), 2), glob($strFolder '/*'));
            
            
$intEntryCount count($arrEntriesTemp);
            
            for(
$i 0$i $intEntryCount$i++)
            {
                if (
is_dir($arrEntriesTemp[$i]) &&
                    !
is_link($arrEntriesTemp[$i]) &&
                    
is_readable($arrEntriesTemp[$i]))
                {
                    
$arrEntriesTemp array_merge($arrEntriesTemparray_slice(glob($arrEntriesTemp[$i] . '/*'), 2), glob($arrEntriesTemp[$i] . '/*'));

                    
$intEntryCount count($arrEntriesTemp);
                }
            }
            
            
$arrEntriesTemp array_unique($arrEntriesTemp);
        }
        
        
$arrEntries = array();
        
        if (!empty(
$arrEntriesTemp))
        {
            if (
$blnSelfInclude)
            {
                if (
mb_substr($strFolder, -11) !== '/')
                {
                    
$strFolder .= '/';
                } 
                    
                
$arrEntries[] = $strFolder;
            }
            
            foreach (
$arrEntriesTemp as $strEntry)
            {
                if (
is_file($strEntry) &&
                    
is_readable($strEntry) &&
                    
$blnShowFiles)
                {
                    
$arrEntries[] = $strEntry;
                }
                
                if (
is_dir($strEntry) &&
                    
is_readable($strEntry) &&
                    
$blnShowFolder)
                {
                    if (
mb_substr($strEntry, -11) !== '/')
                    {
                        
$strEntry .= '/';
                    } 
            
                    
$arrEntries[] = $strEntry;
                }
            }
        }
        
        unset(
$arrEntriesTemp$arrEntriesTemp);
        
        return (
$arrEntries);
    }

stayInside ist offline  
Alt 10.02.2009, 22:03  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.248
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Zitat:
PHP-Code:
$arrEntriesTemp array_merge(array_slice(glob($strFolder '/*'), 2), glob($strFolder '/*'));
...
$arrEntriesTemp array_merge($arrEntriesTemparray_slice(glob($arrEntriesTemp[$i] . '/*'), 2), glob($arrEntriesTemp[$i] . '/*'));

$intEntryCount count($arrEntriesTemp); 
Wirkt alles wahnsinnig umständlich.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 10.02.2009, 22:38  
Erfahrener Benutzer
 
Registriert seit: 06.11.2008
Beiträge: 208
stayInside befindet sich auf einem aufstrebenden Ast
Standard

Ne andere Lösung fand ich nicht, da ich mich mit der glob() Funktion nicht auskenne Wie geht es denn besser?
stayInside ist offline  
 


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
Ordner auslesen und während des auslesen sortieren Dooki PHP Tipps 2008 6 14.05.2008 17:50
Problem beim Ordner auslesen sha1ch PHP Tipps 2008 4 09.02.2008 19:49
TreeMenu Fatal Error PHP Tipps 2006 8 07.04.2006 11:22
Unter ordner und Files automatisch auslesen lichtscheu PHP Tipps 2006 6 09.03.2006 19:19
ordner auslesen antiheld2003 PHP Tipps 2007 6 18.12.2005 19:27
Einen Ordner auslesen, wenn Script nicht in dem Ordner liegt ggfan PHP Tipps 2005-2 5 17.07.2005 19:37
Ordner auslesen PHP Tipps 2005-2 12 03.07.2005 16:43
Ordner auslesen, Ausgabe nach dem Datum sortieren PHP Tipps 2005-2 10 02.07.2005 17:18
Ordner Struktur auslesen bestimmte datei finden .... silverghost PHP Tipps 2005 3 24.05.2005 13:55
Ordner auslesen - Zusätzliche Bildplatzhalter PHP Tipps 2005 8 21.05.2005 12:25
Fehler bei Auslesen von Ordnernamen und datein im ordner PHP-Fortgeschrittene 3 11.12.2004 13:25
Fehlersuche: Ordner aus Verzeichnis auslesen DannyD PHP Tipps 2004-2 6 19.11.2004 20:36
ordner in einem verzeichnis auslesen und anzeigen lindner PHP Tipps 2004 5 19.08.2004 00:03
Ordner Auslesen PHP Tipps 2004 3 03.07.2004 09:17
Auslesen eines Ordner bringt Probleme PHP Tipps 2004 2 09.06.2004 13:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php mehrere ordner auslesen, ordner als array einlesen, mit php mehrere ordner auslesen, mehrere verzeichnisse auslesen mit php, nur ordnernamen aus array auslesen, mehrere ordnern auslesen, mehrer ordner zurückspringen php, php ordner in array, php mehrere ordner durchsuchen, meherere ordner in einen array, \mehrere ordner\ mit php auslesen, mehrere ordner mit php auslesen, php ordner auslesen folder, php mehrere ordner datei suchen, strentry php, php mehrere ordner in array sammeln, php mehrere ordner einlesen

Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 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