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读取IMAP邮件
Oct 09 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
PHP的autoload机制的实现解析
Sep 15 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
PHP URL参数获取方式的四种例子
Feb 28 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 PHP
学习php设计模式 php实现门面模式(Facade)
Dec 07 PHP
php中mkdir()函数的权限问题分析
Sep 24 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
PHP实现负载均衡下的session共用功能
Apr 17 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 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中数据的批量导入(csv文件)
2006/10/09 PHP
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
深入php self与$this的详解
2013/06/08 PHP
codeigniter数据库操作函数汇总
2014/06/12 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
浅谈VUE中演示v-for为什么要加key
2020/01/16 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
[02:40]2014DOTA2 国际邀请赛中国区预选赛 四大豪门抵达华西村
2014/05/23 DOTA
解析Python编程中的包结构
2015/10/25 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
医大实习自我鉴定
2013/12/07 职场文书
工厂仓管员岗位职责
2014/01/01 职场文书
四好少年事迹材料
2014/01/12 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
电子商务求职信
2014/06/15 职场文书
中学教代会开幕词
2016/03/04 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
Django 如何实现文件上传下载
2021/04/08 Python