读了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. 使用Xshell连接Ubuntu详解

    Xshell是一个安全终端模拟软件,可以进行远程登录.我使用XShell的主要目的是在Windows环境下登录Linux终端,传输一些大文件到Linux环境上去. 1.下载安装xshell客户端,在安 ...

  2. ubuntu18.04下搭建深度学习环境anaconda2+ cuda9.0+cudnn7.0.5+tensorflow1.7【原创】【学习笔记】

    PC:ubuntu18.04.i5.七彩虹GTX1060显卡.固态硬盘.机械硬盘 作者:庄泽彬(欢迎转载,请注明作者) 说明:记录在ubuntu18.04环境下搭建深度学习的环境,之前安装了cuda9 ...

  3. 图解Git命令【转】

    本文转载自:https://github.com/geeeeeeeeek/git-recipes/wiki/4.1-%E5%9B%BE%E8%A7%A3Git%E5%91%BD%E4%BB%A4 此页 ...

  4. notepad++下载32位,安装插件管理

    下载32位地址: https://notepad-plus-plus.org/download/v7.6.4.html 下载插件: 链接: https://pan.baidu.com/s/1tRSo4 ...

  5. python 十进制数转二进制数

    def convertToBinary(n): """Function to print binary number for the input decimal usin ...

  6. Java网络编程学习A轮_03_抓包分析TCP四次挥手

    参考资料: http://www.jellythink.com/archives/705 示例代码: https://github.com/gordonklg/study,socket module ...

  7. 网络安全:攻击和防御练习(全战课), DDos压力测试

    XSS 跨站脚本攻击: Cross-site scripting(简称xss)跨站脚本. 一种网站的安全漏洞的攻击,代码注入攻击的一种.XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法 ...

  8. [转]Linux下彻底卸载mysql详解

    http://www.jb51.net/article/97516.htm 一.使用以下命令查看当前安装mysql情况,查找以前是否装有mysql 1 rpm -qa|grep -i mysql 可以 ...

  9. web sql 基本操作 - 增删改查

    不喜欢看md原文的 可以访问这个链接:http://note.youdao.com/noteshare?id=6a91e3dea7cdf5195bb0e851d9fcb5a5 # web sql 增删 ...

  10. UVA-12657 Boxes in a Line (双向链表)

    题目大意:一个1~n的升序数字序列,有4种操作.操作1,将x放到y前面一个位置:操作2将x放到y后面的一个位置:操作3交换x和y的位置:操作4反转整个序列.求经过m次操作后的所有奇数项的和. 题目分析 ...