Alle bestanden uit de php-map. Een lijst met mappen verkrijgen met behulp van PHP. Laten we SPL-iteratoren gebruiken

scandir - Haalt een lijst op met bestanden en mappen die zich op het opgegeven pad bevinden

Beschrijving

Array scandir (tekenreeks $ map [, int $sorting_order = SCANDIR_SORT_ASCENDING [, bron $context ]])

Retouren reeks, met de namen van bestanden en mappen die zich bevinden langs het pad dat is doorgegeven in de mapparameter.

Lijst met parameters

Catalogus om te scannen.

Sorteervolgorde

Standaard wordt er in alfabetische volgorde en in oplopende volgorde gesorteerd. Als de optionele parameter sorting_order is ingesteld op SCANDIR_SORT_DESCENDING, het sorteren gebeurt in alfabetische volgorde in aflopende volgorde. Als dit is ingesteld op SCANDIR_SORT_NONE, dan wordt er niet gesorteerd.

Context

Voor een beschrijving van de contextparameter, zie het gedeelte "Threads" van deze handleiding.

Waarden retourneren

Retouren reeks bestandsnamen indien succesvol of ONWAAR in geval van een fout. Als map geen map is, wordt geretourneerd ONWAAR en er wordt een niveaufoutmelding gegenereerd E_WAARSCHUWING.

Lijst met wijzigingen

Voorbeelden

Voorbeeld #1 Eenvoudig voorbeeld van het gebruik van een functie scandir()

$dir = "/tmp" ;
$bestanden1 = scanmap($map);
$bestanden2 = scandir($map, 1);

Print_r($bestanden1);
print_r($bestanden2);
?>

Het resultaat van het uitvoeren van dit voorbeeld zal ongeveer als volgt zijn:

Array ( => . => .. => bar.php => foo.txt => sommigedir) Array ( => sommigedir => foo.txt => bar.php => .. => .)

Voorbeeld #2 Alternatieve functieoptie scandir() voor PHP4

$dir = "/tmp" ;
$dh = openmap($map);
while (false !== ($bestandsnaam = leesmap ($dh ))) (
$bestanden = $bestandsnaam;
}

Sorteren($bestanden);

Print_r($bestanden);

Rsort($bestanden);

Print_r($bestanden);

Werken met bestanden

De noodzaak voor bewerkingen met bestanden wordt de programmeur heel vaak geconfronteerd. Als uw scripts geen databases gebruiken, zijn bestanden de enige acceptabele opslagapparaten voor het script. Door het gebruik van bestanden als opslagplaatsen voor informatie over de uitvoering van scripts kunnen ze in een grote verscheidenheid aan situaties worden gebruikt. Bijna alle counterscripts zijn geschreven op basis van het werken met bestanden. Het is ook mogelijk om nog een aantal andere voorbeelden te geven, maar het is tijd om direct van woorden naar daden over te gaan.

Ik wil meteen zeggen dat het werken met het bestand geautoriseerd moet zijn. Standaard staat PHP om veiligheidsredenen geen bestandsmanipulatie toe. Om dit verbod in de CuteFTP FTP-manager te verwijderen, vinkt u alle vakjes in de bestandseigenschappen aan; andere managers zouden iets soortgelijks moeten hebben.

bestand_bestaat

Voordat u bewerkingen op een bestand uitvoert, moet u er vaak voor zorgen dat het opgegeven bestand überhaupt bestaat. Dit is wat de functie file_exists doet. Deze functie kan slechts twee waarden retourneren, zoals u zich kunt voorstellen WAAR(als het opgegeven bestand bestaat) en ONWAAR. Meestal ziet het gebruik van deze functie er als volgt uit:

Houd er rekening mee dat de functie alleen werkt op lokale bestanden, dat wil zeggen dat als u wilt controleren of Yandex een robot.txt-bestand heeft verkregen, uw inspanningen tevergeefs zullen zijn. Maar het is mogelijk om elk bestand op de lokale server te controleren, ongeacht de directory van de locatie.

Hier volgen enkele regels voor het beschrijven van het pad naar een bestand.

bestandsgrootte

Zoals de naam al doet vermoeden, bepaalt de functie de bestandsgrootte en retourneert deze in bytes. Handig als je wilt controleren of een bestand informatie bevat (zoals je je misschien kunt voorstellen bevat een leeg bestand 0 bytes), en het is ook mogelijk om de bestandsgrootte te controleren om te zien of deze een bepaalde limiet overschrijdt.

bestand

Deze functie werkt al rechtstreeks met het bestand. Het retourneert de inhoud van het opgegeven bestand en doet dit in de vorm van een array, waarbij elk element een regel van het bestand is. De functie is handig wanneer u meerdere verschillende waarden in één bestand moet opslaan die elkaar niet mogen kruisen. Vervolgens wordt elke waarde op een aparte regel opgeslagen en gelezen door de bestandsfunctie, die een array retourneert, waarbij de gegeven variabele toegankelijk wordt gemaakt door de waarde van het array-element te lezen met de index die overeenkomt met de regel in het bestand.

Het is ook mogelijk om alle elementen van de geretourneerde array te herenigen in één enkele variabele. Dit wordt gedaan met behulp van de implode array-functie.

fopen

Als de vorige functie op zichzelf staat en over het algemeen niet gerelateerd is aan andere functies, werken volgende functies voor het werken met bestanden in combinatie met fopen . Deze functie opent het opgegeven bestand en retourneert de bestandsverbindings-ID, die wordt gebruikt voor servicedoeleinden. Deze functie is op geen enkele manier verbonden met de inhoud van het bestand.

De fopen-functie heeft verschillende modi voor het werken met een bestand. Ze worden achter de bestandsnaam aangegeven en zijn als volgt:

    "R"
    Het bestand wordt alleen geopend om de inhoud ervan te lezen.

    "r+"
    Een bestand openen voor zowel lezen als schrijven.

    "w"
    Het bestand wordt geopend voor schrijfdoeleinden.

    "w+"
    Open het bestand om te lezen en te schrijven.

    "A"
    Het bestand wordt geopend om naar het einde van het bestand te schrijven (toevoegen).

    "een+"
    Opent voor verder schrijven en lezen.

fgets

Functie voor het lezen van een bestand geopend door de fopen-functie. Maar in tegenstelling tot bestand retourneert deze functie elke keer dat deze wordt uitgevoerd slechts één regel van het bestand, en verplaatst de interne bestandsaanwijzer naar de volgende regel, die wordt gelezen de volgende keer dat de functie wordt aangeroepen. Als u het hele bestand wilt lezen, moet u deze functie daarom in een lus gebruiken.

Merk op dat de fgets-functie een extra lengteparameter gebruikt, die de maximale lengte specificeert van een te lezen bestandsregel. Als de grootte van de string dit getal overschrijdt, retourneert de functie deze in een “afgekapte” vorm met een lengte van bytes. Standaard is deze parameter ingesteld op 1024 bytes, oftewel één kilobyte. Let vooral op deze parameter als u grote bestanden gebruikt, omdat bij het lezen van dergelijke bestanden de PHP-uitvoeringsbuffer kan overlopen (de grootte ervan wordt aangegeven in het configuratiebestand), wat tot vastlopen zal leiden.

Houd er rekening mee dat het te lezen bestand niet de bestandsnaam is, maar de bestandsverbindings-ID die wordt geretourneerd door de fopen-functie (in ons voorbeeld de waarde van de variabele $file).

fputs

De functie van het schrijven van informatie naar een bestand, en dit gebeurt volgens het principe van de fgets-functie, dat wil zeggen dat het begint met schrijven vanaf de positie van de interne bestandsaanwijzer. Over het algemeen is deze functie in veel opzichten vergelijkbaar met de bovenstaande: er wordt ook gebruik gemaakt van de parameter voor de schrijfgegevenslengte, die ook optioneel is.

fsluiten

Zoals je misschien al geraden had, sluit deze functie het opgegeven bestand. Eigenlijk sluit PHP na voltooiing van het script zelf alle geopende bestanden, maar het is nog steeds beter om dit handmatig te doen. Als functieparameter moet u de bestandsverbindingscode opgeven.

Om de combinatie van bovenstaande functies te illustreren, geven we een voorbeeld van het maken van een eenvoudige bezoekenteller.

$file = fopen("counter.txt", "r");
$c = fgets($bestand, 150);
fclose($bestand);
$c++;
$file = fopen("counter.txt", "w");
fputs($bestand, $c);
fclose($bestand);
echo $c;
?>

Werken met mappen

Nauw verwant aan acties op bestanden zijn bewerkingen op mappen. Het algoritme om ermee te werken is vergelijkbaar met bewerkingen op bestanden: eerst moet u de map openen, enkele acties uitvoeren en ten slotte sluiten.

opendir

Deze functie opent de opgegeven directory en retourneert de service-ID voor de directoryverbinding. Directorypaden moeten als volgt worden opgegeven:

De punt betekent dat de huidige map wordt geopend

. /bestanden/

Een map openen bestanden bevindt zich in de huidige map

Een map openen die één niveau hoger is dan de huidige

leesmap

De functie leest de map die is geopend door opendir. Voor elke doorgang retourneert het de naam van het bestand of de map die zich in de opgegeven map bevindt en wordt de interne verwijzing naar het volgende mapobject verplaatst. Om de hele map te kunnen lezen, moet deze dus in een lus worden gebruikt.

Er moet ook worden opgemerkt dat deze functie mapserviceobjecten retourneert . En .. , die kan worden bijgesneden wanneer deze wordt uitgevoerd door de IF-instructie.

geslotenir

We sluiten de map en geven de mapverbindings-ID als argument op.

Soms maakt het gebruik van directoryfuncties het leven een stuk eenvoudiger. In de sectie Functies ziet u bijvoorbeeld een lijst met functies in alfabetische volgorde. Kun je je voorstellen hoeveel tijd het zou kosten om deze hele lijst met links handmatig te schrijven, en zelfs in alfabetische volgorde. En dit is waar de functies voor het werken met mappen mij hebben geholpen. Elke functie werd in een apart bestand geplaatst met een naam die overeenkomt met de naam van de functie, zonder enige extensie.

Elke keer dat u de pagina bezoekt, krijgt u dus een nieuw gegenereerde lijst met functies.

Dat is alles. Tot ziens in de volgende les.

Reg.ru: domeinen en hosting

De grootste registrar en hostingprovider in Rusland.

Meer dan 2 miljoen domeinnamen in gebruik.

Promotie, domeinmail, zakelijke oplossingen.

Meer dan 700.000 klanten over de hele wereld hebben hun keuze al gemaakt.

*Beweeg de muis over om het scrollen te pauzeren.

Terug Vooruit

Een lijst met mappen verkrijgen met behulp van PHP

Directory's weergeven met behulp van PHP, of directory's weergeven

We noemen directory listing een algemene zoekopdracht die een lijst genereert van alle of enkele bestanden en mappen van de bovenliggende map - een proces dat vergelijkbaar is met het werk van de indexpagina dat door de meeste webservers wordt aangeboden, maar met O Meer controle over de inhoud en opmaak ervan.

Een ander voordeel van dit script is de mogelijkheid om bepaalde acties uit te voeren met bestanden die PHP gebruiken. Hoe dan ook, de eerste stap die we moeten doen is het bestandssysteem doorzoeken - een lijst met bestanden en mappen retourneren.

Met de hieronder gepresenteerde functies kunt u bestandsnamen en andere eigenschappen uit een specifieke map extraheren, of recursief door subcategorieën bladeren.

Opmerking: PHP5 heeft een functie scandir, dat "een lijst met bestanden en mappen in een map op een bepaald pad retourneert", maar geen aanvullende informatie weergeeft over de bestanden in de map.

Eén map vermelden

Om te beginnen is hier een voorbeeld van een eenvoudige functie die een lijst met bestanden, mappen en hun eigenschappen uit één map retourneert (je vindt meer geavanceerde versies van deze functie verderop in deze les).

read())) ( // sla verborgen bestanden over if($entry == ".") continue; if(is_dir("$dir$entry")) ( $retval = array("name" => "$dir$ entry/", "size" => 0, "lastmod" => filemtime("$dir$entry")); ) elseif(is_readable("$dir$entry")) ( $retval = array("name" = > "$dir$entry", "size" => filesize("$dir$entry"), "lastmod" => filemtime("$dir$entry") ) ) $d->close();

retourneer $retval;

) ?>

U kunt deze functie zoals hieronder gebruiken:

De geretourneerde waarde is een associatieve array van bestanden, inclusief de padinformatie, de grootte en de laatste wijzigingsdatum van het bestand, tenzij het bestand een map is. In dat geval verschijnt de tekenreeks "(dir)" in plaats van de bestandsgrootte. Voorbeeld 1:

",print_r($dirlist),"

De geretourneerde waarde is een associatieve array van bestanden, inclusief de padinformatie, de grootte en de laatste wijzigingsdatum van het bestand, tenzij het bestand een map is. In dat geval verschijnt de tekenreeks "(dir)" in plaats van de bestandsgrootte."; /* voorbeelduitvoer Array ( => Array ( => images/background0.jpg => image/jpeg => 86920 => 1077461701) => ...) */ ?>

Voorbeeld 2:

"; /* voorbeelduitvoer Array ( => Array ( => ./images/background0.jpg => image/jpeg => 86920 => 1077461701) => ...) */ ?>

Bestanden weergeven via HTML Om de uitvoerresultaten op de pagina in HTML te krijgen, doorlopen we de geretourneerde array\n"; echo"NaamType Maat Bestanden weergeven via HTML Laatste mod. Bestanden weergeven via HTML \n"; foreach($dirlijst als $bestand) ( echo " Bestanden weergeven via HTML ($bestand["naam"]) Bestanden weergeven via HTML Bestanden weergeven via HTML($bestand["type"])($bestand["grootte"])

\n"; ) echo"

  • \n\n"; ?>
  • Deze code is vrij eenvoudig aan te passen, bijvoorbeeld:
  • - de lijstresultaten weergeven als een lijst in plaats van als een tabel;
  • - maak bestandsnamen actieve links;

- vervang namen door pictogrammen op basis van welk type bestand het is;

Bestanden weergeven via HTML Om de uitvoerresultaten op de pagina in HTML te krijgen, doorlopen we de geretourneerde array\n"; echo"NaamType enz. Bestanden weergeven via HTML Laatste mod. Bestanden weergeven via HTML \n"; foreach($dirlijst als $bestand) ( echo " Bestanden weergeven via HTML ($bestand["naam"]) Bestanden weergeven via HTML Als u bijvoorbeeld alleen PNG-bestanden wilt uitvoeren, voegt u een eenvoudige voorwaarde toe aan de uitvoerlus: Bestanden weergeven via HTML($bestand["type"])($bestand["grootte"])

\n"; foreach($dirlist as $file) ( //controleer of het bestand een PNG is if(!preg_match("/\.png$/", $file["name"])) continue; echo " ",date("r", $file["laatste mod"])," In dit voorbeeld worden alle bestanden waarvan de naam eindigt op overgeslagen en verborgen

.png . U kunt ook aanvullende voorwaarden toepassen op basis van het bestandstype, de grootte of de datum waarop deze voor het laatst is gewijzigd. Als u bijvoorbeeld een thumbnail, een link naar een grotere afbeelding of zelfs een video wilt weergeven, geeft u deze twee bestanden gewoon dezelfde namen en gebruikt u in het bovenstaande script

str_vervangen

En aangezien we zo ver zijn gekomen, zullen er slechts kleine wijzigingen plaatsvinden in de recursieve lijst- en subcategorie-aanroepfunctie. Door een tweede parameter aan de functie toe te voegen, behouden we de eerdere functionaliteit van het weergeven van een enkele map.

read())) ( // sla verborgen bestanden over if($entry == ".") continue; if(is_dir("$dir$entry")) ( $retval = array("name" => "$dir$ entry/", "size" => 0, "lastmod" => filemtime("$dir$entry")); if($recurse && is_readable("$dir$entry/")) ( $retval = array_merge($ retval, getFileList("$dir$entry/", true) ) elseif(is_readable("$dir$entry")) ( $retval = array("name" => "$dir$entry", "size " => filesize("$dir$entry"), "lastmod" => filemtime("$dir$entry"));

retourneer $retval; ) ?> Om de nieuwe functionaliteit te laten werken, moet u een waarde invoeren

WAAR

(of 1) als de tweede parameter.

Controleer voordat u het script recurseert of de submappen leesbaar zijn en lees ook de laatste paragraaf van deze les om toegangsfouten te voorkomen.

Net als voorheen is de geretourneerde waarde een array, een associatieve array. In feite is de enige toevoeging een extra optie voor recursieve weergave.

Recursiedieptelimiet

Dit laatste voorbeeld voegt nog een functie toe: de mogelijkheid om te specificeren hoe "diep" de recursie moet gaan. De vorige code blijft submappen verkennen totdat ze op zijn. Dit script helpt u een limiet in te stellen voor het aantal niveaus van geneste mappen. read())) ( // sla verborgen bestanden over if($entry == ".") continue; if(is_dir("$dir$entry")) ( $retval = array("name" => "$dir$ entry/", "size" => 0, "lastmod" => filemtime("$dir$entry")); if($recurse && is_leesbaar("$dir$entry/")) ( if($ depth == = false) ( $retval = array_merge($retval, getFileList("$dir$entry/", true)); ) elseif($ depth > 0) ( $retval = array_merge($retval, getFileList("$dir$entry /", true, $diepte-1)); ) ) ) elseif(is_readable("$dir$entry")) ( $retval = array("name" => "$dir$entry", "size" => filesize("$dir$entry"), "lastmod" => filemtime("$dir$entry") ) ) $d->close(); retourneer $retval;

In deze les behandelen we een typische taak die zich voordoet tijdens het werken aan een PHP-project: het verkrijgen van een lijst met bestanden en mappen. We zullen verschillende basis- en meer geavanceerde benaderingen bespreken, waarbij we de voor- en nadelen van elke aanpak opsommen. De eerste drie oplossingen zullen standaard PHP-functies gebruiken, en daarna zullen we een robuustere oplossing introduceren met behulp van SPL-iteratoren.

Voor een inhoudelijke bespreking van de oplossing en demonstraties gaan we ervan uit dat de directorystructuur als volgt is:

\---beheerder | \---gebruiker | \---document.txt | \---data.dat | \---stijl.css |---artikel.txt |---master.dat |---script.php |---test.dat |---tekst.txt

Basisoplossingen

De eerste reeks oplossingen is gebaseerd op het gebruik van de functie glob(), een combinatie van de functies opendir() , readdir() en closedir() en ook de functie scandir().

Glob() gebruiken

De eerste oplossing is gebaseerd op het gebruik van de functie glob(), waarmee u met behulp van patronen naar paden kunt zoeken. De functie heeft twee parameters:

  • $pattern (verplicht): zoekpatroon
  • $flags (optioneel): een of meer vlaggen, waarvan beschrijvingen te vinden zijn in de documentatie

Laten we naar voorbeelden kijken. Om in een map te zoeken naar alle bestanden en mappen waarvan de naam eindigt op .txt, moet je de code gebruiken:

Als we de variabele $filelist weergeven, krijgen we:

Array (0 => "artikel.txt", 1 => "tekst.txt")

Als je een lijst met bestanden en mappen nodig hebt waarvan de namen beginnen met “te”, dan ziet de code er als volgt uit:

En de uitvoer ziet er als volgt uit:

Array (0 => "test.dat", 1 => "tekst.txt")

En om een ​​lijst te krijgen met alleen mappen met namen die “ma” bevatten, gebruik je de code:

Het laatste voorbeeld levert het volgende op:

Array (0 => "beheerder")

Merk op dat het laatste voorbeeld de vlag GLOB_ONLYDIR gebruikt als de tweede parameter van de functie. Daarom wordt het bestand master.dat uitgesloten van de lijst. Hoewel de functie glob() heel gemakkelijk te gebruiken is, is deze soms niet flexibel genoeg. Er is bijvoorbeeld geen vlag om alleen bestanden (geen mappen) op te halen die overeenkomen met het patroon.

We gebruiken opendir() , readdir() en closedir() .

De tweede benadering voor het verkrijgen van een lijst met bestanden en mappen die we zullen bespreken, is het gebruik van de functies opendir() , readdir() en closedir().

De functie opendir() opent een map en retourneert een verbindingshandle. Zodra de handle is verkregen, kan de functie readdir() worden gebruikt. Bij elke aanroep retourneert deze functie de naam van het volgende bestand of de volgende map binnen de geopende map. Als alle namen al zijn vermeld, retourneert de functie read())) ( // sla verborgen bestanden over if($entry == ".") continue; if(is_dir("$dir$entry")) ( $retval = array("name" => "$dir$ entry/", "size" => 0, "lastmod" => filemtime("$dir$entry")); if($recurse && is_leesbaar("$dir$entry/")) ( if($ depth == = false) ( $retval = array_merge($retval, getFileList("$dir$entry/", true)); ) elseif($ depth > 0) ( $retval = array_merge($retval, getFileList("$dir$entry /", true, $diepte-1)); ) ) ) elseif(is_readable("$dir$entry")) ( $retval = array("name" => "$dir$entry", "size" => filesize("$dir$entry"), "lastmod" => filemtime("$dir$entry") ) ) $d->close();. De functie closedir() wordt gebruikt om de handle te sluiten.

In tegenstelling tot het gebruik van de functie glob() is deze aanpak complexer omdat u niet over parameters beschikt waarmee u de lijst met bestands- en mapnamen kunt filteren die worden geretourneerd. U moet zelf filteren om de gewenste resultaten te krijgen.

Het volgende voorbeeld retourneert een lijst met bestands- en mapnamen die beginnen met “te”:

Wanneer de bovenstaande code wordt uitgevoerd, bevat de variabele $entry insluitsels zoals “.” En "..". Dit zijn twee virtuele mappen die in elke map van het bestandssysteem voorkomen. Ze vertegenwoordigen respectievelijk de huidige map en de bovenliggende map.

In het tweede voorbeeld worden alleen de bestanden in de opgegeven map weergegeven.

Het voorbeeld levert het volgende op:

Array (0 => "artikel.txt", 1 => "master.dat", 2 => "script.php", 3 => "test.dat", 4 => "tekst.txt")

Scandir() gebruiken

Laten we tot slot de functie scandir() introduceren. Het heeft slechts één vereiste parameter: het leespad. De functie retourneert een array met bestanden en mappen die zich op het opgegeven pad bevinden. Om een ​​lijst met bestanden en mappen te verkrijgen op basis van een specifiek criterium, moet u extra filtering uitvoeren. Aan de andere kant is de oplossing beknopter en vereist geen handvatbeheer.

Dit voorbeeld laat zien hoe u een lijst met bestanden en mappen kunt krijgen waarvan de naam begint met “te”:

Laten we SPL-iteratoren gebruiken

Laten we nu eens kijken naar het gebruik van SPL-iteratoren. Maar voordat we ons probleem gaan oplossen, geven we eerst een inleiding tot de SPL-bibliotheek en iterators. De SPL-bibliotheek biedt een reeks klassen voor objectgeoriënteerde datastructuren, iterators, bestandsdescriptors en meer.

Een van de voordelen van iterators is dat het klassen zijn en kunnen worden uitgebreid om aan uw eigen behoeften te voldoen. Een ander voordeel is dat iterators hun eigen methoden hebben, die handig zijn voor het oplossen van veel voorkomende problemen en zich op één plek bevinden. Bekijk een voorbeeld van het gebruik van FilesystemIterator versus readdir() . Beide methoden gebruiken een lus, maar met readdir() verwerkt u alleen een string, terwijl FilesystemIterator werkt met een object dat aanvullende informatie over het bestand of de map kan bevatten (grootte, eigenaar, machtigingen, enzovoort).

Natuurlijk biedt PHP de mogelijkheid om dergelijke informatie te verkrijgen met behulp van functies zoals filesize() en fileowner(). Maar PHP5 is gebaseerd op het gebruik van het OOP-concept. Daarom is het beter om moderne methoden te gebruiken om met een programmeertaal te werken. Op onze website vindt u lessen over het werken met iterators.

Zoals al vermeld in het waterige deel van de tutorial, zullen we kijken naar het gebruik van FilesystemIterator, RecursiveDirectoryIterator en GlobIterator. De eerste erft van DirectoryIterator en de rest van FilesystemIterator . Ze hebben allemaal dezelfde constructor, die twee parameters nodig heeft:

  • $path (vereist): pad naar de bestandssysteemvermelding waarop bewerkingen worden uitgevoerd
  • $flags (optioneel): een of meer vlaggen vermeld in de documentatie

Het echte verschil tussen deze iterators is de manier waarop ze worden gebruikt om langs een bepaald pad te navigeren.

BestandssysteemIterator

Het gebruik van FilesystemIterator is heel eenvoudig. Laten we het in actie zien. We presenteren twee voorbeelden. De eerste toont een zoekopdracht naar alle bestanden en mappen waarvan de naam begint met “te”. Het tweede voorbeeld gebruikt een andere RegexIterator om alle bestanden en mappen te vinden waarvan de naam eindigt met “t.dat” of “t.php”. De RegexIterator wordt gebruikt om het resultaat te filteren op basis van reguliere expressies.

getFilename(), "te") === 0) ( $filelist = $entry->getFilename(); ) )

De bovenstaande code levert een resultaat op dat vergelijkbaar is met de vorige voorbeelden.

Tweede voorbeeld met RegexIterator:

getBestandsnaam(); )

Het zal het volgende opleveren:

Array (0 => "script.php", 1 => "test.dat")

RecursieveDirectoryIterator

De RecursiveDirectoryIterator biedt een interface voor het recursief doorkruisen van bestandssysteemmappen. Het heeft verschillende handige methoden, zoals getChildren() en hasChildren(), die een iterator voor de huidige locatie retourneren als het een map is, en controleren of het huidige toegangspunt een map is. In het volgende voorbeeld wordt het gebruik van RecursiveDirectoryIterator en getChildren() gedemonstreerd. Het resultaat zal hetzelfde zijn als in de voorgaande voorbeelden.

getChildren(), "/t\.(php|dat)$/"); $bestandslijst = array(); foreach($filter as $entry) ( $filelist = $entry->getFilename(); )

GlobIterator

De GlobIterator itereert het bestandssysteem op dezelfde manier als de functie glob(). De eerste parameter kan een sjabloon voor de naam bevatten. Het voorbeeld demonstreert het gebruik van GlobIterator met hetzelfde resultaat als voorheen.

getBestandsnaam(); )

Conclusie

Deze les demonstreert het gebruik van verschillende benaderingen om hetzelfde doel te bereiken: het verkrijgen van een lijst met bestanden en mappen. De volgende belangrijke punten moeten in gedachten worden gehouden:

  • De functie glob() is een ingebouwde oplossing, maar is niet flexibel genoeg.
  • Een oplossing gebaseerd op opendir() , readdir() en closedir() is complexer en vereist extra filtering, maar is flexibeler.
  • De functie scandir() vereist extra filtering, maar werkt zonder de handle te verwerken.
  • Als u een OOP-aanpak gebruikt, moet u de SPL-bibliotheek gebruiken. Daarnaast kunt u klassen uitbreiden met uw eigen functionaliteit.
  • De GlobIterator heeft een voorfilterfunctie, terwijl andere RegexIterator gebruiken.