Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)


Posted in PHP onNovember 08, 2014

今天要用php代码来处理一个580M的日志文件,总共有219万多行记录,因为是.log的文件,在windows下面很难将文件按照条数来分割,于是在linux下用split -l 10000 filename 前缀名 将整个文件按10000行一个分割成了200多个小文件,之后用php来循环处理这200多个文件,可是执行到后来就出现了题目上面的错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)

去百度了一下,原来是php.ini中的内存分配的问题,默认php代码能够申请到的最大内存字节数就是134217728 bytes,如果代码执行的时候再需要更多的内存,就会报错了,于是就将php.ini文件中的配置改了一下:

memory_limit = 128M;//将128M改成了256M

但是之后一想,一个php脚本一次请求的内存空间就要超过128M,那不管你以后将memory_limit设置成多大,以后肯定有出问题的时候。

究其原因,是我在在编码时,仅仅对变量赋值,却从来没有 unset ($var) 过。导致了内存占用越来越多,所以以后一个变量不再使用之后,一定要记得unset掉它。

下面附上我今天处理这个日志文件的代码:

<?php

set_time_limit(1800) ;

/**

 * 获取日志中发送失败的邮箱地址

 * @param $directory log日志的目录

 * @param $name    失败邮箱保存的文件名

 */

function getmail($directory,$name){

//遍历目录下的.log文件

    $files=scandir("$directory");

    foreach($files as $v){

        if(preg_match_all("|mail\.log\D+|",$v,$log)){

            $logs[]=$log[0][0];

        }

    }

//将所有.log文件中发送失败邮箱提取出来    

    foreach($logs as $v){

        $row=file("$v");

        echo "读取".$v."文件<br />";

        foreach($row as $key => $value)

        {

            if(eregi("host name lookup failure|Connection timed out with|Connection refused by|cannot find your reverse hostname", $value)){

                if(preg_match("|\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*|", $row[$key],$matches)){

                    $mail[] = trim($matches[0]);

                    echo "获取发送失败的邮箱地址".$matches[0]."<br />";

                }else{

                    echo "无法获取日志中发送失败的邮箱,请检查";

                }

            }

        }

        unset($row);

    }

//将提取出来的发送失败邮箱写入到mail.txt文件中    

    $mailurl=fopen("$name","a");

    foreach($mail as $line)

    {

        fwrite($mailurl,$line."\r\n");

    }

    echo "将所有发送失败的邮箱地址写入".$name."<br />";

    fclose($mailurl);

}
getmail(".","mail.txt");

?>
PHP 相关文章推荐
php录入页面中动态从数据库中提取数据的实现
Oct 09 PHP
php输出金字塔的2种实现方法
Dec 16 PHP
PHP中foreach()用法汇总
Jul 02 PHP
PHP封装CURL扩展类实例
Jul 28 PHP
学习php设计模式 php实现建造者模式
Dec 07 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
PHP程序员的技术成长规划
Mar 25 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
Jul 27 PHP
php-msf源码详解
Dec 25 PHP
用PHP做了一个领取优惠券活动的示例代码
Jul 05 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 PHP
PHP中使用循环实现的金字塔图形
Nov 08 #PHP
php调用新浪短链接API的方法
Nov 08 #PHP
php禁止浏览器使用缓存页面的方法
Nov 07 #PHP
php实现把url转换迅雷thunder资源下载地址的方法
Nov 07 #PHP
php采用file_get_contents代替使用curl实例
Nov 07 #PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 #PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
Nov 07 #PHP
You might like
PHP5 安装方法
2007/01/15 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
2014/03/14 PHP
PHP结合Vue实现滚动底部加载效果
2017/12/17 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
思想品德自我鉴定
2013/10/12 职场文书
幼儿教师工作感言
2014/02/14 职场文书
综合实践活动方案
2014/02/14 职场文书
品牌宣传方案
2014/03/21 职场文书
C++程序员求职信
2014/05/07 职场文书
购房协议书范本
2014/10/02 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python