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