如果用户发布到服务器并开始处理,则在执行此操作时不向用户发送任何内容(可能需要几秒钟,例如,通过外部服务发送邮件),并且用户在完成之前会转到另一个站点或页面
是否已通知服务器?
服务器何时放弃?
服务器是否尝试完成处理?
有没有办法在php中创建一个“原子”函数,这样一旦开始,它可以保证完成?
答案 0 :(得分: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);