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的ob_start();控制您的浏览器cache!
Feb 14 PHP
PHP学习笔记之数组篇
Jun 28 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
memcache命令启动参数中文解释
Jan 13 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
php实现的IMEI限制的短信验证码发送类
May 05 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
Feb 08 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
Apr 18 PHP
PHP实现的装箱算法示例
Jun 23 PHP
对laravel的session获取与存取方法详解
Oct 08 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/02/20 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
composer.lock文件的作用
2016/02/03 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
jQuery live
2009/05/15 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
超市实习总结自我鉴定
2013/09/19 职场文书
预备党员综合考察材料
2014/05/31 职场文书
甜品店创业计划书
2014/08/14 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
乡镇党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
开学第一周值周总结
2015/07/16 职场文书
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
HTML基础详解(下)
2021/10/16 HTML / CSS
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL