2011-12-31 22 views
0

如果用户发布到服务器并开始处理,则在此过程中不向用户发送任何内容(可能需要几秒钟,例如通过外部服务发送邮件),并且用户在完成之前转到另一个网站或页面在php中,当用户在服务器处理页面时转到另一个站点时会发生什么?

服务器通知了

服务器什么时候放弃?

服务器是否尝试完成处理?

有没有什么办法让一个函数在PHP的“原子”,这样,一旦开始,它是保证完成?

回答

2

默认和用户客户端浏览器的正确行为是,它应该通知页面加载已经取消了 - 原因并不重要 - 无论是用户压回键,停止键,点击另一个链接,或只是关闭浏览器。

默认情况下在PHP中 - 服务器收到此通知并退出处理页面。这取决于php.ini指令ignore_user_abort的设置 - 请参见this PHP documentation page

服务器在ignore_user_abort指令设置的行为。如果它设置为false(默认),则它只是停止处理请求。如果设置为true,则它将完成请求,因为它不会收到有关用户中止的任何通知。

,不建议用ignore_user_abort = true服务器范围内运行,所以我不建议你把它直接在php.ini文件。但是你可以把这段代码放在脚本的开始部分,这对你来说是至关重要的,并且在启动时始终完成:

ini_set('ignore_user_abort', true); 
+0

完美!谢谢!你说应该通知 - 在实践中,最近的浏览器做这个? – 2011-12-31 07:48:29

+1

是的,所有现代浏览器现在都这样做。 – Frodik 2011-12-31 07:50:46

相关问题