Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der C-ähnlichen Implementierungsfunktionen zum Lesen und Parsen von Dateien in PHP

Detaillierte Erläuterung der C-ähnlichen Implementierungsfunktionen zum Lesen und Parsen von Dateien in PHP

黄舟
黄舟Original
2017-09-02 09:11:581627Durchsuche

Das Beispiel in diesem Artikel beschreibt, wie PHP Dateilese- und Analysefunktionen ähnlich der C-Sprache implementiert. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:


$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/'.date('Ym').'/'.date('d').'_error.log';
//$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/201701/19_error.log';
if(!file_exists($log_file_name)) return;
$handle = fopen($log_file_name,'rb');
 if (FALSE === $handle) {
   exit("Failed to open stream to URL");
 }
//    $stream = fread($handle, $length);//从文件当前指针位置,往后读取n个字节长度
//重置文件指针的位置。指定指针的位置,指针位置修改后。读取文件,后面是从这个位置开始读取了
//fseek($handle,105);
//fgets表示每次读取文件的一行
$error_log_array = [];
while( ($line = fgets($handle) ) !==false){
   //每次读取一行
   //匹配出现[1],tp日志中用这种表示致命错误类型
   if(preg_match("/\[1\]/", $line)){
     $error_log_array[] = $line;
   }
}
fclose($handle);

Einige Punkte, die Sie beachten sollten:

1. Wenn Sie fwrite verwenden, achten Sie darauf, den Inhalt der Originaldatei nicht zu löschen. Der Schlüssel liegt darin, wie man fopen öffnet. r oder w.

Wenn die Append-Methode verwendet wird, handelt es sich um ein Tag.

2. Achten Sie beim Öffnen darauf, ob die Datei erfolgreich geöffnet wurde. Vermeiden Sie die Eingabe einer Endlosschleife, wenn Sie feof verwenden. Da diese Funktion bei der Übergabe kein Zeiger ist, gibt sie immer false zurück

Die ursprüngliche Absicht von feof besteht darin, festzustellen, ob es sich um das Ende der Datei handelt. Wenn es das Ende ist, wird true zurückgegeben. Gibt false zurück, wenn nicht das Ende. Wenn zufällig ein ungültiger Zeiger übergeben wird, ist dieser niemals das Ende der Datei und es wird immer „false“ zurückgegeben.

feof()-Funktion: Wenn die Eingabe kein Zeigertyp ist, tritt eine Endlosschleife auf, wenn die folgende Beurteilung verwendet wird


while(!feof($fp)){
}

3 . Fread und Fgets. Um eine Datei Zeile für Zeile zu lesen, verwenden Sie fgets. Anstatt zeilenweise zu lesen, verwenden Sie fread() zum Lesen.

Beachten Sie dieses Detail: Wenn kein Inhalt mehr vorhanden ist, wird false zurückgegeben, d. h. in zwei Fällen, wenn der Inhalt leer ist. wird auch false zurückgeben. Wenn das Ende der Datei gelesen wird, geben diese beiden Funktionen auch false zurück (kein Wunder, dass wir feof() verwenden, damit wir dieses Detail nicht entdecken, denn diese Funktion hat uns bereits dabei geholfen, das Ende der Datei zu bestimmen)

4 . Verwenden Sie die Append-Methode (d. h. eine Markierung), um die Datei zu öffnen. Bitte beachten Sie, dass bei dieser Methode der Dateiinhalt nicht gelesen und die Datei nur hineingeschrieben werden kann. Daher erhält fread() für dieses Handle den Wert false

Die Zusammenfassung lautet: Wenn Sie nur den Inhalt der Datei lesen, öffnen Sie sie einfach im Lesemodus. Wenn Sie neuen Inhalt schreiben möchten, verwenden Sie ein Öffnen

Jetzt verstehe ich, warum es notwendig ist, zwischen mehreren Modi zu unterscheiden. Ich dachte vorher, es sei nutzlos. Nun scheint es, dass die Art und Weise, wie Sie die Datei öffnen, bestimmt, was Sie mit der Datei tun können (neuen Inhalt hinzufügen oder Inhalt lesen).

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der C-ähnlichen Implementierungsfunktionen zum Lesen und Parsen von Dateien in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn