读了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. # 20145122 《Java程序设计》第3周学习总结

    教材学习内容总结 1一类一文件. 2一个原始码中只能有一个公开类,一个类定义产生一个.class文档. 3如果参考名称与数据成员同名时,将参数的值指定给对象的数据成员时要在数据成员前加this. 4当 ...

  2. RC 522模块在LINUX平台调试笔记

    硬件平台: 1 主控:SMDK Exynos4412 POP S5M8767A 2 RFID模块:君盾集团提供的RC522模块 3 通信接口:SPI 软件平台:Android ICS & ke ...

  3. SPOJ BALNUM Balanced Numbers(数位DP+状态压缩)题解

    思路: 把0~9的状态用3进制表示,数据量3^10 代码: #include<cstdio> #include<map> #include<set> #includ ...

  4. 【安装】Nginx安装

    系统平台:CentOS release 6.5 (Final) 64位. 安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool ...

  5. Educational Codeforces Round 47 D

    Let's call an undirected graph $G=(V,E)$ relatively prime if and only if for each edge $(v,u)∈E$ $GC ...

  6. HDU 4745 Two Rabbits(最长回文子序列)

    http://acm.hdu.edu.cn/showproblem.php?pid=4745 题意: 有一个环,现在有两只兔子各从一个点开始起跳,一个沿顺时针,另一个沿逆时针,只能在一圈之内跳,并且每 ...

  7. EK算法复杂度分析

    引理: EK算法每次增广使所有顶点$v\in V-\{s,t\}$到$s$的最短距离$d[v]$增大. 采用反证法, 假设存在一个点$v\in V-\{s,t\}$, 使得$d'[v]< d[v ...

  8. mybatis关联查询resultmap的使用详解resultmap

    因为该案例比较典型,所以记录一下,恐后期有所疑问,以便用时便于会议. 案例典型在 关联关系典型 主表一张业务模板表 TABLE_NAME  COLUMN_NAME COMMENTS YMIT_BIZ_ ...

  9. 个人知识管理系统Version1.0开发记录(05)

    demo controller我们从前面的实现过程可以得出三种普遍使用的信息处理方式:1.操作数据库,对数据进行增删改查,比如运用sqldevloper查看数据信息.2.运用计算机程序语言,对数据进行 ...

  10. POJ 2409 Let it Bead (Polya定理)

    题意 用k种颜色对n个珠子构成的环上色,旋转翻转后相同的只算一种,求不等价的着色方案数. 思路 Polya定理 X是对象集合{1, 2, --, n}, 设G是X上的置换群,用M种颜色染N种对象,则不 ...