Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2015-01-24信息快讯网
这篇文章主要介绍了Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)错误的解决方法,需要的朋友可以参考下
今天要用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"); ?>
将FCKeditor导入PHP+SMARTY的实现方法
ucenter通信原理分析
php计划任务之ignore_user_abort函数实现方法
CI框架中site_url()和base_url()的区别
windows中为php安装mongodb与memcache
phplot生成图片类用法详解
php下Memcached入门实例解析
ioncube_loader_win_5.2.dll的错误解决方法
php读取mssql的ntext字段返回值为空的解决方法
php连接oracle数据库及查询数据的方法
php从memcache读取数据再批量写入mysql的方法
VPS中使用LNMP安装WordPress教程
php+jQuery.uploadify实现文件上传教程
PHP中mysqli_affected_rows作用行数返回值分析
PHP使用memcache缓存技术提高响应速度的方法
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
腾讯微博提示missing parameter errorcode 102 错误的解决方法
php运行提示:Fatal error Allowed memory size内存不足的解决方法
PHP使用glob函数遍历目录或文件夹的方法
php中file_get_contents与curl性能比较分析
PHP中使用循环实现的金字塔图形
php采用file_get_contents代替使用curl实例
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
CI框架装载器Loader.php源码分析
PHP has encountered a Stack overflow问题解决方法
完美实现wordpress禁止文章修订和自动保存的方法
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
PHP处理Oracle的CLOB实例
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Codeigniter(CI)框架分页函数及相关知识
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
用 Composer构建自己的 PHP 框架之使用 ORM
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
PHP中魔术变量__METHOD__与__FUNCTION__的区别
php实现的Timer页面运行时间监测类
PHP+iFrame实现页面无需刷新的异步文件上传
Chrome Web App开发小结