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语法(5)
Oct 09 PHP
PHP制作图型计数器的例子
Oct 09 PHP
Snoopy类使用小例子
Apr 15 PHP
PHP 递归效率分析
Nov 24 PHP
PHP5 的对象赋值机制介绍
Aug 02 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
php实现统计邮件大小的方法
Aug 06 PHP
PHP生成器简单实例
May 13 PHP
Symfony模板的快捷变量用法实例
Mar 17 PHP
php实现水印文字和缩略图的方法示例
Dec 29 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&mysql(五)
2006/10/09 PHP
初步介绍PHP扩展开发经验分享
2012/09/06 PHP
php实现图形显示Ip地址的代码及注释
2014/01/20 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
js实现翻页后保持checkbox选中状态的实现方法
2012/11/03 Javascript
7个JS基础知识总结
2014/03/05 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
python获取本地计算机名字的方法
2015/04/29 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
浅谈Python爬虫基本套路
2019/03/25 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
离婚协议书范文2015
2015/01/26 职场文书
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript
Pandas 数据编码的十种方法
2022/04/20 Python