Php &引用;未收到任何数据”;在while循环中有mysql查询时出错

Php &引用;未收到任何数据”;在while循环中有mysql查询时出错,php,Php,我有以下PHP代码: <?php include_once("connect_to_mysql.php"); $max=300; while($max--) { sleep(1); doMyThings(); } ?> 它应该重复mysql查询300次,每次之间的间隔为1秒。但问题是,在浏览器中大约一分钟后,我收到一条消息:没有收到任何数据。无法加载网页,因为服务器未发送任何数据 浏览器不会等待您整整5分

我有以下PHP代码:

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

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


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

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


你需要找到一个不同的解决方案。考虑在CLI中执行PHP脚本。< /P> < P>浏览器将不等待5分钟完成查询。


你需要找到一个不同的解决方案。考虑在CLI.

< P>中执行PHP脚本。问题如下:至少在300秒钟内,您的代码将不考虑(<代码> DOMYththsx())/代码>所需的时间量。大多数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();            
    }
?>

问题在于:您的代码至少会持续300秒(不考虑
doMyThings()
所需的时间)。大多数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();            
    }
?>

执行doMyThings()的次数似乎有300次超时;
您可以尝试使用
set\u time\u limit(0)

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


您似乎有一个执行doMyThings()300次的超时; 您可以尝试使用
set\u time\u limit(0)

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


在服务器端执行长时间php代码时,需要更改php.ini中的max_execution_time指令。但浏览器不会等待您想要的时间,所以您需要使用异步技术,如AJAX

当您在服务器端执行长时间php代码时,您需要更改php.ini中的max_execution_time指令。但浏览器不会等待您想要的时间,所以您需要使用AJAX之类的异步技术$max最终将等于0,循环将中断。@MadaraUchiha抱歉,是真的。我想它也会有缺点;)实际上@dainisaols,这种循环方法比从$max=0开始到300(因为您使用两条语句进行检查和递增,这里您只需要一条语句进行递减和检查)的效率高50%。您认为浏览器必须返回什么?web服务器必须等待多长时间才能从您的脚本中得到答案?@DainisAbols:如何$max最终将等于0,循环将中断。@MadaraUchiha抱歉,是真的。我想它也会有缺点;)实际上@dainisaols,这种循环方法比从$max=0开始到300(因为您使用两条语句进行检查和递增,这里您只需要一条语句进行递减和检查)的效率高50%。您认为浏览器必须返回什么?以及web服务器必须等待多长时间才能从脚本中得到答案?在大多数情况下,浏览器不会等待5分钟:),但您可以应用一些巧妙的技巧使其生效;)@GeneSys:我可以朝你脸上开枪,但这并不意味着我应该:P因为榜样不是证据;)在大多数情况下,浏览器不会等待5分钟:),但您可以应用一些巧妙的技巧使其生效;)@GeneSys:我可以朝你脸上开枪,但这并不意味着我应该:P因为榜样不是证据;)