• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)_php技

php 搞代码 3年前 (2022-01-26) 43次浏览 已收录 0个评论

今天要用php代码来处理一个580M的日志文件,总共有219万多行记录,因为是.log的文件,在windows下面很难将文件按照条数来分割,于是在linux下用split -l 10000 filename 前缀名 将整个文件按10000行一个分割成了200多个小文件,之后用php来循环处理这200多个文件,可是执行到后来就出现了题目上面的错误:

<br />Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)<br />

去百度了一下,原来是php.ini中的内存分配的问题,默认php代码能够申请到的最大内存字节数就是134217728 bytes,如果代码执行的时候再需要更多的内存,就会报错了,于是本文来源gao.dai.ma.com搞@代*码#网搞代gaodaima码就将php.ini文件中的配置改了一下:

<br />memory_limit = 128M;//将128M改成了256M<br />

但是之后一想,一个php脚本一次请求的内存空间就要超过128M,那不管你以后将memory_limit设置成多大,以后肯定有出问题的时候。

究其原因,是我在在编码时,仅仅对变量赋值,却从来没有 unset ($var) 过。导致了内存占用越来越多,所以以后一个变量不再使用之后,一定要记得unset掉它。

下面附上我今天处理这个日志文件的代码:

<br /><?php<br />set_time_limit(1800) ;<br />/**<br /> * 获取日志中发送失败的邮箱地址<br /> * @param $directory log日志的目录<br /> * @param $name    失败邮箱保存的文件名<br /> */<br />function getmail($directory,$name){<br />//遍历目录下的.log文件<br />    $files=scandir("$directory");<br />    foreach($files as $v){<br />        if(preg_match_all("|mail\.log\D+|",$v,$log)){<br />            $logs[]=$log[0][0];<br />        }<br />    }<br />//将所有.log文件中发送失败邮箱提取出来    <br />    foreach($logs as $v){<br />        $row=file("$v");<br />        echo "读取".$v."文件<br />";<br />        foreach($row as $key => $value)<br />        {<br />            if(eregi("host name lookup failure|Connection timed out with|Connection refused by|cannot find your reverse hostname", $value)){<br />                if(preg_match("|\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*|", $row[$key],$matches)){<br />                    $mail[] = trim($matches[0]);<br />                    echo "获取发送失败的邮箱地址".$matches[0]."<br />";<br />                }else{<br />                    echo "无法获取日志中发送失败的邮箱,请检查";<br />                }<br />            }<br />        }<br />        unset($row);<br />    }<br />//将提取出来的发送失败邮箱写入到mail.txt文件中    <br />    $mailurl=fopen("$name","a");<br />    foreach($mail as $line)<br />    {<br />        fwrite($mailurl,$line."\r\n");<br />    }<br />    echo "将所有发送失败的邮箱地址写入".$name."<br />";<br />    fclose($mailurl);<br />}</p><p>getmail(".","mail.txt");<br />?><br />

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)_php技
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址