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(2)
Oct 09 PHP
五个PHP程序员工具
May 26 PHP
中英文字符串翻转函数
Dec 09 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
php常用数学函数汇总
Nov 21 PHP
php关联数组快速排序的方法
Apr 17 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
PHP获取昨天、今天及明天日期的方法
Feb 03 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
Oct 08 PHP
Mac下php 5升级到php 7的步骤详解
Apr 26 PHP
安装docker和docker-compose实例详解
Jul 30 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 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
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
Dom与浏览器兼容性说明
2010/10/25 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
Python中有趣在__call__函数
2015/06/21 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
浅谈Django REST Framework限速
2017/12/12 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
电子专业推荐信范文
2013/11/18 职场文书
西北政法大学自主招生自荐信
2014/01/29 职场文书
捐款倡议书
2014/04/14 职场文书
幼儿园中班评语大全
2014/04/17 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
国庆节慰问信
2015/02/15 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
Golang Web 框架Iris安装部署
2022/08/14 Python