本文作者是 wokerman 的作者 walkor 的旧文, 搬运到此是希望对 PHP 开发的小伙伴有所帮助。
今天看到dewen里面有人问,如何用php实现浏览器跳转后继续执行后续代码,我写了个demo,在php-fpm环境下非常容易实现,fastcgi_finish_request即可。如果是其它容器,我想只能通过输出javascript到客户端实现跳转,然后后台继续执行。
作者提到的 dewen 是原来的德问社区,是一个计算机相关的邀请制问答社区,目前已经关停。
demo如下,php-fpm测试可用,apache php-cgi由于没有环境没有测试。
<?php
// 你要跳转的url
$url = "http://www.baidu.com/";
// 如果使用的是php-fpm
if(function_exists('fastcgi_finish_request')){
header("Location: $url");
ob_flush();
flush();
fastcgi_finish_request();
}else {
// Apache ?
header( 'Content-type: text/html; charset=utf-8' );
if(function_exists('apache_setenv'))apache_setenv('no-gzip', '1');
ini_set('zlib.output_compression', 0);
ini_set('implicit_flush', 1);
echo "<script>location='$url'</script>";
ob_flush();
flush();
}
// 这里是模拟你的耗时逻辑
sleep(2);
file_put_contents('/tmp/test.log', 'ok');