Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert rekursiv das Kopieren, Löschen, Anzeigen der Größe usw. von Ordnern.

PHP implementiert rekursiv das Kopieren, Löschen, Anzeigen der Größe usw. von Ordnern.

墨辰丷
墨辰丷Original
2018-05-18 14:56:571297Durchsuche

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 jedoch nicht 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, während die Verknüpfung von Dateien aufgehoben werden kann 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 durchsuchen, um alle Dateien zu löschen ... bis zum Verzeichnis der letzten Ebene. Zu diesem Zeitpunkt gibt es keine Dateien im gesamten Ordner (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 Die Rekursion endet 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. die sowohl Dateien als auch Ordner umbenennen kann. 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);

Verwandte Empfehlungen:

phpRekursionDetaillierte Erläuterung des Funktionsfalls Verwendung

PHP (Iteration + Rekursion) Detaillierte Erklärung der Klassifizierung auf unendlicher Ebene

PHP ArrayRekursionDetaillierte Erläuterung der Schritte zum Implementieren der Sortierung

Das obige ist der detaillierte Inhalt vonPHP implementiert rekursiv das Kopieren, Löschen, Anzeigen der Größe usw. von Ordnern.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn