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

今天要用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");
?>

时间: 2024-09-12 06:50:30

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)_php技巧的相关文章

Fatal error: Allowed memory size of 134217728 bytes exhauste

报错提示:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 38218371 bytes) in ..... 解决方法: 1.取消PHP的内存限制. 在php程序中添加 ini_set("memory_limit","-1"); 2.根据自己的需要及参考本机的内存大小修改php内存限制,如改为1024M. 在php程序中添加 ini_set("m

php运行提示:Fatal error Allowed memory size内存不足的解决方法_php技巧

本文实例讲述了php运行提示:Fatal error Allowed memory size内存不足的解决方法.分享给大家供大家参考.具体方法如下: 有些朋友新配置的环境或自己新写的程序运行时会碰到fatal error: Allowed memory size of 134217728 bytes exhausted错误,这种问题一个是程序写得不好导致的,另一个是环境配置不好也会出现,像php5.1.27+apache2.2.3好像在windows2003中就会出现bug不管你怎么修复都无法解

php报错FastCGI sent in stderr “PHP Fatal error: Allowed memory size of”错误

PHP的memory_limit值的默认配置是128M,但是根据处理内容有时候会发生如下错误. FastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 39858177 bytes) 可以通过修改memory_limit值来,回避以上错误的出现. 修改memory_limit值. # vi /etc/php.

PHP提示:Fatal error: Allowed memory size of

出现"Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 775920 bytes)"这种错误,首先要先检查你的php程序是否出现了死循环. 解决办法(三种): 一.修改php.ini(推荐) memory_limit = 12M 二.在程序里面添加如下语句 ini_set('memory_limit', '12M'); 三.在根目录建立 .htaccess文件,添加如下内容 ph

php运行网站内存不足提示 Fatal error Allowed memory size

 解决方法有多种,下面我根据不同权限的站长来介绍 有服务器管理权限可以修改php.ini文件 可以直接在 php.ini 把 memory_limit = 8M ; 调大至12M或更大.(注意:后面为M不是MB哦) 没有服务器管理权限 1.php中直接修改内存但需要你php支持ini_set函数,这个函数如果在php.ini禁止使用那么此方法将无效. ini_set('memory_limit','12M');//当然可以设置为一个更大的值 2.htaccess方式,这种一般的空间主机都支持 在

ThinkPHP提示错误Fatal error: Allowed memory size的解决方法_php实例

本文实例讲述了ThinkPHP提示错误Fatal error: Allowed memory size的解决方法.分享给大家供大家参考.具体分析如下: 如果你的ThinkPHP提示你:致命错误(Fatal error: Allowed memory size),根据网上说的提高服务器可使用内存,我觉得都不是好的解决办法.麻烦也没必要.因为这是ThinkPHP本身存在BUG. 错误提示:Fatal error: Allowed memory size of 1073741824 bytes exh

Composer PHP Fatal error:Allowed memory size of

今天在运行composer update时遇到的,详细的错误消息如下: $ composer update Loading composer repositories with package information Updating dependencies (including require-dev) PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted (tried to allocate 32 bytes)

WordPress提示Fatal error: Allowed memory size of

错误提示 Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 7680 bytes) in  /home/www/web/xxxxxx.php on line xxx 方法一: 在 wp-config.php 文件的 define ('WPLANG', '');下一行添上:  代码如下 复制代码  define('WP_MEMORY_LIMIT', '64M'); 方法二: 在WordPr

ThinkPHP的致命错误Fatal error: Allowed memory size

如果你的ThinkPHP提示你:致命错误(Fatal error: Allowed memory size),根据网上说的提高服务器可使用内存,我觉得都不是好的解决办法.麻烦也没必要.因为这是ThinkPHP本身存在BUG.  错误提示:Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 523800 bytes) in  /var/www/www.soouj.com/ThinkPHP