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 相关文章推荐
第六节 访问属性和方法 [6]
Oct 09 PHP
php MySQL与分页效率
Jun 04 PHP
二招解决php乱码问题
Mar 25 PHP
有道搜索和IP138的IP的API接口(PHP应用)
Nov 29 PHP
thinkphp浏览历史功能实现方法
Oct 29 PHP
PHP截取指定图片大小的方法
Dec 10 PHP
php返回相对时间(如:20分钟前,3天前)的方法
Apr 14 PHP
php实现图片缩略图的方法
Mar 29 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
php写入文件不覆盖的实例讲解
Sep 17 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 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
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
移动端效果之IndexList详解
2017/10/20 Javascript
vue二级路由设置方法
2018/02/09 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
Flask-Mail用法实例分析
2018/07/21 Python
基于Django实现日志记录报错信息
2019/12/17 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
2021/01/09 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
COS美国官网:知名服装品牌
2019/04/08 全球购物
linux面试题参考答案(4)
2014/09/21 面试题
UNIX命令速查表
2012/03/10 面试题
生物技术专业研究生自荐信
2013/09/22 职场文书
办公室助理岗位职责
2013/12/25 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python