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版(1)
Oct 09 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
Dec 11 PHP
一个PHP缓存类代码(附详细说明)
Jun 09 PHP
php网站被挂木马后的修复方法总结
Nov 06 PHP
php 删除cookie方法详解
Dec 01 PHP
php判断linux下程序问题实例
Jul 09 PHP
PHP简单实现断点续传下载的方法
Sep 25 PHP
php多线程实现方法及用法实例详解
Oct 26 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
Dec 07 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
laravel添加前台跳转成功页面示例
Oct 22 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
Oct 30 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文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
生日寿宴答谢词
2014/01/19 职场文书
淘宝客服自我总结鉴定
2014/01/25 职场文书
文员的职业生涯规划发展方向
2014/02/08 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python