假设我从 jQuery 向后端 PHP 脚本发出 AJAX HTTP 请求。发出请求后,PHP 脚本开始运行并发挥其魔力。假设我随后更改为另一个网站,远离发出原始 AJAX 请求的网站。同样,我在 PHP 脚本完成之前执行此操作,并且有时间返回 HTTP 响应。即使我在收到 HTTP 响应之前切换到另一个网站,PHP 脚本是否会完成运行并执行其操作?
所以顺序是这样的。
- 我在网站 www.xyz.com
- 我有一个 jQuery 处理程序,可以启动对 blah.php 的 AJAX 请求
- blah.php 开始运行
- 我很快就访问了网站 www.abc.com,没有等待 blah.php 的响应
blah.php 发生了什么事?执行还在继续吗?停了吗?我的意思是它没有机会回应,所以......
这可能取决于您的服务器配置,但是一般来说,尽管 HTTP 连接已关闭,脚本仍将继续执行.
我已经使用 Apache 2 + PHP 5 作为 mod_php 对此进行了测试。我期望 PHP 与 CGI 以及其他网络服务器有类似的行为,但不确定。
确定您的配置的最佳方法是:@tdammers https://stackoverflow.com/users/406323/tdammers建议:设置如下所示的测试脚本并监视日志。
<?php
error_log('Test script started.');
for ($i = 1; $i < 13; $i++) {
sleep(10);
error_log('Test script got to ' . (10 * $i) . ' seconds.');
}
error_log('Test script got to the end.');
?>
访问此脚本(位于/test.php
或其他)然后在获得任何结果之前,请在浏览器上点击“停止”。这相当于在 XHR 返回之前离开。您甚至可以将其作为 XHR 的目标并导航离开。
然后检查您的错误日志:您应该有一个开始,然后每 10 秒发送一条消息,持续两分钟,然后结束。您可以修改多高$i
如果您也想测试的话,可以确保您的脚本达到预期的最大执行时间。
你不必使用error_log()
- 您可以写入文件,或在服务器上进行其他一些持久更改,无需保持客户端连接打开即可检查这些更改。
脚本执行时间可能会在此之前停止,因为max_execution_time
php.ini 指令 - 但无论如何,这应该与网络服务器超时时不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)