我有这个 PHP 代码:
<?php
include_once("connect_to_mysql.php");
$max=300;
while($max--)
{
sleep(1);
doMyThings();
}
?>
它应该重复一个 mysql 查询 300 次,每次之间的间隔为 1 秒。但问题是在浏览器中大约一分钟后我收到这条消息:没有收到数据。无法加载网页,因为服务器未发送数据。
我有这个 PHP 代码:
<?php
include_once("connect_to_mysql.php");
$max=300;
while($max--)
{
sleep(1);
doMyThings();
}
?>
它应该重复一个 mysql 查询 300 次,每次之间的间隔为 1 秒。但问题是在浏览器中大约一分钟后我收到这条消息:没有收到数据。无法加载网页,因为服务器未发送数据。
浏览器不会等待整整 5 分钟让您完成查询。
您需要找到不同的解决方案。考虑在 CLI 中执行 PHP 脚本。
问题如下:您的代码将至少(不考虑所需的时间量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();
}
?>
也许你也对这篇文章感兴趣:逐步输出 exec() ping 结果
执行 300 次 doMyThings(); 似乎超时 你可以试试set_time_limit(0);
设置允许脚本运行的秒数。如果达到此值,脚本将返回致命错误。默认限制为 30 秒,如果存在,则为 php.ini 中定义的 max_execution_time 值。
当您在服务器端执行长时间的 php 代码时,您需要更改 php.ini 中的 max_execution_time 指令。但是浏览器不会等待你想要多长时间,所以你需要使用像 AJAX 这样的异步技术