有没有办法在PHP中关闭连接(基本上告诉浏览器,而不是没有更多的数据),但继续处理.我想到的具体情况是我想要提供缓存数据,然后如果缓存已过期,我仍然会提供缓存数据以获得快速响应,关闭连接,但继续处理以重新生成并缓存新数据.基本上唯一的目的是使网站看起来更具响应性,因为在用户等待内容重新生成时不会偶尔出现延迟.
更新:
PLuS最接近我正在寻找的答案.为了澄清一些人,我正在寻找能够实现以下步骤的东西:
更新:
这很重要,它必须是纯粹的PHP解决方案.安装其他软件不是一种选择.
Ada*_*nez 24
如果在fastcgi下运行,你可以使用非常好的:
fastcgi_finish_request();
http://php.net/manual/en/function.fastcgi-finish-request.php
更多详细信息可在重复的答案中找到.
End*_*age 14
我终于找到了解决方案(感谢Google,我只是不得不继续尝试不同的搜索词组合).感谢此页面上arr1的评论(它大约是页面的三分之二).
<?php
ob_end_clean();
header("Connection: close");
ignore_user_abort(true);
ob_start();
echo 'Text the user will see';
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush(); // All output buffers must be flushed here
flush(); // Force output to client
// Do processing here
sleep(30);
echo('Text user will never see');
Run Code Online (Sandbox Code Playgroud)
我还没有真正测试过这个,但是,简而言之,你发送了两个标题:一个告诉浏览器确切的数据,然后告诉浏览器关闭连接(只有在收到预期的数量后才会内容).我还没有测试过这个.
小智 7
您可以通过将时间限制设置为无限制并忽略连接来实现
<?php
ignore_user_abort(true);
set_time_limit(0);
Run Code Online (Sandbox Code Playgroud)
另见:http://www.php.net/manual/en/features.connection-handling.php