设为首页收藏本站关注微信<<< 抵制 IE6 人人有责 >>>
搜索
热搜: 活动 交友 discuz
查看: 2246|回复: 1
打印 上一主题 下一主题

[其他(待整理)] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to

[复制链接]
跳转到指定楼层
楼主
发表于 2015-7-10 10:23:51 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
今天在网站生成静态发,出现错误:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 133648 bytes)
现将解决办法做以下记录(三种):
一、修改php.ini(推荐)

memory_limit = 128M
二、在程序里面添加如下语句

ini_set(”memory_limit”, ”128M”);
三、,添加如下内容

php_value memory_limit 128M
如果还不能解决,就把它改得再大一些。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享淘帖
回复

使用道具 举报

沙发
 楼主| 发表于 2015-7-10 10:24:50 | 只看该作者
今天要用php代码来处理一个580M的日志文件,总共有219万多行记录,因为是.log的文件,在windows下面很难将文件按照条数来分割,于是在linux下用split -l 10000 filename 前缀名 将整个文件按10000行一个分割成了200多个小文件,之后用php来循环处理这200多个文件,可是执行到后来就出现了题目上面的错误:
复制代码 代码如下:
  1. Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
复制代码




去百度了一下,原来是php.ini中的内存分配的问题,默认php代码能够申请到的最大内存字节数就是134217728 bytes,如果代码执行的时候再需要更多的内存,就会报错了,于是就将php.ini文件中的配置改了一下:
复制代码 代码如下:
  1. memory_limit = 128M;//将128M改成了256M
复制代码



但是之后一想,一个php脚本一次请求的内存空间就要超过128M,那不管你以后将memory_limit设置成多大,以后肯定有出问题的时候。
究其原因,是我在在编码时,仅仅对变量赋值,却从来没有 unset ($var) 过。导致了内存占用越来越多,所以以后一个变量不再使用之后,一定要记得unset掉它。
下面附上我今天处理这个日志文件的代码:
复制代码 代码如下:

  1. <?php
  2. set_time_limit(1800) ;
  3. /**
  4. * 获取日志中发送失败的邮箱地址
  5. * @param $directory log日志的目录
  6. * @param $name    失败邮箱保存的文件名
  7. */
  8. function getmail($directory,$name){
  9. //遍历目录下的.log文件
  10.     $files=scandir("$directory");
  11.     foreach($files as $v){
  12.         if(preg_match_all("|mail\.log\D+|",$v,$log)){
  13.             $logs[]=$log[0][0];
  14.         }
  15.     }
  16. //将所有.log文件中发送失败邮箱提取出来   
  17.     foreach($logs as $v){
  18.         $row=file("$v");
  19.         echo "读取".$v."文件<br />";
  20.         foreach($row as $key => $value)
  21.         {
  22.             if(eregi("host name lookup failure|Connection timed out with|Connection refused by|cannot find your reverse hostname", $value)){
  23.                 if(preg_match("|\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*|", $row[$key],$matches)){
  24.                     $mail[] = trim($matches[0]);
  25.                     echo "获取发送失败的邮箱地址".$matches[0]."<br />";
  26.                 }else{
  27.                     echo "无法获取日志中发送失败的邮箱,请检查";
  28.                 }
  29.             }
  30.         }
  31.         unset($row);
  32.     }
  33. //将提取出来的发送失败邮箱写入到mail.txt文件中   
  34.     $mailurl=fopen("$name","a");
  35.     foreach($mail as $line)
  36.     {
  37.         fwrite($mailurl,$line."\r\n");
  38.     }
  39.     echo "将所有发送失败的邮箱地址写入".$name."<br />";
  40.     fclose($mailurl);
  41. }
  42. getmail(".","mail.txt");
  43. ?>
复制代码




回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|手机版|Archiver|源于生活(个人生活娱乐工作的笔记)css3,html5,学习笔记    

GMT+8, 2024-11-23 22:50 , Processed in 0.093600 second(s), 23 queries .

Powered by Mr.Kevin-ying

© 2004-2015

快速回复 返回顶部 返回列表