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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
IIS下配置Php+Mysql+zend的图文教程
Dec 08 PHP
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
Jan 07 PHP
解析argc argv在php中的应用
Jun 24 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
Feb 03 PHP
PHP编写文件多服务器同步程序
Jul 02 PHP
老生常谈PHP位运算的用途
Mar 12 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
php事务回滚简单实现方法示例
Mar 28 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 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 Curl出现403错误的解决办法
2014/05/29 PHP
php中的ini配置原理详解
2014/10/14 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
javascript写的一个链表实现代码
2009/10/25 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
详解Python3中的 input() 函数
2020/03/18 Python
什么是Python变量作用域
2020/06/03 Python
Python包和模块的分发详细介绍
2020/06/19 Python
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
大学生村官任职感言
2014/01/09 职场文书
自主招生自荐信指南
2014/02/04 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
区域销售大会开幕词
2016/03/04 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python
Python实现制作销售数据可视化看板详解
2021/11/27 Python
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技