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(3) php 函数
Feb 15 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
Aug 21 PHP
php中的比较运算符详解
Oct 28 PHP
php 批量添加多行文本框textarea一行一个
Jun 03 PHP
PHP把小数转成整数3种方法
Jun 30 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
PHP 错误处理机制
Jul 06 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
PHP PDOStatement::bindParam讲解
Jan 30 PHP
php屏蔽错误及提示的方法
May 10 PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 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
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
让焦点自动跳转
2006/07/01 Javascript
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
nodejs事件的监听与触发的理解分析
2015/02/12 NodeJs
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python简单实现子网掩码转换的方法
2016/04/13 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
Python初学者常见错误详解
2019/07/02 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
美国玩具公司:U.S.Toy
2018/05/19 全球购物
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
汽车技术服务英文求职信范文
2014/01/02 职场文书
安全事故检讨书
2014/01/18 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
小学生节水倡议书
2015/04/29 职场文书
单身证明范本
2015/06/15 职场文书
家长会后的感想
2015/08/11 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
用Python生成会跳舞的美女
2022/01/18 Python
vue中div禁止点击事件的实现
2022/04/02 Vue.js
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs