本节内容:
php中使用 Content-Length 让浏览器自动断开连接。
Content-Length的作用:浏览器接收到指定Content-Length大小的消息实体后,则会断开与服务器的连接。
相关阅读:php判断客户端浏览器是否断开连接的代码 
例子:
 
复制代码 代码示例:
<?php
/**
* 自动断开与浏览器的连接
* edit: www.jb200.com
*/
echo '1234567890';  
{//断开连接的代码  
$size=ob_get_length();  
header("Content-Length: $size");  
ob_end_flush();  
flush();  
}  
error_log('start:'.date('Y-m-d H:i:s'));  
//断开连接后的执行长时间操作  
sleep(5);  
echo 'test213';//浏览器接收不到了  
error_log('end:'.date('Y-m-d H:i:s'));//可以查看错误日志是否延迟5秒后执行. 
把此功能封装成一个类,代码如下:
 
复制代码 代码示例:
<?php
final class HttpConnection{  
    //只能执行一次的断开连接  
    public static function CloseConnection(){  
        static $doed = false;  
        if($doed || headers_sent())return;  
        $contents = '';  
        while(ob_get_level()>1){  
            $contents = ob_get_contents().$contents;  
            ob_end_clean();  
        }  
          
        $size=ob_get_length().strlen($contents);  
        $GLOBALS['out_http_data'] = ob_get_contents().$contents;  
          
        //突破PHP运行时限  
        set_time_limit(0);  
        //无视请求断开  
        ignore_user_abort(true);  
          
        //设置正文大小,浏览器收到足够的内容就会断开  
        header("Content-Length: $size");  
          
        echo $contents;  
          
        //输出正文内容  
        ob_end_flush();  
        flush();  
        $doed = true;  
    }  
      
    //只能执行一次的自动断开连接  
    public static function RegisterShutdownClose(){  
        static $doed = false;  
        if($doed)return;  
        //加一层保护  
        ob_start();  
        register_shutdown_function(array(__CLASS__,'CloseConnection'));  
        $doed = true;  
    }  
} 
下面看看如何调用以上代码,自动断开与浏览器的连接吧。
例1,
 
复制代码 代码示例:
<?php
date_default_timezone_set('Asia/Shanghai');  
echo '1234567890';  
  
HttpConnection::CloseConnection();  
error_log('start:'.date('Y-m-d H:i:s'));  
  
//断开连接后的执行长时间操作  
sleep(5);  
  
echo 'test213';//浏览器接收不到了  
error_log('end:'.date('Y-m-d H:i:s'));//可以查看错误日志是否延迟5秒后执行. 
例2,
 
复制代码 代码示例:
<?php
HttpConnection::RegisterShutdownClose();  
  
date_default_timezone_set('Asia/Shanghai');  
echo '1234567890';  
register_shutdown_function('test');  
  
function test(){  
    error_log('start:'.date('Y-m-d H:i:s'));  
  
    //断开连接后的执行长时间操作  
    sleep(5);  
  
    echo 'test213';//浏览器接收不到了  
    error_log('end:'.date('Y-m-d H:i:s'));//可以查看错误日志是否延迟5秒后执行.  
} 
说明:
1、实际上连接并未断开,仅是浏览器停止接收信息。
2、指定Content-Length 对于 file_get_contents 没有任何意义;若想使用,请用curl。