循环时,超过30秒的最大执行时间

时间:2017-12-14 13:16:59

标签: php while-loop execution-time

当计数器超过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>";
    }}

3 个答案:

答案 0 :(得分:3)

你的while循环是无限的。如果$ weather [“temp”]大于27并且在你内部增加tempcounter但是从不改变$ weather [“temp”],那么循环将开始,所以它总是大于27并且永远不会离开循环。

您可以将$ weather [“temp”]放入变量中。然后在循环内部也增加它。但最重要的是,你需要改变你的状况。如果你增加,你需要检查&lt;如果你递减,你可以检查&gt;。

如果你增加:

$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减去温度。如果结果是负数,只需将其改为正数即可获得差异。

答案 1 :(得分:1)

我认为现在是问题的时候了。

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

  1. 将max_execution_time设置为较大的值ex。 <300>或更大

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

    参数或者set_time_limit(0);

答案 2 :(得分:0)

在这个循环中:

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

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