【问题标题】:While Loop, Maximum execution time of 30 seconds exceededWhile 循环,超过 30 秒的最大执行时间
【发布时间】:2017-12-14 13:16:58
【问题描述】:

当计数器超过 5 时,我需要调用脚本函数 open(),但是当我加载我的网页时,它显示了一个致命错误:超过 30 秒的最大执行时间。这是我的while循环问题吗?

$result = mysqli_query($dbconnect, "SELECT id, temp, hum, lum FROM weather ORDER BY id DESC LIMIT 5");

while($row = mysqli_fetch_assoc($result)){

$weather["temp"] = $row["temp"];

$weather["lum"] = $row["lum"];

    $tempcounter = 0;
    while ($weather["temp"] > 27) {  
        $tempcounter++;
    }

    if($tempcounter > 5){
        echo"<script>open()</script>";
    }}

【问题讨论】:

  • 你错过了一个结束},不要认为这是问题,只是指出可能有更多我们在这里看不到的代码,
  • 你想做什么不清楚

标签: php while-loop execution-time


【解决方案1】:

我认为是时候解决问题了。

您可以通过 2 种方法解决此问题。

  1. 将 max_execution_time 设置为较大的值,例如。 300 或更大

  2. 开始你的 php 脚本调用 set_time_limit 函数

    set_time_limit(0);

【讨论】:

  • 我不知道这么小的查询可能需要超过 30 秒。此外,还有一个无限循环。它仍然会出错。
  • 是的,我找错了这部分。您必须将 while ($weather["temp"] > 27) 更改为 if($weather["temp"] > 27)
【解决方案2】:

您的 while 循环是无限的。如果 $weather["temp"] 大于 27 并且在内部增加 tempcounter 但永远不会更改 $weather["temp"] 因此它将始终大于 27 并且永远不会退出循环,则循环将开始。

您可以将 $weather["temp"] 放入变量中。然后在循环内也增加它。但最重要的是你需要扭转你的状况。如果你增加你需要检查。

如果你增加:

$weatherTemp = $weather["temp"];
    while ($weatherTemp < 27) {  
        $weatherTemp++;
    }

如果你递减:

$weatherTemp = $weather["temp"];
        while ($weatherTemp > 27) {  
            $weatherTemp--;
        }

然后你可以像这样声明 $tempcouter:

$tempcounter = $weatherTemp - $weather["temp"]; //Temperature needed to get to 27
if($tempcounter > 5){
        echo"<script>open()</script>";
    }

代码未经测试,它可能无法正常工作。

如果您想要获取 27 和您的温度之间的差异,那么您在这里使用的逻辑不正确。您可以简单地从查询中取 27 减去您的温度。如果结果是否定的,只需将其更改为正值,您就会得到不同的结果。

【讨论】:

  • 如何更新 $weather["temp"] 以摆脱无限循环?
  • 我用解释编辑了我的答案。基本上将值放在变量中。然后使用该新变量执行循环并在循环中递增它。然后使用该变量来获取温度差异。
【解决方案3】:

在这个循环中:

$tempcounter = 0;
while ($weather["temp"] > 27) {  
    $tempcounter++;
}

您没有更新$weather["temp"],因此如果满足该条件,它将永远循环。

【讨论】:

  • 如何更新 $weather["temp"] 以摆脱无限循环?
  • 嗯,这取决于你想让你的代码做什么。从你的问题看不清楚。如果要计算有多少温度高于 27,可以将 $tempcounter = 0; 移动到代码的开头(第一个 while 上方)并将我的 sn-p 中的 while 更改为 if。如果这是您想要的行为,我可以更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
  • 2019-04-07
  • 2018-08-01
  • 2014-01-20
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多