Arbeiten mit dem Dateisystem in PHP: Grundlegende Funktionen und Beispiele
Die Arbeit mit dem Dateisystem ist eine der Kernaufgaben der Webentwicklung. PHP bietet einen leistungsstarken und flexiblen Satz an Funktionen zum Erstellen, Lesen, Schreiben, Löschen von Dateien und Ordnern sowie zur Verwaltung von Zugriffsrechten. In diesem Artikel werden wir die grundlegenden Möglichkeiten von PHP für die Arbeit mit dem Dateisystem erläutern, praktische Beispiele geben und typische Fehler betrachten.
1. Lesen von Dateien in PHP
PHP unterstützt mehrere Methoden zum Lesen von Daten aus Dateien. Die Wahl der Methode hängt von der Dateigröße und dem erforderlichen Kontrollgrad ab.
1.1. Die Funktion file_get_contents()
Der einfachste Weg, eine gesamte Datei in einen String zu lesen, ist die Verwendung von file_get_contents(). Diese Funktion eignet sich für kleine Dateien (Konfigurationen, Vorlagen).
<?php// Lesen der gesamten Datei in einen String$content = file_get_contents('data.txt');if ($content !== false) { echo "Dateiinhalt: " . htmlspecialchars($content);} else { echo "Fehler beim Lesen der Datei";}?>1.2. Die Funktion file()
Wenn Sie den Dateiinhalt als Array von Zeilen (eine Zeile pro Element) erhalten möchten, verwenden Sie file().
<?php$lines = file('log.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);foreach ($lines as $lineNum => $line) { echo "Zeile " . ($lineNum + 1) . ": " . htmlspecialchars($line) . "<br>";}?>1.3. Zeilenweises Lesen mit fopen() + fgets()
Für große Dateien (z. B. Logs) ist es besser, das Streaming zu verwenden, um die gesamte Datei nicht im Speicher zu halten.
<?php$handle = fopen('large_file.csv', 'r');if ($handle) { while (($buffer = fgets($handle, 4096)) !== false) { echo $buffer . "<br>"; } fclose($handle);} else { echo "Datei konnte nicht geöffnet werden";}?>2. Schreiben von Daten in Dateien
Das Schreiben kann ebenfalls auf verschiedene Arten erfolgen. Der Hauptunterschied liegt im Überschreiben der Datei oder im Anhängen an das Ende.
2.1. Die Funktion file_put_contents()
Eine schnelle Möglichkeit, einen String in eine Datei zu schreiben. Wenn die Datei nicht existiert, wird sie erstellt. Standardmäßig wird die Datei überschrieben.
<?php$data = "Neuer Eintrag: " . date('Y-m-d H:i:s') . "";// Überschreiben der Dateifile_put_contents('log.txt', $data);// Anhängen an das Ende (Flag FILE_APPEND)file_put_contents('log.txt', $data, FILE_APPEND);?>2.2. Manuelles Schreiben mit fopen() + fwrite()
Für eine feinere Kontrolle (z. B. Dateisperrung) verwenden Sie das Paar fopen() / fwrite().
<?php$filename = 'counter.txt';$handle = fopen($filename, 'c+'); // 'c+' — erstellt die Datei, falls sie nicht existiertif (flock($handle, LOCK_EX)) { // exklusive Sperre $current = (int) fread($handle, filesize($filename) ?: 1); $current++; ftruncate($handle, 0); // Datei leeren rewind($handle); fwrite($handle, $current); flock($handle, LOCK_UN); // Sperre aufheben}fclose($handle);echo "Zähler: $current";?>3. Arbeiten mit Verzeichnissen
PHP ermöglicht nicht nur die Verwaltung von Dateien, sondern auch das Erstellen, Löschen und Durchsuchen von Ordnern.
3.1. Ordner erstellen (mkdir)
<?php// Einen einzelnen Ordner erstellenif (!is_dir('uploads')) { mkdir('uploads', 0755);}// Rekursives Erstellen von verschachtelten Ordnern (PHP 5.4+)mkdir('images/2024/12', 0755, true);?>3.2. Ordner löschen (rmdir)
rmdir() löscht nur einen leeren Ordner. Zum Löschen eines Ordners mit gesamten Inhalt ist eine rekursive Funktion erforderlich.
<?phpfunction deleteDirectory($dir) { if (!file_exists($dir)) { return true; } if (!is_dir($dir)) { return unlink($dir); } $items = array_diff(scandir($dir), ['.', '..']); foreach ($items as $item) {