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 相关文章推荐
一个用php3编写的简单计数器
Oct 09 PHP
优化PHP代码的53条建议
Mar 27 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
使用淘宝IP库获取用户ip地理位置
Oct 27 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
PHP生成及获取JSON文件的方法
Aug 23 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
PHP实现数组根据某个单元字段排序操作示例
Aug 01 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 PHP
PHP对接阿里云虚拟号的实现(号码隐私保护)
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
在数据量大(超过10万)的情况下
2007/01/15 PHP
PHP读取MySQL数据代码
2008/06/05 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
Laravel框架实现发送短信验证功能代码
2016/06/06 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
javascript getElementsByTagName
2011/01/31 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
JS中innerHTML和pasteHTML的区别实例分析
2016/06/22 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
js面向对象编程总结
2017/02/16 Javascript
微信小程序之购物车功能
2020/09/23 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
学习python需要有编程基础吗
2020/06/02 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
火锅店创业计划书范文
2014/02/02 职场文书
委托书范本
2014/09/13 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
羊脂球读书笔记
2015/06/30 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
关于考试抄袭的检讨书
2019/11/02 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技