例如,有一个非常简单的PHP脚本,用于更新数据库中的某些表,但这个过程需要很长时间(可能需要10分钟)。因此,即使用户关闭了浏览器,我也希望此脚本继续处理,因为有时用户不会等待,他们会关闭浏览器或转到其他网页。即使用户关闭浏览器,PHP脚本能否继续运行?
回答
直接回答你的问题,请参见ignore_user_abort
更广泛地说,你可能有一个架构问题就在这里。
如果许多用户可以启动这些东西,那么您会希望Web应用程序将作业添加到某种类型的队列中,并拥有一定数量的后台进程来咀嚼所有工作。
无论客户端在做什么,服务器端脚本都会继续执行。
编辑:顺便说一句,你确定你想要打开10分钟的网页吗?我建议你使用一个任务队列(其项目由cron及时执行)并将用户重定向到“好的,我在上面”页面。
如果脚本完全基于服务器(没有反馈给用户),即使客户端关闭,也会执行此操作。
PHP的通用体系结构是客户端向脚本发送请求,以向用户提供答复。如果没有返回给用户,即使用户不在另一边,脚本仍然会执行。更简单一点:在常规脚本中,它们在服务器和客户端之间没有固定的连接。
注意总是对的:http://php.net/manual/en/function.ignore-user-abort.php – timdev 2009-11-01 21:50:13
您可以使用包含时间和运行命令的crontab文件每20分钟运行一次PHP脚本,在这种情况下,它将是php脚本。
这是除了在这里问的问题... – jldupont 2009-11-01 21:49:37
是的。服务器不知道用户是否关闭了浏览器。至少它没有立即注意到。
否:服务器可能(取决于它的配置方式)不允许php脚本运行10分钟。在廉价的共享主机上,我不会依赖运行时间超过合理响应时间的脚本。
如果任务需要10分钟,请不要使用浏览器直接执行它。您有许多其他选项:
- 使用cronjob定期执行任务 。
- 让浏览器 请求插入新行到 数据库表,以便定期 的cronjob可以处理新行和 与 适当的参数
- 有 浏览器请求写的消息执行PHP脚本到 队列系统,其具有用户 监听这样的事件(然后 执行脚本)。
虽然其中一些建议可能是矫枉过正您的具体情况,关键,结合特点是取消夫妇从作业的执行浏览器请求,以便它可以异步完成。
如果您需要浏览器窗口随进度一起更新,则需要使用定期执行的AJAX请求来检索作业状态。
+1为我的答案更好,更具体的版本。 – timdev 2009-11-01 21:58:39
所以如果我想解除执行作业的浏览器请求,我怎么能请求另一个php脚本,而用户的当前请求继续正常。所以,当用户请求任何url时,这个请求将启动另一个脚本(它独立于用户浏览器和其他请求)。用户将继续在网站上正常冲浪 我该怎么做? – 2009-11-01 22:09:56
查看这些要点?这些都是做到这一点的方法。在大多数情况下,设置一个保存后台进程输入的小数据库表格可以正常工作。然后,您可以启动一些PHP脚本来执行作业,通过cron或其他方法。 – timdev 2009-11-01 22:19:11
PHP脚本将在客户端终止连接后继续运行(不这样做会带来安全风险),但最多只能到max_execution_time
(在php.ini中设置或通过PHP脚本设置,默认通常为30秒) ..
例如:
<?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
脚本超时并死亡。
- 1. .NET会话 - 持续会话,即使用户关闭浏览器
- 2. 即使在用户关闭应用程序后,是否有可能继续运行倒数计时器
- 3. 即使页面/浏览器关闭或刷新,多个定时器继续(在后台运行)
- 4. Visual Studio Android模拟器即使在关闭后也能继续运行
- 5. 检测用户浏览器是否关闭浏览器
- 6. 运行很长时间执行php脚本甚至浏览器关闭
- 7. 关闭浏览器会阻止PHP脚本执行完吗?
- 8. 在浏览器关闭时停止执行php脚本
- 9. 即使在浏览器关闭的情况下在后台运行功能
- 10. 的fsockopen并关闭在PHP连接,但继续执行脚本
- 11. Python脚本继续运行
- 12. 即使浏览器被客户端关闭,也使用PHP发送邮件
- 13. 运行在关闭浏览器
- 14. HTML5中的离线webapps - 关闭浏览器后继续?
- 15. 浏览器关闭后继续CakePHP会话
- 16. 即使浏览器关闭后,是否可以保持会话?
- 17. 关闭后继续运行程序
- 18. 即使应用程序关闭,也要继续进行通知
- 19. 使用Bash持续运行PHP脚本
- 20. 你能使用JavaScript来检测用户是否关闭了浏览器选项卡吗?关闭浏览器?或已经离开浏览器?
- 21. 当浏览器关闭。如何在php中关闭浏览器时运行sqlk查询
- 22. 调用PHP时,浏览器或浏览器选项卡关闭
- 23. 当浏览器关闭时PHP会在后台运行吗?
- 24. 为什么在用户关闭浏览器后symfony控制器会继续执行?
- 25. 即使在openGL窗口关闭后继续执行程序
- 26. 服务被android关闭后线程是否继续运行?
- 27. 如何使JS脚本继续航行后运行(谷歌浏览器控制台)
- 28. 继续运行一些蝙蝠脚本
- 29. 如果用户关闭浏览器,WCF服务是否工作
- 30. 检查浏览器是否已关闭
因此,如果我想解除执行作业的浏览器请求,我如何请求另一个php脚本,同时用户的当前请求继续正常。 因此,当用户请求任何网址时,此请求将启动另一个脚本(独立于用户浏览器和其他请求工作)。用户将继续在网站上正常冲浪 – 2009-11-01 22:09:04
好问题兄弟! +1 – 2011-08-31 06:01:27