PHP主动断开与浏览器的连接

曾经整理过一篇《关于PHP连接处理中set_time_limit()、connection_status()和ignore_user_abort()深入解析》,是讲解浏览器客户端断开时,服务器PHP脚本的处理。

这篇文章,将讲解一下服务器PHP脚本怎样主动断开与浏览器的连接,主要方法是使用http协议header中的Content-Length和Connection

Content-Length的作用:浏览器接收到指定Content-Length大小的消息实体后,则会断开与服务器的连接。

Connection的作用:浏览器接收到Connection的Close或Keep-Alive后,决定是关闭连接还是继续使用当前的连接进下一次请求。

<?php

   /**
    * 自动断开与浏览器的连接
    * jiaofuyou
    */

    echo '1234567890';  //向浏览器输出的内容

    {//断开连接的代码
        $size=ob_get_length();
        header("Content-Length: $size");  //告诉浏览器数据长度,浏览器接收到此长度数据后就不再接收数据
        header("Connection: Close");      //告诉浏览器关闭当前连接,即为短连接
        ob_flush();
        flush();
    }  

    error_log(date("[Y-m-d H:i:s]")." > "."start" ."\n", 3 , "/usr/local/apache2219/logs/php_log");

    //断开连接后的执行长时间操作
    sleep(5);  

    echo 'test213';//浏览器接收不到了  

    error_log(date("[Y-m-d H:i:s]")." > "."end"   ."\n", 3 , "/usr/local/apache2219/logs/php_log");
    //可以查看错误日志是否延迟5秒后执行. 

?>

说明:

1、单独使用Content-length实际上连接并未断开,仅是浏览器停止接收信息,Connection: Close才是真正的告诉浏览器关闭连接。

2、指定Content-Length 对于 file_get_contents 没有任何意义;若想使用,请用curl。

如果想让PHP不停的向浏览器输出内容:

echo "1234567890"
ob_flush();
flush();

这样是不会立刻输出到浏览器的,可以这样

echo "1234567890
     "
//有换行时会立刻输出到浏览器
ob_flush();
flush();

或者:

echo "1234567890"
print str_pad("",10000);  //输出足够多的内容
ob_flush();
flush();

PHP主动断开与浏览器的连接,布布扣,bubuko.com

时间: 2024-10-13 11:44:52

PHP主动断开与浏览器的连接的相关文章

PHP 在 Nginx 下主动断开连接 Connection Close 与 ignore_user_abort 后台运行

这两天弄个PHP调用 SVN 同步 update 多台服务器更新的程序,为了避免 commit 的时候不会被阻塞卡半天得想个办法只请求触发,而不需要等待程序 update 完成返回结果这样耗时太长,所以研究过了下如何让PHP主动断开连接的方法.搞了一下午,发现很多问题,还好最终还是弄出来了,主要是 Nginx 太坑.. 废话不多说,下面上代码: /** * 主动断开与客户端浏览器的连接 * 如果是 Nginx 服务器需要输出大于等于 fastcgi_buffer_size 缓存的数据才能即时输出

在HTTP通讯过程中,是客户端还是服务端主动断开连接?

比如说:IE访问IIS,获取文件,肯定是要建立一个连接,这个连接在完成通讯后,是客户端Close了连接,还是服务端Close了连接.我用程序测模拟IE和IIS,都没有收到断开连接的消息,也就是都没有触发OnClose事件.我是用Socket建立的连接.如果两方面都没有主动断开连接,那么我猜测可能是传输的数据中有结束的标志,请问这个标志是怎样的?谢谢各位. 解决方案 ? 不知道iis是怎么弄得http的回应包中有个字段通常是close收到指定长度之后就应该断开的. HTTP 你的意思是B/S模式的

2014_7_25 关于server频繁主动断开

在我的server与下位机(硬件设备,无操作系统)交互过程中,需要我给下位机配置命令. 如果是正常的逻辑,下位机开开启server,我的程序去连接并发送操作命令,逻辑会非常简单.但是下位机的主从切换有很大困难,它或者只当主机,或者只作为从机.于是,软件这边做出了牺牲,写了很多恶心代码.哭.............. 首先,我在程序中自建了一个消息队列,该队列中的内容为程序需要对下位机主动调用的命令. 然后,开启监听. 在接收到cmd端口的连接后,我建立一个线程,在此线程中我不断地去消息队列中取数

SQL Server 断开某个数据库所有连接(还原的时候需要)

问题描述: SQL Server数据库备份还原后,在数据库名称后会出现"受限制访问"字样 解决办法: 右键点击数据库 -> 属性 -> 选项 -> 状态 -> 限制访问 -> 选择Multiple -> 确定. 问题描述: 在对SQL Server数据库进行还原时,提示:System.Data.SqlClient.SqlError:因为数据库正在使用,所以无法获得对数据库的独占访问权.(Microsoft.SqlServer.Smo).出现此问题的原

火狐浏览器下连接a下无法使用select下拉菜单

火狐浏览器下连接a下无法使用select下拉菜单:如果select下拉菜单包裹在链接a中,则无法实现选中效果,当然如此使用在实际应用中也是很少见的,不过下面还是做一下简单介绍,如何避免此种问题的出现,寄希望能够给需要者带来一定的帮助.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content=&

ZeroMQ接口函数之 :zmq_disconnect - 断开一个socket的连接

ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_disconnect zmq_disconnect(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_disconnect - 断开一个socket的连接 Synopsis int zmq_disconnect (void *socket, const char *endpoint); Description 函数zmq_disconnect() 会断开socket参数指定的socket与e

真机调试报错error ==Error Domain=NSURLErrorDomain Code=-1009 &quot;似乎已断开与互联网的连接。&quot;

真机调试报错error ==Error Domain=NSURLErrorDomain Code=-1009 "似乎已断开与互联网的连接." 请注意,错误代码是-1009,网上关于网络链接查询错误代码的网站很多,查询一下,会发现 -1009 kCFURLErrorNotConnectedToInternet NSURLErrorNotConnectedToInternet "The connection failed because the device is not con

卸载完百度影音以后天气助手还在,而且总是自己主动打开ie浏览器,解决方式

今天暴风影音不好用了.我就安装了百度影音,还有意外发现.相同的视频,用百度影音看不清楚,然后我就直接卸载了.结果卸掉以天气小助手还是在,而且总弹白色小框框,各种广告.最忍不了的是还自己主动打开ie浏览器,出来一些游戏,这样非常反感,可是又没办法通过第三方软件禁止.就一顿百度,结果发现了一个非常好的办法, 在C盘Program Files(x86)中找到tqxms_201508192213目录 ,里面自带一个卸载程序叫Uninstall,你点击,假设不是这个就是一个叫U什么的文件,图标是垃圾桶.一

火狐浏览器 无法连接服务器。Firefox 无法建立到 服务器的连接。

iis部署网站浏览出现火狐浏览器 无法连接服务器.Firefox 无法建立到 服务器的连接. 首先查看ip地址 开始——cmd-ipconfig 发现ip地址和部署网站的地址不一样 更改iis网站ip地址:右击网址——编辑绑定——编辑单击倒三角——选中你要更改的ip——确定