【问题标题】:My script stops after a foreach loop我的脚本在 foreach 循环后停止
【发布时间】:2009-05-08 13:26:59
【问题描述】:

我的脚本表现得很奇怪。在 foreach 循环之后,脚本停止。我没有来自 Apache 的任何错误、警告或通知。 这是代码:

foreach($clientFact as $line)
{
    $cliTemp1[] = $line["idcliente"];
    echo "qwerty";
}
echo "123";

如果我在循环中添加“echo(qwerty”)”,它将显示“qwerty”,但在循环结束后它不会做任何事情。

我错过了什么吗?!

谢谢

【问题讨论】:

  • 看起来不错...会不会内存不足?
  • 我认为这条线给你带来了问题。 $cliTemp1[] = $line["idcliente"];请检查 $cliTemp1[],在其中提供数组索引。
  • 你试过把 var_dump($clientFact);出口;在循环之前?

标签: php foreach


【解决方案1】:

Apache 不会将错误作为 PHP 错误返回。添加

error_reporting(E_ALL | E_STRICT);

在您的页面顶部是一个非常好的主意,这样您就可以看到发生的每个错误。也可能是您的错误处理程序没有显示错误而只是结束脚本。

如果是您的错误处理程序有问题,请添加

restore_error_handler();

error_reporting 函数之前

编辑:阅读您对数组索引的评论。如果每次都停在特定的索引处,这听起来肯定像是在 PHP 中达到了内存限制。

你可以使用:

ini_set('memory_limit', '100M');

将内存限制更改为 100 兆。不推荐,但如果它工作,它的内存不足的问题。尝试重构您的程序,使其使用更少的内存

【讨论】:

  • 听起来像更改内存限制确定您的问题。既然您在评论中说“明天肯定会更多”,我认为您必须采取其他措施来解决您的问题。您可能应该想出一种方法来做您需要做的事情,而无需一次加载整个 $cliTemp1 数组。
【解决方案2】:

上面的语法看起来不错,所以在这里在黑暗中完整拍摄 - $clientFact 数组有多大? $cliTemp1 数组是否可能变得如此之大以至于超出了内存限制?

也许不是回显“qwerty”,而是在每次迭代中回显$line["idcliente"] 的内容,以确保您成功通过$clientFact 中的所有元素。

【讨论】:

  • 我只是在循环内添加了一个计数器,而不是 qwerty,它总是在迭代号 11815 处停止。我的数组今天有 109247 个元素。明天肯定会更多。
  • 好的,听起来像OOM问题。奥兹的建议是对的
【解决方案3】:

猜测一下,您将死于循环内的错误,因为您的$lines 之一不是您期望的数组,并且错误被隐藏了。尝试在循环之前设置error_reporting(E_ALL),并可能设置ini_set('display_errors', true)

【讨论】:

  • 正如我之前所说,Apache 不会返回任何错误、警告或通知。
  • Yeeaaah.... 我说这很可能是因为他们被压制了。不过,我对您的 php.ini 设置一无所知,所以这只是在黑暗中拍摄。
  • 您也必须配置 php 以显示所有错误。默认情况下它们是不可见的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 2023-03-11
  • 2011-07-10
  • 2017-08-15
相关资源
最近更新 更多