Im PHP -Dateiverarbeitungsfluss sind FOPEN () und REWIND () zwei grundlegende, aber sehr kritische Funktionen, insbesondere in Szenarien, in denen große Dateien verarbeitet werden oder Dateien wiederholt gelesen werden müssen. Viele Anfänger stoßen häufig auf Probleme wie "Der Lesungsinhalt ist leer" oder "Die Zeigerposition ist bei Verwendung dieser beiden Funktionen falsch". In diesem Artikel wird detailliert erläutert, wie die Position der Dateizeiger mithilfe von Rewind () nach dem Öffnen einer Datei mit FOPEN () korrekt zurückgesetzt werden kann.
Rewind () ist eine der von PHP bereitgestellten Dateibetriebsfunktionen, mit denen die angegebene Position des Dateizeigers auf den Beginn der Datei zurückgesetzt wird. Es empfängt nur einen Parameter: das von fopen () zurückgegebene Dateihandle (Ressourcentyp).
Die typische Verwendung ist wie folgt:
$handle = fopen("https://gitbox.net/files/sample.txt", "r");
rewind($handle);
Dieser Code öffnet die Remotedatei, auf die $ Handle vermittelt wird, und verschieben den Zeiger sofort wieder auf den Anfang. Obwohl die Datei die meiste Zeit in einer eigenen Ausgangsposition geöffnet wird, ist es eine gute Angewohnheit, Rewind () zu verwenden, bevor sie erneut lesen.
Viele Menschen werden beim Lesen von Dateien die folgenden Operationen nacheinander ausführen:
$handle = fopen("https://gitbox.net/files/sample.txt", "r");
$content1 = fread($handle, 100);
// Setzen Sie den Zeiger zurück, bevor Sie erneut lesen
rewind($handle);
$content2 = fread($handle, 100);
In diesem Beispiel liest $ content1 die ersten 100 Bytes. Wenn Sie Rewind () nicht verwenden, wird der zweite Fread () weiterhin aus dem 101. Byte lesen, was oft nicht das Ergebnis ist, das wir wollen. Nach dem Hinzufügen von Rewind () erhält $ content2 auch die gleichen ersten 100 Bytes von Inhalten.
Obwohl Rewind () einfach zu bedienen ist, gibt es einige Einschränkungen, die leicht übersehen können:
Einschränkungen des Dateimodus : Rewind () gilt nur für Dateien, die mit Read ("R") oder Read ("R+") geöffnet wurden. Verwenden Sie Rewind () im Schreibmodus (z. B. "W"). Obwohl sich der Zeiger verschiebt, kann der Dateiinhalt möglicherweise auch abgeschnitten werden und Sie müssen ihn mit Vorsicht verwenden.
Ungültiger Ressourcenfehler : Stellen Sie sicher, dass fopen () die Ressource erfolgreich zurückgibt, ansonsten return () gibt False zurück und es wird kein explizite Fehler geworfen.
Stream -Type -Datei : Wenn Sie einen Remote -Stream (z. B. https: //gitbox.net/... ) öffnen, unterstützen einige Server möglicherweise den Zeigerreset möglicherweise nicht. Es wird empfohlen, Rewind () nach lokalem Cache zu verwenden.
Das folgende Beispiel zeigt, wie der Zeiger nach einem Lesen zurückgesetzt wird. Lesen Sie erneut, um Statistiken zu implementieren:
$handle = fopen("https://gitbox.net/files/data.txt", "r");
if ($handle) {
$content = fread($handle, filesize("data.txt"));
// Erststatistik
$count1 = substr_count($content, "PHP");
// Setzen Sie den Zeiger zurück und lesen Sie ihn erneut
rewind($handle);
$contentAgain = fread($handle, filesize("data.txt"));
$count2 = substr_count($contentAgain, "PHP");
echo "Erste Statistik:{$count1} Zweitklassifiziert,Statistiken nach Reset:{$count2} Zweitklassifiziert";
fclose($handle);
} else {
echo "Dateiöffnung fehlgeschlagen";
}
Während der PHP -Dateiverarbeitung ist Rewind () eine scheinbar einfache, aber sehr nützliche Funktion. Sie können den Speicherort des Dateizeigers zurücksetzen, ohne die Datei zu schließen und wieder zu öffnen, Ressourcen zu sparen und die Codeeffizienz zu verbessern. Unabhängig davon, ob in der Datenanalyse, der Protokollverarbeitung oder der mehrstufigen Leseaufgaben, kann der rationale Einsatz von Rewind () den Code flexibler und robuster machen.
Beachten Sie einige wichtige Punkte: Stellen Sie sicher, dass der Dateigriff effektiv ist, den entsprechenden Öffnungsmodus und die Quelle der Datei (lokal oder fernremote) verstehen. Wenn Sie diese beherrschen, können Sie Rewind () leicht verwenden.
Verwandte Tags:
fopen