读了NGINX的access日志,bnb_manage_access.log(31M) 和  bnb_wechat_access.log(50M)

附上代码:

<?php
/**
* User: szliugx@gmail.com
* Date: 2018/8/3
* Time: 下午3:34
*/ class FileIterator implements Iterator
{
// 打开的文件句柄
private $fp; // 打开的文件行数
private $lineNumber; // 行内容
private $lineContent; public function __construct($file)
{
$fp = fopen($file, "r");
if (!$fp) {
throw new Exception("「{$file}」不能打开");
}
$this->fp = $fp;
} public function current()
{
//echo "current — 返回当前元素 \n";
$this->lineContent = fgets($this->fp);
return rtrim($this->lineContent, "\n");
} public function next()
{
//echo "next — 向前移动到下一个元素 \n";
$this->lineNumber++;
} public function key()
{
//echo "key — 返回当前元素的键 \n";
return $this->lineNumber;
} public function valid()
{
//echo "valid — 检查当前位置是否有效 \n";
return feof($this->fp) ? false : true;
} public function rewind()
{
//echo "rewind — 返回到迭代器的第一个元素 \n";
$this->lineNumber = 1;
} } $file = "/Users/liugx/work/php/laravel_wechat_demo/bnb_wechat_access.log"; try {
$fileIterator = new FileIterator($file);
} catch (Exception $e) {
echo "出错啦:" . $e->getMessage();
exit;
} $flag = 0;
$lineNumber = 0;
$startTime = microtime(true);
foreach ($fileIterator as $k => $v) {
if (strpos($v, "测试查找") !== false) {
echo sprintf("找到啦:%d行出现了内容「%s」\n", $k, $v);
$flag = 1;
}
$lineNumber = $k;
}
$endTime = microtime(true); if ($flag == 0) {
echo "遍历了整个文件也没有找到\n";
} $time = bcsub($endTime, $startTime, 3) * 1000;
echo sprintf("查找 %s 文件耗时:%s ms,共 %d 行\n", $file, $time, $lineNumber);

PHP 通过实现 Iterator(迭代器)接口来读取大文件文本的更多相关文章

  1. PHP 与Python 读取大文件的区别

    php读取大文件的方法   <?php function readFile($file) { # 打开文件 $handle = fopen($file, 'rb'); while (feof($ ...

  2. 强悍的Python读取大文件的解决方案

    这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件. 1. read() 接口的问题 f =open(filename, ...

  3. pandas读取大文件时memoryerror的解决办法

    再用pd.read_csv读取大文件时,如果文件太大,会出现memoryerror的问题. 解决办法一:pd.read_csv的参数中有一个chunksize参数,为其赋值后,返回一个可迭代对象Tex ...

  4. PHP如何快速读取大文件

    在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的 ...

  5. java读取大文件

    1  多线程 2  java内存映射读取大文件

  6. php使用file函数、fseek函数读取大文件效率分析

    php读取大文件可以使用file函数和fseek函数,但是二者之间效率可能存在差异,本文章向大家介绍php file函数与fseek函数实现大文件读取效率对比分析,需要的朋友可以参考一下. 1. 直接 ...

  7. Java多线程读取大文件

    前言 今天是五一假期第一天,按理应该是快乐玩耍的日子,但是作为一个北漂到京师的开发人员,实在难想出去那玩耍.好玩的地方比较远,近处又感觉没意思.于是乎,闲着写篇文章,总结下昨天写的程序吧. 昨天下午朋 ...

  8. PHP读取大文件的几种方法介绍

    读取大文件一直是一个头痛的问题,我们像使用php开发读取小文件可以直接使用各种函数实现,但一到大文章就会发现常用的方法是无法正常使用或时间太长太卡了,下面我们就一起来看看关于php读取大文件问题解决办 ...

  9. Java 读取大文件方法

    需求:实际开发中读取文本文件的需求还是很多,如读取两个系统之间FTP发送文件,读取后保存到数据库中或日志文件的数据库中保存等. 为了测试首先利用数据库SQL生成大数据文件. 规则是 编号|姓名|手机号 ...

随机推荐

  1. Tomcat启动报错:StandardServer.await: create[8005] java.net.BindException: Cannot assign requested address

    Tomcat启动报错:StandardServer.await: create[8005] java.net.BindException: Cannot assign requested addres ...

  2. 如何把js的循环写成异步的

    针对这里的问题:深入理解node.js异步编程:基础篇https://cnodejs.org/topic/533d6edbc2621e680800e0ea 这一节有一个代码:###4.1 Node.j ...

  3. 20145307陈俊达《网络对抗》Exp3 免杀原理与实践

    20145307陈俊达<网络对抗>Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有程序包含的 ...

  4. 如何线程安全的使用HashMap

    本文转自:http://www.importnew.com/21396.html 面试时被问到HashMap是否是线程安全的,如何在线程安全的前提下使用HashMap,其实也就是HashMap,Has ...

  5. Bitmap 位图

    转自: http://dongxicheng.org/structure/bitmap/ 1.  概述 位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用.本文介绍了位图的实现 ...

  6. ggplot2作图详解7(完):主题(theme)设置

    凡是和数据无关的图形设置内容理论上都可以归为主题类,但考虑到一些内容(如坐标轴)的特殊性,可以允许例外的情况.主题的设置相当繁琐,很容易就占用了 大量的作图时间,应尽量把这些东西简化,把注意力主要放在 ...

  7. Linux下的IPC几种通信方式

    Linux下的IPC几种通信方式 管道(pipe):管道可用于具有亲缘关系的进程间的通信,是一种半双工的方式,数据只能单向流动,允许一个进程和另一个与它有公共祖先的进程之间进行通信. 命名管道(nam ...

  8. python 判断两个列表是否有公共元素

    def common_data(list1, list2): result = False for x in list1: for y in list2: if x == y: result = Tr ...

  9. 服务器jupyter配置与ssh远程登录

    jupyter 配置 首先安装jupyter,在anaconda套装中已包含,如果安装的是精简版的miniconda则通过conda install jupyter安装. 生成配置文件 jupyter ...

  10. Android------视频播放器(包含全屏播放,快退,快进,腾讯新闻的列表播放等)

    前段时间做了一个新闻APP,涉及到了列表视频播放,和腾讯新闻APP差不多,总结了一下代码,写了一个Demo来分享给大家. 用了  TabLayout+RecylerView+自定义视频控件  完成的 ...