Heim > Artikel > Backend-Entwicklung > Richtige Art, Dateien mit PHP zu lesen
Erfahren Sie, wie Sie die verschiedenen Dateifunktionen von PHP verwenden. Sehen Sie sich grundlegende Dateifunktionen wie fopen, fclose und feof an; erfahren Sie mehr über Lesefunktionen wie fgets, fgetss und fscanf. Und Funktionen gefunden, die ganze Dateien in einer oder zwei Codezeilen verarbeiten.
Lassen Sie uns zählen, wie viele Möglichkeiten es gibt.
Eine der Freuden der Arbeit mit einer modernen Programmiersprache wie PHP ist die schiere Anzahl der verfügbaren Optionen. PHP gewinnt problemlos Perls Motto „Es gibt mehr als einen Weg, es zu tun“, insbesondere wenn es um die Dateiverwaltung geht. Aber welches ist bei so vielen verfügbaren Optionen das beste Werkzeug für diese Aufgabe? Die tatsächliche Antwort hängt natürlich von Ihren Zielen beim Parsen der Datei ab. Es lohnt sich also, sich die Zeit zu nehmen, alle Optionen zu erkunden.
Die traditionelle Fopen-Methode
Die Fopen-Methode ist ehemaligen C- und C++-Programmierern wahrscheinlich die bekannteste, denn wenn Sie diese Sprachen verwendet haben, sind sie mehr oder weniger Tools für Sie Habe es schon seit Jahren. Bei beiden Methoden wird die Datei mit der Standardmethode fopen (der Funktion zum Lesen von Daten) geöffnet und dann mit fclose geschlossen, wie in Listing 1 gezeigt.
Listing 1. Verwenden Sie fgets, um Dateien zu öffnen und zu lesen. line = fgets($file_handle);
echo $line;
}
fclose($file_handle);
Obwohl die meisten Programmierer mit langjähriger Programmiererfahrung mit diesen Funktionen vertraut sind, möchte ich diese Funktionen aufschlüsseln. Führen Sie effektiv die folgenden Schritte aus:
Öffnen Sie die Datei. $file_handle speichert einen Verweis auf die Datei selbst.
Überprüfen Sie, ob Sie das Ende der Datei erreicht haben.
Lesen Sie die Datei weiter, bis das Ende der Datei erreicht ist, und drucken Sie jede Zeile aus, während sie gelesen wird.
Schließen Sie die Datei.
Mit diesen Schritten im Hinterkopf werde ich jede hier verwendete Dateifunktion überprüfen.
fopen
Die Funktion fopen stellt eine Verbindung zu einer Datei her. Ich sage „Verbindung erstellen“, weil fopen nicht nur eine Datei öffnen kann, sondern auch eine URL öffnen kann: $fh = fopen("http://127.0.0.1/", "r");
This Eine Codezeile stellt eine Verbindung zur obigen Seite her und ermöglicht es Ihnen, sie wie eine lokale Datei zu lesen.
Hinweis: Das in fopen verwendete „r“ zeigt an, dass die Datei schreibgeschützt geöffnet ist. Da das Schreiben von Daten in eine Datei den Rahmen dieses Artikels sprengt, werde ich nicht alle anderen Optionen auflisten. Wenn Sie jedoch aus Gründen der plattformübergreifenden Kompatibilität aus einer Binärdatei lesen, sollte „r“ in „rb“ geändert werden. Ein Beispiel dafür sehen Sie später.
feof
Der Befehl feof erkennt, ob Sie das Ende der Datei erreicht haben und gibt True oder False zurück. Die Schleife in Listing 1 wird fortgesetzt, bis Sie das Ende der Datei „myfile“ erreichen. Hinweis: feof gibt auch „False“ zurück, wenn eine URL gelesen wird und der Socket eine Zeitüberschreitung erfährt, weil keine Daten mehr zum Lesen vorhanden sind.
fclose
Wenn wir zum Ende von Listing 1 springen, bewirkt fclose das Gegenteil von fopen: Es schließt die Verbindung zu einer Datei oder URL. Nach Ausführung dieser Funktion können Sie keine Informationen mehr aus der Datei oder dem Socket lesen.
fgets
Wenn Sie in Listing 1 ein paar Zeilen zurückspringen, gelangen Sie zum Kern der Dateiverwaltung: dem eigentlichen Lesen der Datei. Für das erste Beispiel ist die Funktion fgets die Waffe der Wahl. Es extrahiert eine Datenzeile aus der Datei und gibt sie als Zeichenfolge zurück. Anschließend können Sie die Daten ausdrucken oder anderweitig bearbeiten. Das Beispiel in Listing 1 druckt die gesamte Datei einwandfrei.
Wenn Sie die Größe der verarbeiteten Datenblöcke begrenzen möchten, können Sie fgets einen Parameter hinzufügen, um die maximale Zeilenlänge zu begrenzen. Verwenden Sie beispielsweise den folgenden Code, um die Zeilenlänge auf 80 Zeichen zu begrenzen: $string = fgets($file_handle, 81);
Erinnern Sie sich an „Hinweis: Die Beispiele für diese Funktion verwenden bereits leicht andere Parameter als fopen. Denken Sie beim Arbeiten mit Binärdaten immer daran, die Option b in fopen einzubeziehen. Wenn Sie diesen Punkt überspringen, verarbeiten Microsoft® Windows®-Systeme die Datei möglicherweise nicht korrekt, da sie neue Zeilen anders behandeln. Wenn Sie es mit einem Linux®-System (oder einer anderen UNIX®-Variante) zu tun haben, scheint dies keine Rolle zu spielen. Aber selbst wenn Sie nicht für Windows entwickeln, führt dies zu einer guten plattformübergreifenden Wartbarkeit und ist eine gute Vorgehensweise.
Der obige Code liest 4.096 Byte (4 KB) an Daten. Hinweis: Egal wie viele Bytes angegeben sind, fread liest nie mehr als 8.192 Bytes (8 KB).
Der folgende Code sollte die gesamte Datei in eine Zeichenfolge einlesen, vorausgesetzt, die Dateigröße beträgt 8 KB oder weniger. $fh = fopen("myfile", "rb");
$data = fread($fh, filesize("myfile"));
fclose($fh);
if file Ist die Länge größer als dieser Wert, kann der Rest nur über eine Schleife eingelesen werden.
fscanf
Zurück zur String-Verarbeitung folgt fscanf auch der traditionellen C-Dateibibliotheksfunktion. Falls Sie damit nicht vertraut sind: fscanf liest Felddaten aus einer Datei in Variablen. list ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");
Die von dieser Funktion verwendete Formatzeichenfolge wird an vielen Stellen beschrieben (z. B. in PHP). net), daher werde ich hier nicht näher darauf eingehen. Es genügt zu sagen, dass die Zeichenfolgenformatierung äußerst flexibel ist. Es ist zu beachten, dass alle Felder im Rückgabewert der Funktion platziert werden. (In C werden sie alle als Argumente übergeben.)
fgetss
Die fgetss-Funktion unterscheidet sich von herkömmlichen Dateifunktionen und vermittelt Ihnen ein besseres Verständnis der Leistungsfähigkeit von PHP. Diese Funktion funktioniert wie die Funktion fgets, entfernt jedoch alle gefundenen HTML- oder PHP-Tags, so dass nur einfacher Text übrig bleibt. Sehen Sie sich die unten gezeigte HTML-Datei an.
Listing 2. Beispiel-HTML-Datei ;