9. Verarbeitung von Dateien mit PHP

Seit dem Erscheinen des letzten Artikels weißt Du nun auch, wie Du Schleifen in PHP verwenden kannst. In dem heutigen Tutorial-Artikel soll es um etwas anderes gehen.

Wir beschäftigen uns mit Dateien. Ich möchte Dir dieses Mal zeigen, wie Du Dateien bearbeiten und auslesen kannst, und Ordner erstellen, löschen und deren Inhalte abfragen kannst.

Datei-Inhalte auslesen

Es gibt verschiedene Möglichkeit die Inhalte einer Datei in eine Variable einzulesen. Nachfolgend werde ich Dir auch noch zeigen, wie Du Inhalte in Dateien schreiben kannst. Ähnlich können Dateien auch ausgelesen werden.

Eine andere Methode ist allerdings noch schneller und sollte für diese Zwecke verwendet werden: file_get_contents()

Der erste Parameter enthält den Dateinamen oder die URL. Sollte Deine Konfiguration URL-Abfragen über die Funktion zulassen, sollte immer überprüft werden, ob es sich bei Benutzer-Eingaben um den gewünschten Typ, also eine URL oder eine lokale Datei handelt!

Hier ein Beispiel, um die Funktionsweise zu verdeutlichen:

if (file_exists('extern/datei3.txt')) {
   $datei = file_get_contents('extern/datei3.txt');
   echo $datei; // Gibt Inhalte der Datei aus
}

$url = file_get_contents('http://google.com');
echo $url; // Gibt HTML der URL aus

Wie Du siehst, verwenden wir file_exits() um zu vermeiden, dass eine Fehlermeldung ausgegeben wird, wenn die Datei nicht existiert.

Wie es das Manual zeigt, gibt es noch weitere Parameter für die Funktion file_get_contents(). Mit dem dritten kannst Du etwa einen eigenen Stream realisieren und so komplexe URL-Requests durchführen.

Datei beschreiben

Wer es komfortabel mag, kann file_put_contents() zum Schreiben in Dateien verwenden:

file_put_contents('pfad/zur/datei', "1\n2\n3"); // Schreibt die Zahlen 1-3 getrennt durch Zeilenumbrüche in eine Datei

Klassisch funktioniert es mit fopen(), fwrite() und fclose(). Damit wird eine Datei in einem Modus geöffnet. Mit ‚w‘ ist das zum Beispiel der reine Schreibmodus. Außerdem wird die Datei erstellt, wenn sie nicht existiert, und der Dateizeiger wird auf den Anfang gesetzt (überschreibt bisherige Inhalte).

Mit dem Modus ‚a‘ etwa wird der Dateizeiger auf das Ende platziert, sodass keine Inhalte überschrieben werden. Eine Übersicht aller Modi findest Du auf der Manual-Seite von fopen().

Wir möchten nun einfach einmal eine Datei komplett überschreiben, die angelegt werden soll, wenn sie noch nicht existiert:

$d = fopen('datei.txt', 'w'); // Datei öffnen, über $d kann nun auf sie zugegriffen werden
fwrite($d, "1. Zeile\n2. Zeile"); // Inhalte in $d schreiben
fclose($d); // Zum Schluss: $d schließen und Dateibearbeitung beenden

Natürlich sind hier zahlreiche Möglichkeiten denkbar. Es kommt ganz darauf an, was Du realisieren möchtest. Mit diesen beiden Funktionspärchen solltest Du recht gut bedient sein.

Datei löschen

Was, aber wenn eine Datei gelöscht werden soll? Auch das kann PHP, vorausgesetzt der Webserver-Benutzer hat die entsprechenden Rechte für die Dateien.

unlink() ist der Schlüssel zur Lösung dieser Aufgabe:

$file = 'pfad/zur/datei.txt';
if (file_exists($file)) {
   unlink($file); // Existiert die Datei wird sie gelöscht
}

Ordner löschen

Nicht nur Dateien, sondern auch Ordner können mit Hilfe von PHP gelöscht werden. Die Funktion rmdir() löscht allerdings nur leere Ordner.

Deswegen musst Du zunächst alle Dateien und Ordner aus einem Ordner löschen. Am besten Du machst das über eine rekursive Funktion, die alle Dateien eines Ordners ausliest und löscht. Stößt sie auf einen Unterordner ruft sie sich selbst erneut auf und liest diesen Unterordner aus und macht dort genau das gleiche.

Download Button
Download: delFolder-Funktion (PHP)

Für den Fall, dass Du eine solche Funktion nicht selbst schreiben möchtest, habe ich bereits eine solche geschrieben. Klicke hier oder auf den Button links um meine PHP-Funktion delFolder() zu downloaden.

Beachte bitte, dass PHP die entsprechenden Rechte für den Ordner besitzen muss. Außerdem solltest Du nach Möglichkeit den absoluten Pfad angeben, um sicherzustellen, dass der richtige Ordner ausgewählt wird. Dabei kann $_SERVER[‚DOCUMENT_ROOT‘] hilfreich sein.

Die Funktion kann ganz einfach eingesetzt werden:

// Zuvor den Code der Funktion einfügen //

// Löscht den Ordner, FÜGE EIN "/" AM ENDE DER ORDNER-BEZEICHNUNG EIN!
if (delFolder('/home/www/meine-website/neuerordner/')) {
   echo "Ordner inklusive Inhalte erfolgreich gelöscht."
} else {
   echo "Ordner konnte nicht gelöscht werden.";
}

Wie es das Beispiel erahnen lässt, gibt die Funktion im Erfolgsfall true, sonst false zurück. So kannst Du überprüfen, ob das Löschen erfolgreich war.

Ordner-Inhalte in PHP auslesen

Dateien werden in der Regel in Ordnern organisiert. Deswegen ist es hilfreich zu wissen, wie die Inhalte eines Ordners ausgelesen und angezeigt werden können.

Die Funktion zum Löschen eines Ordners und seiner Inhalte ist bereits eine gute Vorlage. Hier noch einmal ausschließlich der Code, der benötigt wird um die Inhalte eines Ordners auszulesen:

$openDir = opendir($dir); // Ordner "öffnen"
			
while (false !== ($file = readdir($openDir))) {
   if ($file != '.' && $file != '..') { // Nur tatsächliche Dateien/Ordner anzeigen
      if (is_dir($dir.$file)) {
         echo "Ordner: ".$file."<br />";
      } else {
         echo "Datei: ".$file."<br />";
      }
   }
}
			
closedir($openDir); // Ordner schließen

In diesem Fall wird uns der Code alle Inhalte eines Ordners auslesen und dabei jeweils den Typ (Datei/Ordner) sowie den Namen des Objekts ausgeben.

Mit entsprechender Modifikation des Skriptes könnten dann auch Unterordner ausgelesen werden.

Ordner erstellen

Das Erstellen eines Ordners gestaltet sich besonders einfach. Die entsprechenden Rechte vorausgesetzt, ist mkdir() hier die richtige Funktion.

Über den zweiten Parameter kann dabei auch der chmod, also der Rechtecode für alle Anwender, festgelegt werden. Beispiel gefällig?

mkdir('/pfad/neuerordner', 0700); // erstellt "neuerordner" mit CHMOD 0700

mkdir('/pfad/ordner1/ordner2', 0750, true); // erstellt "ordner1" und "ordner2" als sein Unterordner"

So hast Du direkt auch schon den dritten Parameter kennengelernt (2. Beispiel), der das rekursive Anlegen von Ordnern ermöglicht. So können verschachtelte Ordnerstrukturen kreiert werden.

Fazit zur Verarbeitung von Dateien in PHP

So, jetzt hast Du wieder eine ganze Menge dazu gelernt. Du weißt nun wie Du Dateien und Ordner in PHP verwalten, bearbeiten oder löschen kannst.

In dem kommenden Teil des PHP Tutorials beschäftigen wir uns mit Sessions und deren Realisierung in PHP.