如何在用户中止了浏览器之后,让php程序继续运行?

来源:百度文库 编辑:神马文学网 时间:2024/04/28 00:29:00
标题: 忘了,问一下:如何在用户中止了浏览器之后,让php程序继续运行?[打印本页]
作者: spiceboy     时间: 2006-4-6 17:36     标题: 忘了,问一下:如何在用户中止了浏览器之后,让php程序继续运行?
有个参数什么的吧。
是什么参数啊?
作者: 北京野狼     时间: 2006-4-6 17:40
作者: spiceboy     时间: 2006-4-6 17:47
不用回了。
知道了。
ignore_user_abort作者: 北京野狼     时间: 2006-4-6 17:58
你再好好想想。作者: spiceboy     时间: 2006-4-6 18:00
就是它啊。还想啥?
算了,不跟你说话,你肯定又打算钻我牛角尖。
可我需要的就是这个。作者: 北京野狼     时间: 2006-4-6 18:04
应该说您自己的牛角太大不用钻。  你总是不考虑清楚就出来发表意见, 那就不要抱怨。这不是好态度。
你需要的不是这个。
[ 本帖最后由 北京野狼 于 2006-4-6 18:05 编辑 ]作者: spiceboy     时间: 2006-4-6 18:12
好好。
我需要的不是这个。
不是这个。。。。。
我再去重新找。作者: 北京野狼     时间: 2006-4-6 18:15
服务器如何知道用户中止了浏览器 ?作者: spiceboy     时间: 2006-4-6 18:19
别急啊
我不是正在找吗
找到了再告诉你。作者: 北京野狼     时间: 2006-4-6 18:26
找到之后,别忘了通知官方更新一下http协议作者: spiceboy     时间: 2006-4-6 19:20
好的,没问题。作者: yzmxf     时间: 2006-4-6 19:24
呵呵
感觉没有可能作者: 韩三普     时间: 2006-4-6 23:59
这个功能要配置Apache实现。当你关了浏览器,apache仍然会做为进程工作,我曾经用这个功能,抓过几G的图片作者: spiceboy     时间: 2006-4-7 00:02
那楼上的你改http协议了没?作者: achieverain     时间: 2006-4-7 00:05
曾经讨论过这个问题。你找一下老帖子作者: mike519     时间: 2006-4-7 00:32
北京野狼 有个性
spiceboy  还没明白怎么回事啊作者: 北京野狼     时间: 2006-4-7 09:45
其实与http协议和apache没什么关系。 你想想qq, 等客户端软件, 断网了服务器能立刻知道吗?
只要客户端发出请求,服务器都是执行完了再说。作者: wobushiwo     时间: 2006-4-7 11:17
当一个请求完了,服务器和客户端之间就不存在状态了
比如 客户端请求,服务端因为什么事响应太慢,这时突然关掉浏览器或点“停止”
或是服务器在给客户端发送数据时,执行了上面的操作,服务器才能知道
总而言之,要捕抓到这一动作,除非是两者在通信时发生的事情
跟HTTP协议没关系,这是socket层面的,它只是规范信息传递的格式作者: wobushiwo     时间: 2006-4-7 11:19
好像有点跑题了。。。
QUOTE:
如何在用户中止了浏览器之后,让php程序继续运行?
一个完整的请求过去,服务器就会跑完这个请求了啊。。。作者: 网络混混     时间: 2006-4-7 11:46
register_shutdown_function作者: spiceboy     时间: 2006-4-7 13:13
carlos at fischerinformatica dot com dot br
31-Jan-2002 10:58
Very very useful!
I was building a chat and I wanted my script to detect when the browser was closed, so the user could be deleted from the online_users table.
echo str_repeat(" ",300);
ignore_user_abort(true); //this way, the user can stop the output, but not the script.
while (true) {
echo "test
\n";
flush();
sleep(2);
if (connection_status()!=0){
include (‘dbconnect.inc‘);
$sql="delete from online_users where online_user=$user";
$sql_exec=pg_exec($vChatDB, $sql);
die(); //kills the script
}
}
?>作者: 北京野狼     时间: 2006-4-7 13:16
CODE:
[Copy to clipboard]
I was building a chat and I wanted my script to detect when the browser was closed
如果你也做聊天室,可以考虑。作者: spiceboy     时间: 2006-4-7 13:28
wrote:
vi ignore.php
CODE:
[Copy to clipboard]
Set_Time_Limit(0);
ignore_user_abort(true);
echo "begin, please close or stop your browser in 10 seconds\n";
sleep(10);
touch("test.txt");
echo "end";
?>
I browsed ignore.php with my browser, 10 seconds later, test.txt was created.
Then I deleted "test.txt",  refreshed this page and closed it within 3 seconds.
After a few seconds, "test.txt" was created as before.
It showed me the case that the aborting of users‘ browsing had been ignored.作者: spiceboy     时间: 2006-4-7 13:32
I wrote a simple function that can "spawn" another thread within the webserver by making async http request. The page that is being spawned can call ignore_user_abort() and do whatever it wants in the background...
function http_spawn($page)
{
$basepath=ereg_replace(‘[^/]*$‘, ‘‘, $_SERVER[‘PHP_SELF‘]);
$cbSock=fsockopen(‘localhost‘, $_SERVER[‘SERVER_PORT‘], $errno, $errstr, 5);
if ($cbSock)
{
fwrite($cbSock, "GET {$basepath}{$page} HTTP/1.0\r\n"
."Host: {$_SERVER[‘HTTP_HOST‘]}\r\n\r\n");
}
}
?>
Example:
if ($search_initialized)
http_spawn("ftindex.php");
?>作者: spiceboy     时间: 2006-4-7 13:41
CODE:
[Copy to clipboard]
ignore_user_abort(true);
// 1.1 处理用户提交数据
$Adodb->StartTrans();
.........................
.........................
$Adodb->CompleteTrans();
/* 用户可能在1.1执行完成后,而2.1没有执行前的此处关闭浏览器或死机? */
// 1.2 处理另一部分数据
$Adodb->StartTrans();
.........................
.........................
$Adodb->CompleteTrans();
// 1.3 校验整个数据的一致性和完整性,并写错误日志
dosomething();
?>
当一个页面里放置了2个或2个以上的事务操作。需要这个页面不被中断。以保持数据的一致性。作者: 北京野狼     时间: 2006-4-7 13:54
你真好有趣啊, 还是再想想吧
_xyz