我有这个PHP代码:
<?php
include_once("connect_to_mysql.php");
$max=300;
while($max--)
{
sleep(1);
doMyThings();
}
?>
应该重复一次mysql查询300次,每次间隔为1秒。但问题是在浏览器中大约一分钟后我收到此消息:没有收到数据。无法加载网页,因为服务器未发送任何数据。
答案 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这样的异步技术