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 STRING 陷阱原理说明
Jul 24 PHP
PHP通过header实现文本文件下载的代码
Aug 08 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
Dec 14 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
php获取目标函数执行时间示例
Mar 04 PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 PHP
php中使用GD库做验证码
Mar 31 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
Jun 27 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
Jan 29 PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 PHP
Laravel Reponse响应客户端示例详解
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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
CodeIgniter框架验证码类库文件与用法示例
2017/03/18 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
一个基于jquery的图片切换效果
2010/07/06 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
应届本科生推荐信范文
2013/12/25 职场文书
导游实习生自荐书
2014/01/28 职场文书
模具设计与制造专业推荐信
2014/02/16 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
法人授权委托书
2014/09/16 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
史上最牛辞职信
2015/05/13 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python