例如,有一个非常简单的PHP脚本用于更新数据库上的一些表格,但该过程需要很长时间(可能需要10分钟)。因此,即使用户关闭了浏览器,我也希望这个脚本能够继续处理,因为有时候用户不想等待并关闭了浏览器或者跳转到另一个网页。
这个 PHP 脚本会在客户端断开连接后继续运行(不这样做将是一种安全风险),但只能在 max_execution_time
之内保持运行状态(通常默认为30秒,可以在 php.ini 或 PHP 脚本中设置)。
例如:
<?php
$fh = fopen("bluh.txt", 'w');
for($i=0; $i<20; $i++) {
echo $i."<br/>";
fwrite($fh,$i."\n");
sleep(1);
}
fclose($fh);
?>
在浏览器中运行此代码,并在代码执行完成前关闭浏览器。你会发现,20秒后,该文件包含了所有$i的值。
将for循环的上限改为100而不是20,你会发现它只运行了0到29。由于PHP的max_execution_time
,脚本超时并停止运行。
echo "..."; flush(); ob_flush();
,会怎样呢?我认为脚本将终止,因为输出流将不再可用。 - ban-geoengineering您可以使用包含时间和要运行的命令的crontab文件,使PHP脚本每20分钟运行一次,在这种情况下,它将是php脚本。
是的。服务器不知道用户是否关闭了浏览器。至少它不会立即注意到。
不会:服务器可能(取决于其配置方式)不允许php脚本运行10分钟。在廉价共享主机上,我不会依赖脚本运行超过合理的响应时间。