首页 > PHP教程 > php开发知识文章

PHP实现日志文件的读取及解析的方法

这篇文章主要介绍了PHP实现日志文件的读取及解析的方法,结合实例形式分析了php读取文件的相关函数与使用注意事项,需要的朋友参考下

fopen函数

 打开文件或者 URL,将指定的名字资源绑定到一个流上。

fopen函数参数:流的访问类型

fopen函数参数流的访问类型

$log_file_name = 'D:/static/develop/public/Logs/' . date('Ym') . '/' . date('d') . '_error.log';
if (!file_exists($log_file_name)) {
return false;
}
$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、fopen的打开方式,r或者w。如果使用追加方式则是a标记。

2、fopen调用的时候,要判断是否成功打开文件。避免使用feof的时候进入死循环。因为这个函数,当传入进去不是指针,则这个函数永远会返回false。

feof函数:判断是否为文件结尾。如果是结尾,则返回true。不是结尾返回false。如果恰好传入非法的指针,那么永远不是文件结尾了,一直返回false。

feof()函数,当传入进去的不是指针类型的时候,使用如下判断会出现死循环:while(!feof($fp)){}

3、fread和fgets。读取文件一行一行读取,则使用fgets。不是按照行读取,则使用fread()读取。

如果没有更多的内容,则返回false。两种情况,如果里面的内容为空。也会返回false。当读取到文件的结尾的时候,这两个函数也是返回false。

4、使用追加方式(即a标记)打开文件,这种方式下,无法读取文件内容的,只能往里面写入文件。所以针对这个句柄进行fread()是会得到false的。

如果是仅仅读取文件的内容,就只用读的方式打开,如果是写入新内容进去,则用a的方式打开

以上就是本文PHP实现日志文件的读取及解析的方法的全部内容,希望本文所述对大家PHP程序设计有所帮助。

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。