【问题标题】:PHP Fatal error: Allowed memory size of 268435456 bytes exhaustedPHP 致命错误:允许的内存大小为 268435456 字节已用尽
【发布时间】:2017-11-06 14:52:53
【问题描述】:

单击名为 Test 的类别时出现以下错误

在 stderr 中发送的 FastCGI:

PHP 消息:PHP 致命错误:从第 736 行读取响应标头时,/home/mydomain/public_html/app/functions/fn.catalog.php 中允许的内存大小为 268435456 字节(尝试分配 32 字节)已用尽上游,客户端:24.xx.xx.xx,服务器:www.mydomain.com,请求:“GET /test-page-313/ HTTP/1.1”,上游:“fastcgi://127.0.0.1:9000”,主机:“www.mydomain.com”,推荐人:“http://www.mydomain....lesale-towels/

我的736线如下

在我的 php.ini 中,我已经将 memory_limit 增加到 = 1G

for ($qty = $min_qty; $qty <= $max_qty; $qty += $product['qty_step']) {
    $qty_content[] = $qty;
}

【问题讨论】:

  • $max_qty$qty 在该循环中如何变化?你会在什么时候达到结束条件?
  • 可能为 0 或未定义 - $qty += $product['qty_step'] 。调试步骤 1:找出您的代码使用的值。回声是一种方式。您可能没有对值进行错误检查,这很糟糕。
  • 按照上面的建议,你能做到吗:print "\$min_qty='$min_qty'&lt;br /&gt;\$max_qty='$max_qty'&lt;br /&gt;\$product['qty_step'] = $product['qty_step']";
  • 更改ini设置后是否重启了网络服务器?
  • 请编辑问题以在 for 循环之前包含 $min_qty$max_qty$product['qty_step'] 的值。没有它,这里就没有足够的信息来确定确切的问题。

标签: php


【解决方案1】:

几种可能性:

  • $product['qty_step'] 不包含数字
  • 循环中有两个多步骤,使您的程序在 $qty_content 数组中创建许多条目。

例如,如果您有:

$min_qty = 0;
$max_qty = 400000;
$product = array("qty_step" => 0.001);
$qty_content = [];

// The loop
for ($qty = $min_qty; $qty <= $max_qty; $qty += $product['qty_step']) {
    $qty_content[] = $qty;
}

程序将尝试在数组中创建多达 400000000 个条目,这会占用 PHP 无法处理的大量内存。所以它会抛出你遇到的错误。正如有人在您问题的 cmets 中所说,尝试调试所有变量的内容,例如:

var_dump(
  array('qty' => $qty,
    'min_qty' => $min_qty,
    'max_qty' => $max_qty,
    'product["qty_step"]' => $product['qty_step'])
);

然后看看你会得到什么。在所有情况下,此错误都意味着您占用了太多内存,因此您必须通过增加$product['qty_step'] 或减少$min_qty$max_qty 之间的差异来减少循环的迭代次数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 2014-03-07
    • 2014-02-07
    • 2014-09-27
    相关资源
    最近更新 更多