Dateien & Ordner

file_put_contents()

In Text Datei schreiben

Mit PHP kann man etwas in eine Datei schreiben und diese Datei erzeugen, falls sie noch nicht vorhanden ist. Der Befehl dazu lautet

file_put_contents()

Die Parameter sind

  1. Der Name der Datei
  2. Der String, welcher in die Datei geschrieben werden soll
  3. FILE_APPEND fügt den Inhalt ans Ende der Datei.

Die Datei wird ohne Warnung überschrieben, wenn Sie keinen dritten Parameter hat.

Die Datei wird erzeugt, wenn sie nicht vorhanden ist.

Die Funktion liefert true, wenn der Vorgang erfolgreich war.

In diesem Beispiel wird durch den Silence Opertor @ am Anfang des Funktionsaufruf eine Fehlermeldung unterdrückt.

\n erzeugt Zeilenumbrüche.

   $inhalt = "Logbuch Eintrag: " .  date("d.m.Y / H:i") . "\n3\n44\n";
   //   die Datei wird ohne Warnung überschrieben mit file_put_contents()

   $datei = "datei.txt";
   if (@file_put_contents($datei, $inhalt) === false)
      exit("Fehler beim Schreiben");
   else
      echo "Daten in Datei geschrieben
"; $inhalt = "Letzte Zeile\n"; if (@file_put_contents($datei, $inhalt, FILE_APPEND) === false) exit("Fehler beim Anhängen"); else echo "Daten an Datei angehängt";

file_get_contents()

Textdatei auslesen

Man kann eine Textdatei auslesen und den Inhalt auf der PHP Seite ausgeben. Es kann auch eine CSV Datei sein. Der Befehl lautet

file_get_contents()

Der Parameter ist die auszulesende Datei.

Der ausgelesene Inhalt wird in einer Zeichenekette gespeichert.

nl2br()

Mit nl2br() werden die Zeilenumbrüche \n im Text in <br> umgewandelt.

    $datei = "datei.txt";
    $inhalt = @file_get_contents($datei);
    if ($inhalt === false)
        exit("Fehler beim Lesen");

    echo nl2br($inhalt);

file()

Textdatei auslesen, Zeilen in einem Array speichern

Mittels file() wird eine Textdatei ausgelesen und dabei Zeile für Zeile in den Feldern eines Feldes abgespeichert.

file()

Die Parameter sind

  1. Die auszulesende Datei
  2. FILE_IGNORE_NEW_LINES eine Anweisung die \n Zeilenumbrüche nicht mit zu schreiben.

Die Funktion liefert bei Erfolg true.

   $datei = "datei.txt";

   $feld = @file($datei, FILE_IGNORE_NEW_LINES);
   if (!$feld)
      exit("Fehler beim Lesen");
      
   for ($i = 0; $i < count($feld); $i++)
      echo $feld[$i]. "<br>";

CSV Datei auslesen

Eine CSV Datei ist eine Textdatei, mit einer datenbankähnlichen Struktur. Man kann Sie mit Excell öffnen und exportieren.

Zu diesem Beispiel

Im folgendem Beispiel wird auch wieder mit file() der Inhalt einer CSV Datei ausgelesen.

Die einzelne Zeile, welche einem Element von $feld_datei entspricht, wird wiederum in ein Feld $feld_zeile umgewandelt mit mb_split()
So kann man die einzelnen Elemente der Zeile umformatieren und dann ausgeben.

Die Formatierungen der einzelnen Felder.

4tes Element $feld_zeile[3] ist das Gehalt Anstatt eines Kommas wird ein Punkt gesetzt mit mb_ereg_replace() Dann wird es später mit floatval($gehalt) in eine Fließkommazahl umgwandelt

Der Index $feld_zeile[2] wird in eine Ganzzahl umgewandelt intval($feld_zeile[2])

Das Geburtsdatum wird mit date() formatiert.

 

    $datei = "datei.csv";
    $feld_datei = @file($datei, FILE_IGNORE_NEW_LINES);
    if (!$feld_datei)
        exit("Fehler beim Lesen");

    for ($i = 0; $i < count($feld_datei); $i++) {
        $feld_zeile = mb_split(";", $feld_datei[$i]);
        $gehalt = mb_ereg_replace(",", ".", $feld_zeile[3]);
        $geb = date("d.m.Y", strtotime($feld_zeile[4]));

        echo intval($feld_zeile[2]) . " : " . $feld_zeile[0] . " " . $feld_zeile[1] . " Gehalt: "
            . floatval($gehalt) . " €  geb: " . $geb  . "
"; }

stat()

Dateiinformationen abrufen

stat() liefert Informationen über Dateien. Es wird ein assoziatives Feld zurückgegeben, welches die Infos enthält.

Der erste Parameter von stat() ist der Pfad zur Datei.

Über folgende Schlüssel kann man Inforamtionen abrufen.

$stat = stat($datei);

   $datei = "datei.txt";
   $info = stat($datei);

   echo "Name: $datei <br>";
   echo "Größe: " . $info["size"] . " Byte <br>";
   echo "Letzter Zugriff: " . date("d.m.Y H:i:s", $info["atime"]) . " <br>";
   echo "Letzte Änderung: " . date("d.m.Y H:i:s", $info["mtime"]) . " <br>";

Verzeichnisse einlesen

siehe auch diesen php-kurs Tipp

Mit PHP kann man Verzeichnisse auslesen und Informationen über die darin liegenden Dateien und Ordner abrufen.

Zuerst wird ein Pfad zum Verzeichnis erstellt, siehe dazu auch Verzeichnispfad.

opendir() öffnet das Verzeichnis über einen Zugriffshandle. Ein Pfad zum Verzeichnis wird erwartet

readdir()welches über den Zugriffshandle aufgerufen wird, übergibt den Namen der Datei und setzt den Zeiger auf die nächste Datei. In einer while Schleife wird dieser Vorgang wiederholt, bis keine Datei mehr vorhanden ist. Eine Sortierung findet nicht statt.

    $verzeichnis = '.';
    $handle = opendir($verzeichnis);
    while ($name = readdir($handle)) {
        if (is_file($name))
            echo $name . '<br>';
    }

Funktionen für Dateiinformationen

siehe auch stat()

Es gibt 5 Methoden, die Informationen über eine Datei oder ein Verzeichnis liefern. Alle geben einen Boolschen Wert zurück. Alle erwarten als erste Argument einen Handle der mit opendir() und readdir() erzeugt wird.

is_file()

wenn es eine Datei ist
is_dir()

true wenn es ein Ordner ist.
is_readable()

true wenn die Datei Leserechte besitzt
is_writable()

true wenn die Datei Schreibrechte besitzt

Das folgende Beispiel, ist extra einfach gehalten. Eine Tabelle wäre übersichtlicher.

    $verzeichnis = '.';
    $handle = opendir($verzeichnis);
    while ($name = readdir($handle)) {
        echo $name . " ";

        if (is_file($name))
            echo " / Datei ";
        if (is_dir($name))
            echo " / Verzeichnis ";
        if (is_readable($name))
            echo " / Schreibrechte /";
        if (is_writeable($name))
            echo " / Leserechte / ";

        $info = stat($name);

        echo  $info["size"] . " Byte / ";
        echo "letzte Änderung: " . date("d,m,Y h:i", $info["mtime"]);

        echo "<br>";
    }

Verzeichnispfad absolut

Pfade zu Dateien oder Verzeichnissen werden öfter gebraucht. (include require opendir readir) Man kann absolute Adresse definieren

Lokal

$verzeichnis = "C:/wamp64/www/phpKurs/12_dateien/aufgaben";

WWW

$verzeichnis = "https://www.on-design.de/tutor/php/datei.php";

Verzeichnispfad relativ

getcwd()

Mittels der Funktion getcwd(), was soviel bedeutet wie get current working directory wird ein Pfad auf das aktuelle Verzeichnis gesetzt.

Dann kann man von da aus auf das eigene Verzeichnis mit "." oder auf das übergeordnete Verzeichnis mit ".." verweisen. Das Beispiel muss an einigen Stellen auf die eigene Ordnerstruktur angepasst werden.

getcwd();
$verzeichnis = "."; //eigenes Verzeichnis
$verzeichnis = ".."; // übergeordnetes Verzeichnis  
  

Hier nun ein paar Beispiele:

    getcwd();
    // ein Verweis auf das eigene Verzeichnis
    $handle = opendir(".");
    while ($name = readdir($handle)) {
        echo $name . " ";
    }
    echo " <br>";
    // ein Verweis auf das übergeordnete Verzeichns
    $handle = opendir("..");
    while ($name = readdir($handle)) {
        echo $name . " ";
    }
    echo " <br>";
    //ein Verweis auf einen Ordner innerhalb des aktuellen Verzeichnis
    $handle = opendir("01_variablen");
    while ($name = readdir($handle)) {
        echo $name . " ";
    }
    echo " <br>";
	//ein Verweis auf einen Ordner kunden, der sich im übergeordneten Verzeichnis befindet
    $handle = opendir("../kunden");
    while ($name = readdir($handle)) {
        echo $name . " ";
    }
    echo " <br>";
   
	//ein Verweis zwei Stufen höher
    $handle = opendir("../..");
    while ($name = readdir($handle)) {
        echo $name . " ";
    }
    echo " <br>";    

Verzeichnis mit realpath

Ein relativer Pfad ist in PHP nicht so einfach zu realisieren wie in HTML.

Siehe dazu Ulrischa.de relative Pfade in PHP

realpath()

Relative Pfade werden mit realpath() in absolute Pfade umgewandelt

Das folgende Beispiel geht in den übergeordneten Ordner und von da aus in den Ordner datum

$verzeichnis = realpath(dirname(__FILE__)) . '/../datum/';

Unlogischerweise muss ein Backslash vor dem relativen Pfad stehen

Man kann als Argument von dirname __FILE__ oder __DIR__ zuweisen, je nachdem, ob man auf eine Datei oder ein Verzeichnis verweisen möchte.

XML

fahrzeug.xml

fahrzeug.php / download

XML ist ein weitverbreitetes unabhängiges Format zum universellen Austausch von Daten. Der Aufbau von XML Daten ähnelt der Syntax von HTML.

Die PHP Erweiterung SimpleXML bietet in PHP die Möglichkeit Daten einzulesen, darzustellen und zu bearbeiten.

Aufbau einer XML Datei

siehe fahrzeug.xml im Browser

Die erste Zeile ist im Browser nicht sichtbar, sie kennzeichnet den Inhalt als XML

<?xml version="1.0"?>

Ähnlich wie HTML gibt es hier Anfangstags und Endtags. In XML vergibt man die Namen der Tags selber. Hier dürfen keine Sonderzeichen, Umlaute und Leerzeichen notiert werden. Man kann wie in HTML in den Anfangstags Attribute vergeben. Die Tags können verschachtelt sein. Dadurch entsteht eine hierachische Struktur von Objekteigenschaften:
fahrzeug->motordaten->leistung
Auf der obersten Ebene darf es nur ein Element geben, hier <fahrzeug>

Das Objekt fahrzeug hat die Eigenschaften: marke, typ, motordaten, gewicht

Das Objekt motordaten hat die Eigenschaften: leistung, hubraum

Wenn man die XML Datei im Browser aufruft, wird die Baustruktur angezeigt.Man kann diese mit CSS gestalten.

Verarbeitung in PHP

Die Funktion simplexml_load_file() dient zum Einlesen der gesamten XML-Datei in ein Objekt der Klasse SimpleXMLElement, hier $fahrzeug
Wenn die Aktion nicht erfolgreich war, wird false zurück gegeben. Das sollte mit einem strengen Vergleichsoperator überprüft werden.

Mit der Objektnotation greift man auf die Eigenschaften zu:

fahrzeug->motordaten->leistung

Ein Attribut wird bei der Umwandlung in ein SimpleXMLObjekt als Element eines assosiativen Arrays angesehen. Folgendermaßen greift man darauf zu:

fahrzeug->marke["land"]

Speicherung von XML Daten

Um die Daten in einer XML-Datei zu speichern nutzt man die Funktion file_put_contents() und die Objektmethode asXML()

Die Funktion file_put_contents() erwartet als ersten Parameter den Pfad zur XML-Datei und als zweiten Parameter das SimpleXML-Objekt mit der Methode asXML()

file_put_contents("fahrzeug.xml", $fahrzeug->asXML())

Wenn man eine externe XML-Datei ändern will, sollte man diese in ein SimplXML Objekt laden. Dann kann man über die Objektnotation Änderungen vornehmen und anschließend speichern.

            $fahrzeug = simplexml_load_file("fahrzeug.xml");
            //Überprüfung ob Ladevorgang geklappt hat
            $fahrzeug->gewicht = "3400 kg";
            file_put_contents("fahrzeug.xml", $fahrzeug->asXML());
  

Webdesign / PHP / mySQL / Dreamweaver MX Tipps
Copyright © Michael Albers
www.pastorpixel.de