Heim  >  Artikel  >  Backend-Entwicklung  >  So erhalten Sie den gesamten Inhalt eines Verzeichnisses in PHP

So erhalten Sie den gesamten Inhalt eines Verzeichnisses in PHP

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-06-01 17:23:122192Durchsuche

In diesem Artikel erfahren Sie, wie Sie mit PHP alle Inhalte im Verzeichnis abrufen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

So erhalten Sie den gesamten Inhalt eines Verzeichnisses in PHP

Dieses Mal stellen wir einen Verzeichnisiterator in der SPL-Bibliothek vor. Seine Funktion ist eigentlich sehr einfach, den gesamten Inhalt im angegebenen Verzeichnis abzurufen. Zuvor mussten wir das Verzeichnis durchqueren, um das Verzeichnis und alle darin enthaltenen Dateien zu erhalten, was im Allgemeinen einen rekursiven Durchlauf erforderte. Um ehrlich zu sein, ist es ziemlich mühsam, diesen Code selbst zu schreiben, daher hat PHP diesen Satz von integrierten Programmen vorbereitet. in APIs für uns Geben Sie dann beim Betreten des angegebenen Verzeichnisses direkt den Inhalt aller Unterverzeichnisse und Dateien im Verzeichnis zurück. Natürlich ist es keine Baumform und die Reihenfolge ist nicht sicher. Wenn wir es in eine Baumform organisieren möchten, müssen wir es selbst verarbeiten.

Schauen wir uns ohne weitere Umschweife einfach den Code an:

$path = $argv[1];

// 获取目录下所有内容
$dirs = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);

foreach($dirs as $k=>$d){
    echo 'key:'. $k, PHP_EOL;
    if($d->isDir()){
        echo $d->getPathname(), PHP_EOL;
    }else{
        echo $d->getFilename(), PHP_EOL;
    }
}

//执行 php PHP获取目录中的全部内容RecursiveDirectoryIterator.php ../

// key:../.
// ../.
// key:../..
// ../..
// key:../source
// ../source
// key:../source/.
// ../source/.
// key:../source/..
// ../source/..
// key:../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php
// PHP获取目录中的全部内容RecursiveDirectoryIterator.php
// key:../source/PHP大文件读取操作.php
// PHP大文件读取操作.php
// key:../PHP大文件读取操作.md
// PHP大文件读取操作.md
// key:../PHP获取目录中的全部内容RecursiveDirectoryIterator.md
// PHP获取目录中的全部内容RecursiveDirectoryIterator.md

Es ist eigentlich nur eine Codezeile, die dann direkt in einer Schleife ausgeführt wird, um den Iterator auszugeben. Aus den Ergebnissen können wir ersehen, dass wir zuerst das Quellverzeichnis eingeben, dann den Inhalt der externen Datei durchlaufen und alle Inhalte im Verzeichnis in der Reihenfolge des Verzeichnisses und des Dateinamens erhalten. Ist das nicht viel praktischer, als die rekursive Funktion selbst zu schreiben?

Was wäre, wenn wir alle PHP-Dateien im Verzeichnis abrufen und ihre Gesamtdateigröße berechnen möchten? Mit diesem Satz von Iteratoroperationen können wir auch ganz einfach einen regulären Iterator hinzufügen, um den Inhalt des vorherigen Iterators zu filtern:

// 获取所有php文件
$regIts = new RegexIterator($dirs, '/^.+\.php$/i');
$fileSize = 0;
foreach($regIts as $k=>$p){
    echo $p->getSize() . ' ' .  $k, PHP_EOL;
    $fileSize += $p->getSize();
}
echo 'Total ', $fileSize, PHP_EOL;

// 622 ../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php
// 869 ../source/PHP大文件读取操作.php
// Total 1491

Es fühlt sich an wie ls -l, was bequem sein kann . Die Verwendung dieser Klasse wird hier kurz vorgestellt. Es gibt viele Funktionen in der SPL-Bibliothek, die es wert sind, dass wir sie erkunden. Lernen Sie langsam und üben Sie langsam, um unsere Fähigkeiten zur eleganten Programmierung kontinuierlich zu verbessern.

Testcode:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/PHP%E8%8E%B7%E5%8F%96%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%85%A8%E9%83%A8%E5%86%85%E5%AE%B9RecursiveDirectoryIterator.php

Empfohlenes Lernen: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo erhalten Sie den gesamten Inhalt eines Verzeichnisses in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen