首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >即使在关闭页面后,脚本也会继续运行吗?

即使在关闭页面后,脚本也会继续运行吗?
EN

Stack Overflow用户
提问于 2011-05-14 03:57:07
回答 5查看 24.7K关注 0票数 30

如果我通过jquery ajax调用一个php文件,其中包含一个脚本来做一些需要一段时间的事情,比如上传一个大的视频,然后我关闭页面: php脚本是否继续加载视频?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-14 04:00:51

查看此处:http://php.net/manual/en/function.ignore-user-abort.php

布尔整数ignore_user_abort (

$value )

设置客户端断开连接是否应导致脚本中止。

当PHP作为命令行脚本运行时,如果脚本的tty消失而不会终止脚本,则脚本将在下次尝试写入任何内容时终止,除非将value设置为TRUE

还有一个同名的PHP配置选项:http://php.net/manual/en/misc.configuration.php

默认情况下,如果您什么也不做,根据PHP手册,默认情况下将中止脚本。http://php.net/manual/en/features.connection-handling.php

必要的更新

看起来我(在不知不觉中)骗到了“名誉点”,因为我没有提供(正确的)答案,但现在要感谢测试和来自“”的持续微调:

Quote:“好的,我看了一下PHP的源代码,如果我没有遗漏任何东西,我现在有了答案。"ignore_user_abort”标志只在PHP接收到试图输出给用户的错误时才会被检查。所以,在我的理解中,没有办法中断不产生任何输出的代码。“

好吧,我并不是完全错了,但重要的是要知道这一切都取决于你的脚本是否产生了任何输出!

如果你读了这篇文章,也一定要看看下面的评论。

票数 20
EN

Stack Overflow用户

发布于 2011-05-14 05:16:59

在以下情况之前,通过web服务器运行的PHP脚本不会停止:

  • 有人杀死服务器
  • 服务器杀死php scrip

当用户中止脚本时,PHP将继续运行,直到它尝试将某些内容发送回浏览器。

例如,即使用户中止,静态脚本也将继续执行:

代码语言:javascript
运行
复制
while(true){
    echo 'go'.PHP_EOL;
}

它将永远持续下去,因为"echo“将写入缓冲区,直到脚本结束,缓冲区才会被发送到浏览器,而这永远不会发生。

一旦用户中止,以下脚本将立即停止:

代码语言:javascript
运行
复制
while(true){
    echo 'go'.PHP_EOL;
    flush();
    ob_flush();
}

该脚本将停止,因为flush()和ob_flush()将强制PHP将其缓冲区发送到浏览器,这将在用户中止时停止PHP脚本。在这种情况下,函数ignore-user- abort ()将强制PHP忽略abort。

此外,如果您使用的是PHP会话,这是另一个棘手的情况。例如,如果您正在进行AJAX,并且您实际上向一个PHP脚本发送了两个AJAX请求,并且该脚本需要与session_start()进行会话。第一个AJAX查询将正常工作,但是第二个查询必须等到第一个调用完成,因为第一个脚本锁定了会话。第一个脚本最终可能过早地释放session_write_close()会话;

票数 16
EN

Stack Overflow用户

发布于 2011-05-14 04:06:00

默认情况下为no。请参阅Connection Handling文档,特别是:

您可以决定是否希望客户端断开连接以使脚本中止。有时,即使没有远程浏览器接收输出,总是让脚本运行到完成也是很方便的。但是,默认行为是在远程客户端断开连接时中止脚本。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5997102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档