本帖最后由 bingfenghzy 于 2011-05-22 12:50:35 编辑

解决方案 »

  1.   

    如果没用缓冲的话:echo 'hahhah';
    这里执行语句时上面就显示了。
      

  2.   

    这样说可能更详细一点:客户端请求后,服务端的程序延时60秒后才输出,但客户端立即就关闭了,60秒后,服务端就输出,这时肯定是输出不了到客户端的了,但后台的php怎样判断呢?
      

  3.   

    呵呵,对,我的意思就是php怎样判断客户端已经断开了连接?
      

  4.   


    断开链接?
    我想到的办法就是用JS的onunload事件触发Ajax提交给服务器PHP。
    不知道可不可行
      

  5.   

    在显示页面用ajax想php发送请求(在页面加载完毕后),如果请求了说明数据到达了,没请求就是没到达
      

  6.   

    在php长连接中,后台的php程序有个延时,循环处理的操作,可客户端关闭了,但服务端也还在运行啊,能不能再客户端关闭后,服务端就结束呢?
      

  7.   

    !这个我想可以用Session来解决。但是我觉得php的机制里应该有关于这些方面的机制才对的!
      

  8.   

    这根本不是php的问题, 是http无状态协议决定一切, 无论你用什么语言去发送html都一样, 
    以浏览器作为客户端的通迅, 是否能知道客户有断线, 有回发数据, 检测数据, 这些都由浏览器决定。1, 安装你自己的浏览器插件,或利用浏览器通用自带插件,
    2, 服务端用session超时来判断, 但不准确。
      

  9.   

    补充上面的, 第二个方案, 如果客户端断网, 即掉线, 
    那第一个方案,如什么ajax, flax, 之类就残废了,所以大多数做法, 二者兼用。
      

  10.   

    http是用TCP协议的,若后台的数据没发送成功,应该有机制检测到的,呵呵,我觉得应该是这样的。但就是不知道用php怎么处理?
      

  11.   

    http是基于tcp协议的,应该会保证数据的传输的,若传输失败,应该有错误码的,但就是不知道php可以检测到不?
      

  12.   

    http://php.net/manual/en/function.ignore-user-abort.php
    及相关函数
      

  13.   

    看看这个是否可以判断:connection_aborted() 函数检查是否断开客户机。如果已终止连接,则该函返回 1,否则返回 0。
      

  14.   

    学习,学习
    http是基于tcp协议的,应该会保证数据的传输的,若传输失败,应该有错误码的,但就是不知道php可以检测到不?
      

  15.   

    这个试了,不行,客户端已经关闭了,但后台仍然在运行。
    我想是不是后台的运行中需要一直有输出,只要某一输出没成功,后台就能收到客户端已经断开的信息,不然后台还真不知道客户端的情况,呵呵。
    不过输出没成功的的返回是什么?php是怎么检测的?还不知道啊。
      

  16.   

    http协议经由request,response之后就断开了。哪有什么php长连接。
    step1: 客户端 -> 服务器
    step2: 客户端 <- 服务器你要明白,这两个步骤都在一次连接中,而不是两次连接。
    举个例子来说:
    我从北京跑到上海敲你家门问你叫什么,你开门后立刻告诉我你叫张三。我知道后就回家了。
    而不是我从北京跑到上海敲你家门问你叫什么之后立刻回家,你再从上海来到北京告诉我你叫张三。
      

  17.   

    你可以用js的setInterval来监听。60s内没有出现异常。就告诉服务器端。其实就是一个模拟服务器的推技术的问题。类似的有聊天室的实现。不过用setInterval可能会占用一些资源
      

  18.   

    这个要用tcp 的socket,如果没断线客户端应该显示了,或者客户端显示完给个回执,然后继续显示http协议不管客户端是否收到
      

  19.   

    我认为应该使用客户端的ajax主动告诉服务器是否已经断开了
    用这个在客户端延时不断反馈状况
    window.setInterval('ajax????;',5000);
      

  20.   

    cookie能行不?js能不能创建cookie?若能的话,js建一个cookie,用php判断这个cookie是否存在?
      

  21.   

    我也试了。还是不行。
    贴一段从网上得来的代码:
            ignore_user_abort(false);
    set_time_limit(0);
    echo 'Testing connection handling in PHP';
    while(1)
    {
    if(connection_status() != CONNECTION_NORMAL)
    {
    file_put_contents('E:/tian.txt','--hHHAhhhshsh--',APP_FILE);
    break;
    }
    sleep(10);
    }
    执行后,客户端关闭了,connection_status()仍然检测不到。文件E:/tian.txt下仍然没有内容。同时问一下:connection_status()这个函数在什么情况下可以检测到客户端已经断开?
    试了很多,发现connection_status()的返回值一直都是:CONNECTION_NORMAL。
      

  22.   

    页面输出echo 后 同时输出一个js 函数  触发ajax 
      

  23.   

    可能很多热心的网友都没明白我的意思,我再说一下我的意思:客户端请求后,服务端的程序延时60秒后才输出,
    但客户端在发出请求后立即就关闭了,
    60秒后,服务端就输出,这时肯定是输出不了到客户端的了,但后台的php怎样判断呢?这里用ajax,客户端返回数据,等等。这些都是行不通的。
    问题主要就是服务端怎么检测客户端已经关闭,换言之,就是服务端怎么检测到数据没发送成功?
      

  24.   

    看来php还真的无法检测数据的输出成功与否了?
      

  25.   

    你说的长连接是不存在的。HTTP是请求服务器后获取信息,然后通过HTML来展现。
    当你获取信息完成后,就算断网,HTML页面也是可以展现的。
    上面所说的客户端的方法都必须在断线以前执行。例如说到ajax。
    页面的unonload()可以做到(窗口关闭前执行)。但是断网就不行了。
      

  26.   

    这并不是php不能做, 而是http协议决定的, 其实php是可以检测数据的输出成功与否,
    关键前提你是用的什么协议, 当然你用不同协议, 肯定有不同的php处理方法去实现你要的功能。