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中extract()函数的妙用分析
Jul 11 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
解析isset与is_null的区别
Aug 09 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
php curl中gzip的压缩性能测试实例分析
Nov 08 PHP
php写入txt乱码的解决方法
Sep 17 PHP
PHP调用接口API封装的例子
Oct 11 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 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 json 格式控制
2015/12/24 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
javascript JSON操作入门实例
2010/04/16 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
Python学习笔记_数据排序方法
2014/05/22 Python
python将文本转换成图片输出的方法
2015/04/28 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
自荐信的基本格式
2014/02/22 职场文书
婚庆司仪开场白
2015/05/29 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏