加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Fatal error: Allowed memory size of 134217728 bytes exhauste

发布时间:2020-12-13 02:08:44 所属栏目:PHP教程 来源:网络整理
导读:《PHP实战:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes》要点: 本文介绍了PHP实战:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes,希望对您有

《PHP实战:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes》要点:
本文介绍了PHP实战: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多个文件,可是执行到后来就出现了题目上面的错误:PHP学习

代码如下:

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.logD+|",$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."rn");
??? }
??? echo "将所有发送失败的邮箱地址写入".$name."<br />";
??? fclose($mailurl);
}

getmail(".","mail.txt");
?>

欢迎参与《PHP实战:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读