Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Schreiben in Dateien und Lesen von Dateien mit PHP

by
Read Time:9 minsLanguages:

German (Deutsch) translation by Ines Willenbrock (you can also view the original English article)

In diesem Tutorial lernen Sie einige wichtige Funktionen in PHP, die für alle Ihre grundlegenden Lese- und Schreibanforderungen ausreichen. Sie lernen, wie Sie eine Datei lesen, in eine Datei schreiben, in eine Textdatei schreiben und überprüfen, ob eine Datei vorhanden ist.

Glücklicherweise bietet PHP viele Funktionen zum Lesen und Schreiben von Daten in Dateien. In diesem Tutorial zeige ich Ihnen die einfachsten Möglichkeiten, Daten aus einer lokalen oder Remote-Datei zu lesen und wie Sie Flags verwenden, um genau so in Dateien zu schreiben, wie wir es möchten.

Überprüfen, ob eine Datei vorhanden ist

Ihr allererster Schritt, wenn Sie versuchen, Daten aus einer Datei zu lesen oder etwas in sie zu schreiben, sollte sein, zu überprüfen, ob die Datei bereits vorhanden ist. Der Versuch, Daten aus einer Datei zu lesen, die nicht existiert, führt zu einer Warnung von PHP und wird wahrscheinlich Ihren Code zum Absturz bringen.

Der einfachste Weg, um zu überprüfen, ob eine Datei existiert, ist die Verwendung der PHP file_exists($filename) Funktion. Es wird true zurückgegeben, wenn eine Datei oder ein Verzeichnis mit dem angegebenen $filename vorhanden ist und andernfalls false. Das mag offensichtlich sein, aber ich möchte darauf hinweisen, dass $filename nicht nur der Name einer Datei sein muss. Es kann auch ein absoluter oder relativer Pfad sein. Zum Beispiel könnten wir prime_numbers.txt oder science/project/periodic_table.txt verwenden.

Es ist auch wichtig, sich daran zu erinnern, dass diese Funktion auch false für Dateien zurückgibt, auf die aufgrund von Einschränkungen im abgesicherten Modus (safe mode) nicht zugegriffen werden kann.

Eine weitere Funktion, mit der Sie das Vorhandensein einer Datei überprüfen können, ist is_file(). Im Gegensatz zu file_exists() gibt diese Funktion true nur zurück, wenn der angegebene Pfad auf eine Datei und nicht auf ein Verzeichnis verweist.

Sicherstellen, dass die Datei tatsächlich vorhanden ist

Wenn der Code, den Sie schreiben, viele Dateioperationen für eine bestimmte Datei ausführt, erhalten Sie möglicherweise falsche Ergebnisse mit den oben genannten Funktionen. Dies liegt daran, dass die Ergebnisse der Ausführung von file_exists() und is_file() zwischengespeichert werden, um die Leistung zu verbessern. PHP speichert auch die Werte zwischen, die von anderen Dateisystemfunktionen wie filesize(), filemtime() usw. zurückgegeben werden.

Sie können clearstatcache() aufrufen, um sicherzustellen, dass alle Informationen, auf die Sie für eine Datei zugreifen, auf dem neuesten Stand sind.

Dies ist in der Regel nur dann ein Problem, wenn in einem einzigen Skript mehrfach auf dieselbe Datei zugegriffen wird, um ihren Status zu erfahren. Außerdem werden die zwischengespeicherten Daten gelöscht, wenn Sie die Datei im Skript mit der Funktion unlink() löschen. Dies bedeutet im Grunde, dass Sie wahrscheinlich keine Caching-Probleme haben werden, aber es ist immer noch gut zu wissen, dass Sie den Cache löschen können, falls die Informationen veraltet sind oder wenn Sie unerwartete Ergebnisse erhalten, wenn Sie versuchen, auf Informationen über eine Datei zuzugreifen.

Lesen von Daten aus einer Datei in PHP

Eine der einfachsten Möglichkeiten, Daten aus einer Datei in PHP zu lesen, ist mit Hilfe der Funktion file_get_contents($filename, $use_include_path, $context, $offset, $maxlen). Es liest einfach die gesamte Datei und gibt sie Ihnen in Form einer Zeichenfolge. Alle Parameter mit Ausnahme des ersten sind optional.

Der zweite Parameter akzeptiert einen booleschen Wert, um zu bestimmen, ob er nach einer Datei an dem durch den Include-Pfad angegebenen Speicherort suchen soll, der mit der Funktion set_include_path() festgelegt werden kann.

Sie können den dritten Parameter verwenden, um eine Reihe von Optionen anzugeben, um den Zugriff auf die Dateien zu verfeinern. Sie können damit Header-Werte wie Cookies und Host sowie die HTTP-Methode angeben.

Der Parameter $offset bestimmt den Punkt, an dem das Lesen der Originaldatei beginnt. Wenn Sie einen negativen Wert bereitstellen, wird vom Ende an gezählt. Die Unterstützung für negative Offsets wurde erst in PHP 7.1.0 hinzugefügt. Es ist erwähnenswert, dass Offset nur mit lokalen Dateien funktioniert und nicht für Remote-Dateien unterstützt wird.

Die Funktion file_get_contents() liest standardmäßig die gesamte Datei auf einmal. Sie können dieses Verhalten ändern, indem Sie einen Wert für den Parameter $maxlen. Die Länge der zu lesenden Zeichen wird aus dem Offset-Wert gezählt.

Diese Funktion gibt false zurück, wenn sie keine Daten aus der angegebenen Datei lesen konnte. Es kann jedoch auch Werte zurückgeben, die als false ausgewertet werden, also stellen Sie sicher, dass Sie überprüfen, ob es tatsächlich false mit dem ===-Operator zurückgegeben hat.

Sie können diese Funktion verwenden, um Entfernte Dateien zu öffnen, aber das wäre nur möglich, wenn der Wert der Option allow-url-fopen in php.ini true oder 1 ist.

Schreiben von Daten in eine Datei in PHP

Eine der einfachsten Möglichkeiten, Daten in eine Datei in PHP zu schreiben, ist mit Hilfe der Funktion file_put_contents($filename, $data, $flags, $context).

Der Parameter $filename bestimmt die Datei, in die die Daten geschrieben werden. Der zweite Parameter sind die Daten, die Sie in die Datei schreiben möchten. Meistens wird es eine Zeichenfolge sein, aber es könnte auch ein Array oder eine Stream-Ressource sein.

Denken Sie daran, dass PHP automatisch eine Datei mit dem angegebenen Namen für Sie erstellt, wenn sie noch nicht vorhanden ist. Es werden jedoch keine Verzeichnisse für Sie erstellt. Dies bedeutet, dass Sie eine Datei mit dem Namen On the Origin of Species [Charles Darwin].txt ohne Fehler speichern können. Das Setzen $filename auf Biology/Evolution/On the Origin of Species [Charles Darwin].txt, wenn Biology/Evolution/ nicht bereits existiert, führt jedoch zu einem Fehler.

Der Parameter $flags bestimmt, wie der Inhalt in eine Datei geschrieben wird. Es kann einen oder alle der folgenden drei Werte aufweisen:

  • FILE_USE_INCLUDE_PATH – Hiermit wird PHP angewiesen, im Include-Verzeichnis nach dem angegebenen Dateinamen zu suchen.
  • FILE_APPEND – Hiermit wird PHP angewiesen, die Daten, die Sie an die Funktion übergeben haben, an die vorhandenen Daten in der Datei anzuhängen. Es könnte nützlich sein, wenn Sie Daten in einer Datei wie einem Protokoll oder einem persönlichen Tagebuch speichern. Wenn Sie neue Daten wie Temperatur oder Ereignisse aufzeichnen, die Ihnen heute passiert sind, wird etwas, das Sie gestern aufgezeichnet haben, nicht überschrieben.
  • LOCK_EX – Dies wird PHP anweisen, eine Sperre für die Datei zu erhalten, bevor Inhalte in sie geschrieben werden. Es kann verhindern, dass unerwartete Dinge passieren, wenn zwei verschiedene Skripte Daten in dieselbe Datei lesen oder schreiben. Mit diesem speziellen Wert erhalten Sie eine exklusive Sperre für die Datei. Mehr über diese Sperren erfahren Sie in der PHP-Dokumentation der flock()-Funktion.

Diese Funktion gibt die Anzahl der Bytes zurück, die bei Erfolg in die Datei geschrieben wurden, und false bei Fehler. Sie müssen jedoch weiterhin den strikten Gleichheitsoperator verwenden, um zu überprüfen, ob das Schreiben von Inhalten in die Datei erfolgreich war. Das liegt daran, dass Code, der 0 Byte in die Datei schreibt, immer noch als false ausgewertet wird.

Lesen und Schreiben von Daten in Dateien

Sie können auf die Project Gutenberg-Website gehen und versuchen, Dateien mit der Funktion file_get_contents() herunterzuladen. Sobald Sie die Daten in einer Zeichenfolge haben, können Sie sie auch einfach in einer lokalen Datei speichern, indem Sie die Funktion file_put_contents() verwenden. Das folgende Beispiel verdeutlicht dies:

Sie können Webseiten oder Inhalte von Websites wie Wikipedia auf ähnliche Weise speichern. Wenn Sie den HTML-Code verstehen oder den HTML-Inhalt analysieren müssen, den Sie gerade lokal gespeichert haben, können Sie einem Tutorial wie Parsing HTML With PHP Using DiDOM folgen, das Ihnen hilft, automatisch Links, Bilddateien oder andere solche Informationen von der Webseite zu erhalten.

Kommen wir jetzt zurück zu den lokalen Dateien. Stellen Sie sich eine Situation vor, in der Sie eine Reihe von Textdateien haben und ihren Inhalt analysieren möchten, um Dinge wie die häufigsten Wörter darin zu sehen. Dies könnte leicht mit einer Reihe von integrierten PHP-Funktionen erreicht werden.

Wir haben den gesamten Text in Kleinbuchstaben konvertiert und sind davon ausgegangen, dass jedes einzelne Wort an Leerzeichen bricht. Der Text wird dann mit explode() in ein Array konvertiert, um die Analyse einzelner Wörter zu erleichtern. Überraschenderweise wird das Wort "Evolution" nicht einmal in dem gesamten Buch verwendet, das der Evolutionstheorie ihren Ursprung gab.

Dies war nur ein Beispiel für die automatische Analyse einer großen Textmenge. Sie könnten etwas Ähnliches mit jeder Art von Text tun, der in einer Datei gespeichert ist.

Protokollieren von Daten mit FILE_APPEND

Ein weiteres nützliches Beispiel wäre das Protokollieren von Informationen über kleine Zeiträume. Es könnte Ihre Trainingsroutine, Wetterdaten oder ein Bienenvolk sein, das Sie beobachten. Sobald Sie die Daten in einer Zeichenfolge haben, können Sie sie einfach in einer Datei speichern und mit dem FILE_APPEND-Flag mit file_put_contents() an vorhandene Daten anhängen.

Ähnlicher Code könnte verwendet werden, um beispielsweise jeden Tag den Artikel des Tages von Wikipedia in einer Datei zu speichern oder Nachrichtenartikel und Schlagzeilen im Laufe von Wochen oder Monaten zu verfolgen. Alles, was Sie tun müssen, ist Code zu schreiben, um die Daten zu scrapen und sie dann mit etwas Ähnlichem wie dem obigen Codeausschnitt zu speichern. Ein Tutorial wie Parsing HTML mit PHP Mit DiDOM kann Ihnen mit dem Scraping-Teil helfen.

Anstatt den Text im einfachen Format zu schreiben, können Sie ihn in HTML umbrechen, um das Lesen in Browsern zu erleichtern. Die Möglichkeiten sind endlos.

Abschließende Gedanken

Es gibt viele andere Möglichkeiten, Daten in Php zu lesen und in Dateien zu schreiben. file_get_contents() und file_put_contents() werden jedoch fast alle Ihre Grundbedürfnisse erfüllen, ohne unnötige Komplikationen hinzuzufügen.

Das einzige Mal, dass Sie ein Problem mit file_get_contents() haben, ist, wenn die Datei, die Sie lesen, sehr groß ist - z. B. 2 GB oder mehr. Dies liegt daran, dass file_get_contents() die gesamte Datei auf einmal in den Speicher lädt und es eine gute Chance gibt, dass bei so großen Dateien der Speicher knapp wird. In diesem Fall müssen Sie sich auf Funktionen wie fgets() und fread() verlassen, um einen kleinen Teil der Datei auf einmal zu lesen.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.