用php,怎样检测数据是否到达了客户端(浏览器)? 本帖最后由 bingfenghzy 于 2011-05-22 12:50:35 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果没用缓冲的话:echo 'hahhah';这里执行语句时上面就显示了。 这样说可能更详细一点:客户端请求后,服务端的程序延时60秒后才输出,但客户端立即就关闭了,60秒后,服务端就输出,这时肯定是输出不了到客户端的了,但后台的php怎样判断呢? 呵呵,对,我的意思就是php怎样判断客户端已经断开了连接? 断开链接?我想到的办法就是用JS的onunload事件触发Ajax提交给服务器PHP。不知道可不可行 在显示页面用ajax想php发送请求(在页面加载完毕后),如果请求了说明数据到达了,没请求就是没到达 在php长连接中,后台的php程序有个延时,循环处理的操作,可客户端关闭了,但服务端也还在运行啊,能不能再客户端关闭后,服务端就结束呢? !这个我想可以用Session来解决。但是我觉得php的机制里应该有关于这些方面的机制才对的! 这根本不是php的问题, 是http无状态协议决定一切, 无论你用什么语言去发送html都一样, 以浏览器作为客户端的通迅, 是否能知道客户有断线, 有回发数据, 检测数据, 这些都由浏览器决定。1, 安装你自己的浏览器插件,或利用浏览器通用自带插件,2, 服务端用session超时来判断, 但不准确。 补充上面的, 第二个方案, 如果客户端断网, 即掉线, 那第一个方案,如什么ajax, flax, 之类就残废了,所以大多数做法, 二者兼用。 http是用TCP协议的,若后台的数据没发送成功,应该有机制检测到的,呵呵,我觉得应该是这样的。但就是不知道用php怎么处理? http是基于tcp协议的,应该会保证数据的传输的,若传输失败,应该有错误码的,但就是不知道php可以检测到不? http://php.net/manual/en/function.ignore-user-abort.php及相关函数 看看这个是否可以判断:connection_aborted() 函数检查是否断开客户机。如果已终止连接,则该函返回 1,否则返回 0。 学习,学习http是基于tcp协议的,应该会保证数据的传输的,若传输失败,应该有错误码的,但就是不知道php可以检测到不? 这个试了,不行,客户端已经关闭了,但后台仍然在运行。我想是不是后台的运行中需要一直有输出,只要某一输出没成功,后台就能收到客户端已经断开的信息,不然后台还真不知道客户端的情况,呵呵。不过输出没成功的的返回是什么?php是怎么检测的?还不知道啊。 http协议经由request,response之后就断开了。哪有什么php长连接。step1: 客户端 -> 服务器step2: 客户端 <- 服务器你要明白,这两个步骤都在一次连接中,而不是两次连接。举个例子来说:我从北京跑到上海敲你家门问你叫什么,你开门后立刻告诉我你叫张三。我知道后就回家了。而不是我从北京跑到上海敲你家门问你叫什么之后立刻回家,你再从上海来到北京告诉我你叫张三。 你可以用js的setInterval来监听。60s内没有出现异常。就告诉服务器端。其实就是一个模拟服务器的推技术的问题。类似的有聊天室的实现。不过用setInterval可能会占用一些资源 这个要用tcp 的socket,如果没断线客户端应该显示了,或者客户端显示完给个回执,然后继续显示http协议不管客户端是否收到 我认为应该使用客户端的ajax主动告诉服务器是否已经断开了用这个在客户端延时不断反馈状况window.setInterval('ajax????;',5000); cookie能行不?js能不能创建cookie?若能的话,js建一个cookie,用php判断这个cookie是否存在? 我也试了。还是不行。贴一段从网上得来的代码: 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。 页面输出echo 后 同时输出一个js 函数 触发ajax 可能很多热心的网友都没明白我的意思,我再说一下我的意思:客户端请求后,服务端的程序延时60秒后才输出,但客户端在发出请求后立即就关闭了,60秒后,服务端就输出,这时肯定是输出不了到客户端的了,但后台的php怎样判断呢?这里用ajax,客户端返回数据,等等。这些都是行不通的。问题主要就是服务端怎么检测客户端已经关闭,换言之,就是服务端怎么检测到数据没发送成功? 看来php还真的无法检测数据的输出成功与否了? 你说的长连接是不存在的。HTTP是请求服务器后获取信息,然后通过HTML来展现。当你获取信息完成后,就算断网,HTML页面也是可以展现的。上面所说的客户端的方法都必须在断线以前执行。例如说到ajax。页面的unonload()可以做到(窗口关闭前执行)。但是断网就不行了。 这并不是php不能做, 而是http协议决定的, 其实php是可以检测数据的输出成功与否,关键前提你是用的什么协议, 当然你用不同协议, 肯定有不同的php处理方法去实现你要的功能。 多表联合查询方案 “一个不知名的错误” 求大虾们一个问题!!! PHP 链接DBF 唠叨求救:flash跳转的页面无法检测来源地址,怎么解决这个问题? 有个问题,始终不明白,如何把固定值传递给类内部的变量哪?(高分赠送) 请教关于APACHE 的问题? [急求]php+Oracle论坛源代码及安装版 PHP连接Oracle问题? PHP页面数据实时更新问题 php如何在两个页面之间传值 求php数组在Smarty模版页循环显示问题
这里执行语句时上面就显示了。
断开链接?
我想到的办法就是用JS的onunload事件触发Ajax提交给服务器PHP。
不知道可不可行
以浏览器作为客户端的通迅, 是否能知道客户有断线, 有回发数据, 检测数据, 这些都由浏览器决定。1, 安装你自己的浏览器插件,或利用浏览器通用自带插件,
2, 服务端用session超时来判断, 但不准确。
那第一个方案,如什么ajax, flax, 之类就残废了,所以大多数做法, 二者兼用。
及相关函数
http是基于tcp协议的,应该会保证数据的传输的,若传输失败,应该有错误码的,但就是不知道php可以检测到不?
我想是不是后台的运行中需要一直有输出,只要某一输出没成功,后台就能收到客户端已经断开的信息,不然后台还真不知道客户端的情况,呵呵。
不过输出没成功的的返回是什么?php是怎么检测的?还不知道啊。
step1: 客户端 -> 服务器
step2: 客户端 <- 服务器你要明白,这两个步骤都在一次连接中,而不是两次连接。
举个例子来说:
我从北京跑到上海敲你家门问你叫什么,你开门后立刻告诉我你叫张三。我知道后就回家了。
而不是我从北京跑到上海敲你家门问你叫什么之后立刻回家,你再从上海来到北京告诉我你叫张三。
用这个在客户端延时不断反馈状况
window.setInterval('ajax????;',5000);
贴一段从网上得来的代码:
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。
但客户端在发出请求后立即就关闭了,
60秒后,服务端就输出,这时肯定是输出不了到客户端的了,但后台的php怎样判断呢?这里用ajax,客户端返回数据,等等。这些都是行不通的。
问题主要就是服务端怎么检测客户端已经关闭,换言之,就是服务端怎么检测到数据没发送成功?
当你获取信息完成后,就算断网,HTML页面也是可以展现的。
上面所说的客户端的方法都必须在断线以前执行。例如说到ajax。
页面的unonload()可以做到(窗口关闭前执行)。但是断网就不行了。
关键前提你是用的什么协议, 当然你用不同协议, 肯定有不同的php处理方法去实现你要的功能。