免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3006 | 回复: 3
打印 上一主题 下一主题

php怎么提早输出页面结束信息 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-07 19:14 |只看该作者 |倒序浏览
比如我一个php程序需要执行10秒,但用于显示的运算只需要1秒而后台运算9秒

怎么让php执行完显示这部分就输出页面结束的信息,做到后面的内容真正在后台执行

用flush()函数虽然可以提早输出内容到浏览器,但是浏览器并没有真正认为页面已经结束

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2005-03-08 21:24 |只看该作者

php怎么提早输出页面结束信息

可以做到的。

不过你需要学习写驻守进程,给驻守进程一个信号,他就在后台自己处理了

论坛徽章:
0
3 [报告]
发表于 2005-03-09 10:02 |只看该作者

php怎么提早输出页面结束信息

汗,不知道驻守进程怎么写,而且不是纯粹靠php能写的吧。

我的想法是这样的,http连接是socket协议的连接,连接上之后也就是按文件那样读写的,服务端只要提早返回文件结束信息就可以了。不过php本身好像没这种函数。

我昨天做了一些测试,利用html里面的header协议可以达到欺骗浏览器效果

  1. $str1='111111';   
  2. $str2='222222';
  3. header("Content-Length: ".strlen($str1));  //接收长度(后面的不要了:)
  4. echo $str1;
  5. flush();
  6. sleep(10);
  7. echo $str2;
复制代码


主要是这个header语句告诉了浏览器接收长度
这段执行后浏览器会马上输出'111111',不会输出 '222222';

取消了header语句则10秒后输出'111111222222'

不过这样也仅仅是欺骗浏览器,并不是真正结束
如果上面那个代码的php程序不是用浏览器访问,而是用socket连接去读
用feof()来判断返回的内容是否结束,还是会把'111111222222'全部读出来

本人研究不深,还想不出更好的办法
各位大虾继续发言:)

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2005-03-09 11:49 |只看该作者

php怎么提早输出页面结束信息

原帖由 "徐风" 发表:

主要是这个header语句告诉了浏览器接收长度
这段执行后浏览器会马上输出'111111',不会输出 '222222';

取消了header语句则10秒后输出'111111222222'

不过这样也仅仅是欺骗浏览器,并不是真正结束
如果上面..........


你这样的逻辑是不可以实现的,http是没有状态的。
可以换个方法试试,
在页面里面include你的 显示的运算的php文件试试。
但是10秒时间太长了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP