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自动获取字符串编码函数mb_detect_encoding
May 31 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
分享最受欢迎的5款PHP框架
Nov 27 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
php抽象类用法实例分析
Jul 07 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
php封装的表单验证类完整实例
Oct 19 PHP
PHP新特性详解之命名空间、性状与生成器
Jul 18 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 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时间函数用法分析
2016/05/28 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
独特的python循环语句
2016/11/20 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python画图的函数用法以及技巧
2019/06/28 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
写出一个方法实现冒泡排序
2016/07/08 面试题
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
2015年植树节活动总结
2015/02/06 职场文书
获奖感言范文
2015/07/31 职场文书
月考总结与反思
2015/10/22 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript