Php &引用;未收到任何数据”;在while循环中有mysql查询时出错
我有以下PHP代码: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
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因为榜样不是证据;)