≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > PHP笔记

解决Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)的问题

人气:239 时间:2021-03-03

这篇文章主要为大家详细介绍了解决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");
?>

 

本文来自:http://www.q1010.com/173/17989-0.html

注:关于解决Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)的问题的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:

您可能感兴趣的文章

上一篇:PHP使用ob_start生成html页面的实现方法
下一篇:php的curl封装类的简单示例
热门文章
  • PHP 写入WRITE编码为UTF8的文件示例
  • PHP 中文字符串截取函数示例:支持gb2312,gbk,big
  • PHP 简单留言板的制作示例
  • 解决Fatal error: Call to undefined function mb_convert_encoding() in错误问题
  • PHP语言基础(标记、注释、变量、数组、常量、函数)示例
  • php 生成迅雷链接的简单示例
  • php 获取短网址的实现方法
  • PHP 通用分页类的简单示例
  • PHP 使用文件方式导入导出整个MYSQL数据库的实现方法
  • php 获取MYSQL错误的简单示例
  • 最新文章
    • 解决PHP使用redis实现统计缓存MySQL压力的问题
    • php 简单的上传进度条的简单示例
    • php 给html中引用的js和css路径打上版本号的实现方法
    • php 实现计算年龄精准到年月日的实例
    • php+ajax无刷新分页的简单示例
    • 解决php+ajax无刷新上传图片的问题
    • 解决PHP生成HTML静态页面的问题
    • 解决PHP使用uniqid函数生成唯一ID的问题
    • 解决PHP防刷票的一些问题
    • 微信access_token的获取开发的实现方法

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。