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基础知识:类与对象(4) 范围解析操作符(::)
Dec 13 PHP
php做下载文件的实现代码及文件名中乱码解决方法
Feb 03 PHP
关于尾递归的使用详解
May 02 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
php中base64_decode与base64_encode加密解密函数实例
Nov 24 PHP
php绘制一条弧线的方法
Jan 24 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
Yii CGridView用法实例详解
Jul 12 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
php设计模式之适配器模式原理、用法及注意事项详解
Sep 24 PHP
基于laravel belongsTo使用详解
Oct 18 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
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
Laravel中间件实现原理详解
2016/10/09 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
PHP fclose函数用法总结
2019/02/15 PHP
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
解决vue点击控制单个样式的问题
2018/09/05 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
python做反被爬保护的方法
2019/07/01 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
计算s=f(f(-1.4))的值
2014/05/06 面试题
遇到的Mysql的面试题
2014/06/29 面试题
化工工艺设计求职信
2014/06/25 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
从事会计工作年限证明
2015/06/23 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android