この記事の例では、PHP が C 言語と同様のファイル読み取りおよび解析関数を実装する方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
$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);
注意すべき点:
1. fwriteを使用する場合は、元のファイルの内容を消去しないように注意してください。 。鍵となるのはfopenを開く方法です。 rかw。
appendメソッドを使用する場合はマークです。
2. ファイルを開くときは、ファイルが正常に開かれたかどうかに注意してください。 feof を使用する場合は、無限ループに入らないようにしてください。この関数がポインターではない場合、この関数は常に false を返します。feof の本来の目的は、ファイルの終わりであるかどうかを判断することです。最後であればtrueを返します。最後でない場合は false を返します。不正なポインタが渡された場合、それがファイルの終わりになることはなく、常に false が返されます。
feof()関数は、入力がポインタ型でない場合、
while(!feof($fp)){ }
この詳細に注意してください。これ以上コンテンツがない場合は false が返されます。つまり、内部のコンテンツが空の場合は 2 つの場合があります。 falseも返します。ファイルの終わりが読み取られると、これら 2 つの関数も false を返します (この詳細が分からないように feof() を使用するのも不思議ではありません。この関数はすでにファイルの終わりを判断するのに役立っているからです)
4.追加メソッド (つまり、マーク) を使用してファイルを開きます。この方法では、ファイルの内容を読み取ることはできず、ファイルに書き込むことしかできないことに注意してください。したがって、このハンドルの fread() は false になります
要約すると、ファイルの内容を読み取るだけの場合は、読み取りモードで開き、新しい内容を書き込みたい場合は、a モードで開きます
。複数のモードを区別する必要がある理由がわかりました。以前は駄目だと思っていました。ファイルを開く方法によって、そのファイルで何ができるか (新しいコンテンツの追加またはコンテンツの読み取り) が決まるようです。
以上がPHP の C ライクなファイル読み取りおよび解析実装関数の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。