【问题标题】:Allowed memory size of 134217728 bytes exhausted允许的内存大小为 134217728 字节已用尽
【发布时间】:2012-08-29 03:48:18
【问题描述】:

解决这个问题很热门,为什么会这样?

Zend 服务器日志:

PHP 致命错误:允许的内存大小为 134217728 字节已用尽 (试图分配 538798977 字节)在 C:\Program Files (x86)\Zend\Apache2\htdocs\test\modules\main.php 在第 3 行

文件main.php 不会产生任何错误,如果它直接从浏览器执行。但是,如果我从另一个 PHO 文件中使用它的函数,那么 Zend Log 会打印出上述错误。

【问题讨论】:

  • 您是否尝试增加内存限制?
  • 128MB 已用内存?这个脚本做什么
  • 您尝试一次性分配 500 兆内存?天哪,您是否尝试过一次读取大量 CSV 文件?如果你这样做了,请一次一行地阅读它们并以这种方式处理它们。

标签: php memory memory-management


【解决方案1】:

我也遇到过这个问题。

增加以下变量,使您的页面执行不会停止:

  • max_input_time
  • memory_limit
  • max_execution_time

【讨论】:

  • ...技术上没有错误所以没有-1但可能是一个坏建议。原始错误表明您(可能)使用 way 太多内存 - 您的代码中有异味(无限循环?)。换句话说,如果您的页面每次运行时都会消耗那么多内存,那么为了您的主机,希望您没有很多用户:)
【解决方案2】:

要么增加php.ini 中的内存限制,要么尝试优化应用程序之外的任何大型数据结构(如数组)。

无论如何,如果您的 PHP 应用程序正在使用 128MB 的 RAM,则可能会出现问题。

另外,正如 Fluffeh 在 cmets 中所指出的,您到底在做什么来利用 500MB 的 RAM?

【讨论】:

    【解决方案3】:

    试试这个:

    ini_set('memory_limit', '-1');
    

    php.net/memory_limit

    这将占用无限的服务器内存。

    【讨论】:

    • 但是如果你在运行 CLI 模式它非常有用。
    • @superarts.org & others:有一种方法可以更改 PHP 的 CLI 设置。输入php --ini 并编辑正确的文件。
    【解决方案4】:

    除了user1427811,还可以在下载文件前后监控time_limitmemory_limit

    function custom_put_contents($source_url='',$local_path=''){
    
        $time_limit = ini_get('max_execution_time');
        $memory_limit = ini_get('memory_limit');
    
        set_time_limit(0);
        ini_set('memory_limit', '-1');      
    
        $remote_contents=file_get_contents($source_url);
        $response=file_put_contents($local_path, $remote_contents);
    
        set_time_limit($time_limit);
        ini_set('memory_limit', $memory_limit); 
    
        return $response;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-26
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 2016-04-13
      • 1970-01-01
      相关资源
      最近更新 更多