PHP实现类似于C语言的文件读取及解析功能


Posted in PHP onSeptember 01, 2017

本文实例讲述了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。

如果使用追加方式则是a标记。

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

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

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

while(!feof($fp)){
}

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

要注意这一点细节:如果没有更多的内容,则返回false,也就是两种情况,如果里面的内容为空。也会返回false。当读取到文件的结尾的时候,这两个函数也是返回false(难怪我们使用feof()使得我们不会发现这个细节,因为这个函数已经帮助我们判断文件结尾了)

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

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

现在明白,为什么要分多种模式进行区分了。以前觉得没有用。现在看来,打开的文件方式决定了,你能够针对文件做什么(添加新内容还是读取内容。)

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP制作静态网站的模板框架(二)
Oct 09 PHP
简单PHP上传图片、删除图片实现代码
May 12 PHP
php调用MySQL存储过程的方法集合(推荐)
Jul 03 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 PHP
php.ini中的request_order推荐设置
May 10 PHP
PHP中抽象类和抽象方法概念与用法分析
May 24 PHP
PHP实现统计在线人数功能示例
Oct 15 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
Oct 29 PHP
thinkphp5框架扩展redis类方法示例
May 06 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 PHP
PHP设计模式之工厂模式实例总结
Sep 01 #PHP
浅谈关于PHP解决图片无损压缩的问题
Sep 01 #PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 #PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 #PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 #PHP
php插件Xajax使用方法详解
Aug 31 #PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 #PHP
You might like
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
node中koa中间件机制详解
2017/08/22 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
Python实现提取文章摘要的方法
2015/04/21 Python
python中self原理实例分析
2015/04/30 Python
Python使用django框架实现多人在线匿名聊天的小程序
2017/11/29 Python
python实现C4.5决策树算法
2018/08/29 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
Python PIL图片添加字体的例子
2019/08/22 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
青年创业培训欢迎词
2014/01/10 职场文书
20年同学聚会感言
2014/02/03 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
岗位职责怎么写
2014/03/14 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python