【问题标题】:PHP fatal error: Allowed memory size exhausted. How to fix?PHP 致命错误:允许的内存大小已用尽。怎么修?
【发布时间】:2011-05-26 23:17:50
【问题描述】:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to
allocate 24 bytes)
in /home/fevsdiet/public_html/xxxxxxx.co.uk/booking/includes/functions.php
on line 481

这是什么意思,如何解决?

这是出错的代码:

   $availabilityArr = array();              
    #TODO - check if "to" is < "from" = means that "to" is +1 day.
    $st = date("Y-m-d H:i", strtotime($date." +".$tt[2]." minutes"));
    $et = date("Y-m-d H:i", strtotime($date." +".$tt[3]." minutes"));
    $a = $st;
    $n = 0; //layout counter
    $b = date("Y-m-d H:i", strtotime($a." +".$int." minutes")); //default value for B is start time.
    for( $a = $st ; $b <= $et ; $b = 
                       date("Y-m-d H:i", strtotime($a." +".$int." minutes")))
    {
        $availabilityArr[date("Y-m-d", strtotime($a))][] = date("H:i", strtotime($a));
        $a = $b;
        $n++;
    }

【问题讨论】:

  • 可能有助于了解该线路附近/线路上发生的情况......也许有些事情比它应该花费的时间更长
  • 不看代码我们是无法判断的。错误提示 内存耗尽。数组/对象太多或太大,可能是在(永无休止的)循环中引起的。使用带有调试器的 IDE。
  • 当我的“每页”限制设置为 5000 而不是 50 时,我收到了这条消息。检查你所有的 for 循环...等,以确保它们不会卡在无休止地回显事物循环,或者你不想在 SQL 中加入太多东西,然后回显它们。
  • 您的代码(而且您的for 循环看起来很丑:/。考虑使用while 和明确的变量名称。
  • 不一定是 481 导致内存填满。那可能只是当它没有剩余内存时碰巧尝试分配的那行?

标签: php sql


【解决方案1】:

这是 PHP 错误。

在 .htaccess 中你可以设置

php_value memory_limit 90M

在您的 php 文件之上,您可以设置

ini_set("memory_limit", "90M");

【讨论】:

  • 我可以以某种方式转储我使用过的内存吗?
  • 这个是搞砸还是直接列出来
  • 这只是回显当前限制设置,不能转储内存内容。您可以使用memory_get_usage 进行调试。您可以将其放在脚本之上,而不是在函数之后,并跟踪导致高内存使用的原因。对于更高级的调试,我推荐你XDebug
【解决方案2】:

基本上,这意味着 PHP 没有任何允许的内存。这可以在php.ini 中使用memory_limit 子句进行调整。

如果您在共享主机上,您可能无法编辑php.ini。您仍然可以尝试使用.htaccess 文件:

  1. 在 Web 目录的根目录下创建一个名为 .htaccess 的文件(通常是 /www/web
  2. 使用php_value 子句:

    php_value memory_limit 128M #for example
    

这是由您的某些代码尝试使用太多或太大的变量引起的。通常它是一个无限循环,或者从数据库中获取大量数据到一个数组中,

【讨论】:

  • 我没有 php.ini 文件我该怎么办?
  • 找出你使用这么多内存的原因。
  • 问题是网站运行良好,直到我点击刷新,所以我不知道是什么原因造成的
【解决方案3】:

老实说,这听起来像是 PHP 错误。

看到这个: http://www.bluehostforum.com/showthread.php?14500-Allowed-memory-size-of-33554432-bytes-exhausted

您需要在 PHP 中编辑 memory_limit 设置。

【讨论】:

  • 是的,当他试图做一些需要比系统限制更多的内存的事情时,他得到了错误!由保护方案引起的错误。 :P
【解决方案4】:
【解决方案5】:

检查您在 php.ini 中的 memory_limit 设置。

【讨论】:

  • 这真的是评论,而不是问题的答案。请使用“添加评论”为作者留下反馈。
  • 您是否在认真修改一年多前的内容?
  • 这是一个自动评论。它出现在评论列表中。
【解决方案6】:

您的 PHP 环境当前有 32MB 的内存限制,错误消息告诉您它需要更多的内存才能继续。

内存限制由 memory_limit 配置选项设置(参见:http://uk3.php.net/manual/en/ini.core.php#ini.memory-limit)。您需要重构代码以使用更少的内存,或者,如果您确实需要那么多内存,请更改 memory_limit 选项。

要对服务器上的所有 php 脚本全局执行此操作,您可以编辑 php.ini(这取决于您的操作系统和安装 PHP 的位置)。

要仅为此脚本设置临时更高的内存限制,您可以执行以下操作:

$old_limit = ini_set( "memory_limit", "128M" );

(... the code that needs the extra memory ...)

ini_set( "memory_limit", $old_limit );

要减少内存使用,请尝试在您不再需要的任何变量上使用 unset() 作为开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2017-10-05
    • 2017-11-06
    • 2015-07-06
    • 2018-05-19
    相关资源
    最近更新 更多