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 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
一个简单的PHP投票程序源码
Mar 11 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
PHP动态生成javascript文件的2个例子
Apr 11 PHP
php操作xml入门之xml标签的属性分析
Jan 23 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
php简单实现数组分页的方法
Apr 30 PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
PHP+MySQL实现消息队列的方法分析
May 09 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中mt_rand()随机数函数用法
2014/11/24 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
扩展String功能方法
2006/09/22 Javascript
javascript优先加载笔记代码
2008/09/30 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
前端性能优化建议
2020/09/17 Javascript
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
Django分页功能的实现代码详解
2019/07/29 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
轻松掌握CSS3中的字体大小单位rem的使用方法
2016/05/24 HTML / CSS
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
早会主持词
2014/03/17 职场文书
局火灾防控工作方案
2014/05/25 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
小学运动会开幕词
2015/01/28 职场文书
初三毕业感言
2015/07/31 职场文书
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL