Heim >Backend-Entwicklung >PHP-Tutorial >Beispiele für die Verwendung der Rekursion zum Kopieren, Löschen und Anzeigen der Größe von Ordnern in PHP
In diesem Artikel wird hauptsächlich die rekursive PHP-Implementierung von Ordnerkopier-, Lösch- und Anzeigegrößenoperationen vorgestellt. Er analysiert den rekursiven PHP-Algorithmus in Kombination mit den allgemeinen PHP-Ordneroperationsfunktionen, um das Kopieren, Löschen, Anzeigen und andere verwandte Implementierungen von Ordnern zu implementieren Tipps in Form von Beispielen finden Freunde, die sie benötigen, unter
Dieser Artikel beschreibt das Beispiel der rekursiven Implementierung von Ordnerkopier-, Lösch- und Anzeigegrößenoperationen. Teilen Sie es allen als Referenz mit. Die Details lauten wie folgt:
Obwohl PHP Funktionen für Dateioperationen wie Dateigröße, Kopieren und Aufheben der Verknüpfung bereitstellt, bietet es keine Funktionen für Ordneroperationen wie Verzeichnisgröße, Kopierverzeichnis usw. und rmdirs (rmdir kann nur leere Verzeichnisse löschen). Daher können diese Funktionen nur manuell geschrieben werden. Der Haupttrick besteht darin, das Problem Schicht für Schicht durch Rekursion zu zerlegen, bis es in das kleinste Teilproblem zerlegt ist, das direkt gelöst werden kann.
Ordnergröße anzeigen
Da Ordner keine Größe haben, bezieht sich die Ordnergröße normalerweise auf die Ordnergröße, um genau zu sein aller Dateien in . Sie müssen also nur die Ordner Schicht für Schicht durchsuchen, die Größe der in jeder Schicht enthaltenen Dateien zählen und schließlich die Ergebnisse aus dem tiefsten Ordner zum Zusammenführen zurückgeben.
/** * 文件夹大小 * @param $path * @return int */ function dirsize($path) { $size = 0; $handle = opendir($path); while (($item = readdir($handle)) !== false) { if ($item == '.' || $item == '..') continue; $_path = $path . '/' . $item; if (is_file($_path)) $size += filesize($_path); if (is_dir($_path)) $size += dirsize($_path); } closedir($handle); return $size; }
Ordner kopieren
Dateien können kopiert werden, Ordner können jedoch nicht kopiert werden (aber erstellt werden kann), wenn Sie den Effekt des Kopierens eines Ordners erzielen möchten, müssen Sie einen neuen Ordner mit derselben Verzeichnisstruktur wie der ursprüngliche Ordner erstellen und dann die Dateien entsprechend der ursprünglichen Verzeichnisstruktur in den neuen Ordner kopieren. Gemäß der rekursiven Idee ist es nicht erforderlich, zu Beginn eine vollständige Verzeichnisstruktur zu generieren. Sie müssen lediglich das aktuelle Verzeichnis durchlaufen, feststellen, dass der Ordner nicht vorhanden ist, ihn erstellen und dann die Datei in den entsprechenden Ordner kopieren.
/** * 复制文件夹 * @param $source * @param $dest */ function copydir($source, $dest) { if (!file_exists($dest)) mkdir($dest); $handle = opendir($source); while (($item = readdir($handle)) !== false) { if ($item == '.' || $item == '..') continue; $_source = $source . '/' . $item; $_dest = $dest . '/' . $item; if (is_file($_source)) copy($_source, $_dest); if (is_dir($_source)) copydir($_source, $_dest); } closedir($handle); }
Ordner löschen
rmdir kann nur leere Ordner löschen, durch Aufheben der Verknüpfung können jedoch Dateien gelöscht werden . Daher kam die Idee auf, einen Ordner zu löschen. Löschen Sie zunächst alle Dateien im Verzeichnis, indem Sie die Verknüpfung aufheben, und löschen Sie dann die verbleibenden leeren Ordner, indem Sie rmdir verwenden. Die Logik der rekursiven Verarbeitung besteht darin, alle Dateien und Ordner im aktuellen Verzeichnis zu finden, alle darin enthaltenen Dateien zu löschen und dann das Verzeichnis der nächsten Ebene zu durchlaufen, um alle Dateien zu löschen ... bis zum Verzeichnis der letzten Ebene und dann den gesamten Ordner hat keine Dateien (Aber der Ordner ist noch da), zu diesem Zeitpunkt beginnt die Rekursion zurückzukehren, und jedes Mal, wenn sie zu einer Ebene zurückkehrt, werden alle leeren Verzeichnisse auf dieser Ebene gelöscht. Wenn sie zur obersten Ebene zurückkehrt, endet die Rekursion , und alle Dateien und Verzeichnisse werden ebenfalls gelöscht.
/** * 删除文件夹 * @param $path * @return bool */ function rmdirs($path) { $handle = opendir($path); while (($item = readdir($handle)) !== false) { if ($item == '.' || $item == '..') continue; $_path = $path . '/' . $item; if (is_file($_path)) unlink($_path); if (is_dir($_path)) rmdirs($_path); } closedir($handle); return rmdir($path); }
Ordner ausschneiden
Umbenennen ist ein Sonderfall der PHP-Dateisystemfunktion kann sowohl Dateien als auch Ordner umbenennen. Wenn Sie einen anderen Pfad für die umbenannte Datei übergeben, wird sie zur Ausschneidefunktion, einem kleinen, aber schönen Beispiel für Dateifunktionen.
/** * @param $oldname 必需。规定要重命名的文件或目录。 * @param $newname 必需。规定文件或目录的新名称。 * @param $context 可选。规定文件句柄的环境。 */ rename($oldname,$newname,$context);
Das obige ist der detaillierte Inhalt vonBeispiele für die Verwendung der Rekursion zum Kopieren, Löschen und Anzeigen der Größe von Ordnern in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!