Recursieve Directory Iterator - Doorloop mappen

Door PHP Newbie, 20 jaar geleden, 6.100x bekeken

Ik vind het zonde om te zien dat er nog zoveel mensen zijn die een map uit gaan lezen met fopen en readdir, terwijl er vanaf PHP 5 een prachtige klasse is waarmee je dat kunt doen.

Hieronder dus een class met een recursieve functie, gebruik makend van de ingbouwde Directory Iterator classe om mappen door te lopen.

Ik heb lang niet alle functies gebruikt die je kunt gebuiken. Enkele andere functies zijn:

getPathname() - Geef het bestandspath met de filname
getPath() - Geef het bestandspath zonder de filname
getPerms() - Geef de permissies
getSize() - Geef de bestandsgrote
isExecutable() - Bekijk of het bestand uitvoerbaar is
isReadable() - Bekijk of je rechten hebt het bestand te lezen
isWritable() - Bekijk of je rechten hebt om naar het bestand te schrijven
isFile() - Bekijk of het een bestand is (en dus geen map)
isLink() - Bekijk of het een snelkoppeling is
getATime() - Geef de tijd van de laatste toegang
getOwner() - Geef de eigenaar van het bestand

Mijn OOP stijl is niet geweldig, moet het allemaal nog wat door krijgen, maar daar gaat het hier niet om. Het gaat om het onder de aandacht brengen van de Directory Iterator

Gesponsorde koppelingen

PHP script bestanden

  1. recursieve-directory-iterator-doorloop-mappen

 

Er zijn 13 reacties op 'Recursieve directory iterator doorloop mappen'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Storeman storeman
storeman storeman
20 jaar geleden
 
0 +1 -0 -1
Leuk script! Één opmerking, wanneer je functies namen geeft, is het handig om óf engelse óf nederlandse namen te gebruiken, niet beide, dat zorgt voor verwarring.
PHP Newbie
PHP Newbie
20 jaar geleden
 
0 +1 -0 -1
Goede tip, direct toegepast.
Jelmer -
Jelmer -
20 jaar geleden
 
0 +1 -0 -1
Er bestaat een RecursiveDirectoryIterator in SPL, er is alleen nog geen echte documentatie voor. (En ik weet ook niet zeker vanaf welke versie van PHP hij beschikbaar is)
Joren de Wit
Joren de Wit
20 jaar geleden
 
0 +1 -0 -1
Je maakt in je read_dir methode een array $files aan, maar daar doe je verder niets meer mee? Of kijk ik nu scheef?

Verder zou ik ook proberen om consequent te zijn in de naamgeving van je variabelen. Zo gebruik je af en toe de manier als $aDir en vervolgens weer niet. En als je dan met de eerste letter van een variabelenaam het type aangeeft, doe dat dan wel goed: $sBestanden op regel 85 is namelijk zeker geen string...

Verder wel top dat je dit onder de aandacht brengt, ik zat er ook al aan te denken om hier eens iets over te schrijven.
Hipska BE
Hipska BE
20 jaar geleden
 
0 +1 -0 -1
Waarom wil iedereen [OOP] voor de titel van zijn script zetten? het staat toch al in de category classes? of bestaan er classes die niet tot OOP behoren misschien?
PHP Newbie
PHP Newbie
20 jaar geleden
 
0 +1 -0 -1
Die functie is nog in ontwikkeling. Op dit moment is het niet veel meer dan een gewone DirectoryIterator, aangezien functies als getChildren nog niet overal beschikbaar zijn.

Edit:

@blache

1. Je hebt gelijk, direct aangepast
2. Ook hier heb je gelijk, dit pas ik nog aan
3. Dankje
- -
- -
20 jaar geleden
 
0 +1 -0 -1
Erg mooi script Newbie!
Kalle P
Kalle P
20 jaar geleden
 
0 +1 -0 -1
regel 14 :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$this->read_dir();

regel 79 :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
function read_dir($dir = null)
    {
        try
        {
            $dir = (is_null($dir) ? $this->dir : $dir);


Zo is $dir altijd null.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
if(!is_null($files)) //als er bestanden in de array staan, dus bestanden in de map
            {
                ksort($files); //dan sorteren we die alphabetisch
            }
            
            return $files; //


return ksort($files);
Als er geen files bestaan geeft ie wel een error die wordt gevangen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
    function format_date($datum)
    {
        return date("d-m-Y H:i:s", $datum);
    }

Ik zie hier niet echt het nut van in. Ik zou nog een parameter toevoegen met format, maar aangezien je overal het zelfde format gebruikt.... Je doet t mooier als je een attribuut daar van maakt en die je dan maar standaard inlaad, maar je dan wel direct bij al je attributen kan aanpassen.


Als dit (allemaal) niet kan wat ik zeg dan is php gewoon very krom. Java!
PHP Newbie
PHP Newbie
20 jaar geleden
 
0 +1 -0 -1
Wat aanpassingen doorgevoerd.
Bo az
Bo az
20 jaar geleden
 
0 +1 -0 -1
Als je toch OO aan de gang gaat is het misschien beter om datum helemaal niet als String terug te geven, maar DateTime. Dan kan de gebruiker zelf op het moment dat het nodig is kijken wat de output moet worden.
PHP Newbie
PHP Newbie
20 jaar geleden
 
0 +1 -0 -1
Je kunt nu ook bepaalde bestandstypen verbergen of juist laten zien.
PHP erik
PHP erik
20 jaar geleden
 
0 +1 -0 -1
Quote:
of bestaan er classes die niet tot OOP behoren misschien
Meer dan genoeg ja, en dit script is weer een voorbeeld ervan :) ;)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Hipska BE
Hipska BE
20 jaar geleden
 
0 +1 -0 -1
nja bedoel 'echte' classes en geen verzamelingen van functies.

en deze had wel degelijk [OOP] voor zijn naam :p

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. recursieve-directory-iterator-doorloop-mappen

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.