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 session会话的安全性分析
Sep 08 PHP
php中配置文件操作 如config.php文件的读取修改等操作
Jul 07 PHP
php使用curl抓取qq空间的访客信息示例
Feb 28 PHP
利用谷歌 Translate API制作自己的翻译脚本
Jun 04 PHP
PHP的拦截器实例分析
Nov 03 PHP
php实现在多维数组中查找特定value的方法
Jul 29 PHP
你不知道的文件上传漏洞php代码分析
Sep 29 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
php is_writable判断文件是否可写实例代码
Oct 13 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 PHP
php利用array_search与array_column实现二维数组查找
Jul 08 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中的use关键字概述
2014/07/23 PHP
javascript 页面只自动刷新一次
2009/07/10 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
使用JavaScript破解web
2018/09/28 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
Python脚本实现集群检测和管理功能
2015/03/06 Python
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
python如何修改文件时间属性
2021/02/05 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
幼儿园小班植树节活动方案
2014/03/04 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
初中毕业生自我评价
2015/03/02 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
师范生见习自我总结
2015/06/23 职场文书
小学运动会前导词
2015/07/20 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js
Java 死锁解决方案
2022/05/11 Java/Android