如果我通过jquery ajax调用一个php文件,它包含一个脚本来做一些需要一段时间的东西 - 例如上传一个大视频 - 然后我关闭页面:php脚本是否继续加载视频?
Mör*_*rre 20
见这里:http: //php.net/manual/en/function.ignore-user-abort.php
Run Code Online (Sandbox Code Playgroud)int ignore_user_abort ([ bool $value ] )设置客户端断开连接是否应导致脚本中止.
当运行PHP作为命令行脚本,并且脚本的tty消失而脚本没有被终止时,脚本将在下次尝试写入任何内容时死亡,除非将值设置为TRUE
还有一个同名的PHP配置选项:http: //php.net/manual/en/misc.configuration.php
默认情况下,如果您不执行任何操作,则根据PHP手册,默认设置是中止脚本. http://php.net/manual/en/features.connection-handling.php
必要的更新
似乎我(不知不觉中)欺骗了我的"声望点",因为我没有提供(正确的)答案,但现在感谢测试并继续从" mellamokb " 轻推:
引用:"好的,我看了一下PHP源代码,如果我没有错过任何内容,我现在有了答案.只有当PHP收到错误尝试向用户输出内容时才会检查"ignore_user_abort"标志所以,根据我的理解,没有办法打断不产生任何输出的代码."
好吧,我并没有完全关闭,但重要的是要知道这一切都取决于你的脚本是否产生任何输出!
如果您阅读此内容,请查看下面的评论.
zza*_*rbi 15
通过Web服务器运行的PHP脚本将不会停止,直到:
当用户中止脚本时,PHP将继续运行,直到它尝试将某些内容发送回浏览器.
例如,即使用户中止,仍然会继续脚本:
while(true){
echo 'go'.PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)
它会永远持续下去,因为"回声",将写入缓冲区,缓冲区将不会被发送到浏览器,直到脚本完成,这是不会发生的.
用户中止后,以下脚本将立即停止:
while(true){
echo 'go'.PHP_EOL;
flush();
ob_flush();
}
Run Code Online (Sandbox Code Playgroud)
此脚本将停止,因为flush()和ob_flush()将强制PHP将其缓冲区发送到浏览器,如果用户已中止,将停止PHP脚本.在这种情况下,函数ignore-user-abort()将强制PHP忽略中止.
此外,如果您使用PHP会话,它们是另一个棘手的情况.例如,如果您正在进行AJAX,并且您实际上向PHP脚本发送了两个AJAX请求,并且该PHP脚本需要与session_start()进行会话.第一个AJAX查询将正常工作,但第二个将不得不等到第一个调用完成,因为第一个脚本已锁定会话.第一个脚本最终可能会使用session_write_close()过早地释放会话;