我想知道 - 因为我写了一段代码,可以更新多达10,000行,并可能需要几秒钟才能完成,如果通过ajax请求访问文件时,发送查询发送到PHP文件,然后关闭浏览器,文件得到完全执行?假设完成请求大约需要25秒,用户可能不会等待25秒,足以“ping”这个文件并让用户在mysql查询发生时浏览或关闭其浏览器窗口?浏览器关闭时服务器是否“关闭”? PHP - MYSQL
回答
一旦关闭浏览器,它就会在获得答复之前断开与服务器的连接。我不知道在这种情况下服务器有多不同,但我认为大多数服务器会中止正在处理的线程来回复请求。
此外,事情可能会因不同的操作而不同 - 即文件I/O或数据库操作。如果它是一个原子数据库操作,我的假设是,它会完成任何操作。
但OP没有要求假设(并且您知道他们[对他们说](http://www.youtube.com/看?v = wg4trPZFUwc))。请参考手册,不要猜测。 – CodeCaster
该请求具有3份
- 连接到网络服务器,它是由查询在DB服务器运行的服务器
- 执行
- PHP脚本浏览器
当你关闭浏览器,关闭与服务器的连接。服务器可能会或可能不会终止已启动的PHP脚本(如果PHP作为apache模块运行,它将被终止,除非调用ignore_user_abort)。此外,Web服务器可能会有请求的时间限制,并杀死脚本或仅向客户端发送连接超时消息,而不会终止脚本,但不会让其有机会向浏览器发送任何内容。
这是一个棘手的部分 - 更新在数据库中运行,它不会被Web服务器杀死,也不会被PHP杀死。
所以你想要实现的是ping一个PHP脚本,即执行查询,但客户端不会等待结果。您可能希望或不希望查询本身是异步的(PHP脚本不要等待查询),但是您必须告诉客户端请求已完成,例如通过发送内容长度为0,并刷新输出(实际上是http头文件),并使用ignore_user_abort运行PHP,以便继续执行。
使用ignore-user-abort继续运行该客户端已断开,即使脚本
ignore_user_abort(true);
set_time_limit(0);
您可以使用connection_status跟踪如果连接已经断开
if (connection_status()!=0) { //connection disconnected
通常不会,但您的脚本通过ABORTED
状态。
更多细节在手册中有关连接处理: http://www.php.net/manual/en/features.connection-handling.php
在PHP内部,连接状态得以维持。有3种 可能的状态:
0 - 师范大学
1 - 中止
2 - TIMEOUT
当PHP脚本运行正常正常状态时,是有效的。如果 远程客户端断开连接,ABORTED状态标志打开。 A 远程客户端断开连接通常是由用户点击其“停止”按钮导致的。
- 1. 关闭浏览器(PHP)
- 2. 关闭浏览器
- 3. 检查浏览器是否已关闭
- 4. 如何在关闭浏览器窗口时关闭本地tomcat服务器?
- 5. 如果用户关闭浏览器,WCF服务是否工作
- 6. 检测用户浏览器是否关闭浏览器
- 7. 在浏览器关闭
- 8. 调用PHP时,浏览器或浏览器选项卡关闭
- 9. 浏览器关闭时运行服务器端函数
- 10. 关闭弹出窗口关闭直到浏览器关闭
- 11. 铬:当浏览器关闭
- 12. 饼干关闭浏览器
- 13. 关闭浏览器警报
- 14. SetTimeout在浏览器关闭
- 15. 在浏览器关闭
- 16. 关闭浏览器事件
- 17. 使Web浏览器关闭
- 18. 浏览器关闭事件
- 19. 浏览器关闭和asp.net
- 20. XPages关闭浏览器
- 21. 检查websocket服务器是否关闭
- 22. MacPorts的服务器是否关闭?
- 23. 关于浏览器关闭事件
- 24. 关闭浏览器清除PHP会话
- 25. PHP ob_end_flush()不关闭浏览器连接
- 26. PHP会议上就关闭浏览器
- 27. 浏览器关闭时会话cookie是否过期?
- 28. 关闭浏览器或标签时关闭Asp.Net会话
- 29. Spring Roo - 在浏览器关闭时关闭会话
- 30. GWT:如何在关闭浏览器时关闭会话
只是一个猜测,但我会说,一旦命令发送,浏览器的工作就完成了。熟悉打印工作可能:您可以关闭图片,打印图片 – Sprottenwels