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数据库开发知多少
Oct 09 PHP
PHP安装攻略:常见问题解答(二)
Oct 09 PHP
PHP array操作10个小技巧分享
Jun 23 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
Jan 05 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 PHP
php实现生成验证码实例分享
Apr 10 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
php输出含有“#”字符串的方法
Jan 18 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
PHP字符串中抽取子串操作实例分析
Jun 22 PHP
Laravel第三方包报class not found的解决方法
Oct 13 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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
在php中使用sockets:从新闻组中获取文章
2006/10/09 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
cookie中的path与domain属性详解
2013/12/18 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
js实现转动骰子模型
2019/10/24 Javascript
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
Python下载网络小说实例代码
2018/02/03 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
2014年高三毕业生自我评价
2014/01/11 职场文书
给小学生的新年寄语
2014/04/04 职场文书
三分钟演讲稿范文
2014/04/24 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
签约仪式致辞
2015/07/30 职场文书
纯html+css实现Element loading效果
2021/08/02 HTML / CSS
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL
MongoDB数据库之添删改查
2022/04/26 MongoDB