当我在while循环中有一个mysql查询时,“没有收到数据”错误

时间:2013-01-02 15:23:06

标签: php

我有这个PHP代码:

<?php
    include_once("connect_to_mysql.php");

    $max=300;
    while($max--)
    {
        sleep(1);
        doMyThings();
    }
?>

应该重复一次mysql查询300次,每次间隔为1秒。但问题是在浏览器中大约一分钟后我收到此消息:没有收到数据。无法加载网页,因为服务器未发送任何数据。

4 个答案:

答案 0 :(得分:2)

浏览器不会等待整整5分钟来完成您的查询。

您需要找到不同的解决方案。考虑在CLI中执行PHP脚本。

答案 1 :(得分:2)

问题如下:您的代码至少(不考虑doMyThings()所需的时间)最后300秒。大多数PHP环境将默认脚本运行时间设置为大约60秒,脚本停止并且没有打印出任何内容。

接下来的事情是(如果脚本执行时间设置得足够高以允许长时间运行的脚本),脚本必须运行直到完成(即约300秒),然后将数据写入输出流。在那之前,你不会看到任何输出。

要避免这两个问题,请参阅以下代码:

<?php
    // If allowed, unlimited script execution time
    set_time_limit(0);

    // End output buffering
    ob_end_flush(); 

    include_once("connect_to_mysql.php");

    $max=300;

    // End output buffering IE and Safari Workaround
    // They will only display the webpage if it's completely loaded or
    // at least 5000 bytes have been "printed".
    for($i=0;$i<5000;$i++)
    {
        echo ' ';
    }       

    while($max > 0)
    {
        sleep(1);
        doMyThings();
        $max--;

        // Manual output buffering
        ob_flush();
        flush();            
    }
?>

也许您对这篇文章感兴趣:Outputting exec() ping result progressively

答案 2 :(得分:0)

似乎你有超时执行300次doMyThings(); 您可以尝试使用set_time_limit(0);

  

设置允许脚本运行的秒数。如果达到此值,脚本将返回致命错误。默认限制为30秒,如果存在,则为php.ini中定义的max_execution_time值。

答案 3 :(得分:0)

当你在服务器端执行长时间的PHP代码时,你需要在php.ini中更改max_execution_time指令。但浏览器不会等待多长时间,因此您需要使用像AJAX这样的异步技术