关于php"服务器推"使用的一个问题

Anew_G 2012-09-10 03:07:23


header("Content-type: multipart/x-mixed-replace;boundary=endofsection");
print "--endofsection\n";
$pmt = array("-", "\\", "|", "/" );
for( $i = 0; $i <10;$i ++ )
{
sleep(1);
print "Content-type: text/plain\n\n";
print "Part $i ".$pmt[$i % 4];
print "--endofsection\n";
ob_flush(); //强制将缓存区的内容输出
flush(); //强制将缓冲区的内容发送给客户端
}
print "Content-type: text/plain\n\n";
print "The end\n";
print "–endofsection–\n";



像手册评论里的这段代码,有两个疑问

1.第8行Part $i那里,我换成html代码进行输出,浏览器直接输出了html字符串,而没有对html进行解析

2.我不想第7行的"Content-type: text/plain\n\n"和第9行的print "--endofsection\n";输出到浏览器上,但是去掉这两行又实现不了推送了,应该怎么办?
...全文
190 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anew_G 2012-09-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

PHP code

header("Content-type: multipart/x-mixed-replace;boundary=endofsection");
print "--endofsection\n";//这里确保输出大于缓冲区大小长度的内容,str_repeat()函数, 各浏览器通用长度为:1024, 然后就能达到你想要的效果.
[/Quote]

不错,html能正确解析并推送了。

我不想第7行的"Content-type: text/plain\n\n"输出能否做到?我去掉这行就不能正常推送了
ZT_King 2012-09-11
  • 打赏
  • 举报
回复

header("Content-type: multipart/x-mixed-replace;boundary=endofsection");
print "--endofsection\n";//这里确保输出大于缓冲区大小长度的内容,str_repeat()函数, 各浏览器通用长度为:1024, 然后就能达到你想要的效果.
xuzuning 2012-09-11
  • 打赏
  • 举报
回复
您的代码的出处中就明确的声明了这段代码只在 firefox 中有效
所以你用其他浏览器测试时,出现问题是正常的

既然大多浏览器制造商都不愿支持,那么你也没有必要吧精力耗费在这个上面
要做的事情很多很多
Anew_G 2012-09-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

"但是浏览器的行为变成等循环结束以后一起把数据输出"

你的意思你改之前, 它是分若干次输出的?


引用 2 楼 的回复:

引用 1 楼 的回复:

text/plain 是纯文本啊
text/html 才是超文本


我把print "Content-type: text/plain\n\n"; 改成 print "Content-type: text/htm……
[/Quote]

对的,一秒输出一条。
helloyou0 2012-09-10
  • 打赏
  • 举报
回复
"但是浏览器的行为变成等循环结束以后一起把数据输出"

你的意思你改之前, 它是分若干次输出的?


[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

text/plain 是纯文本啊
text/html 才是超文本


我把print "Content-type: text/plain\n\n"; 改成 print "Content-type: text/html\n\n"; 后

确实是解析了html元素,但是浏览器的行为变成等循环结束以后一起把数据输出,而不是像改动前的一句一句不断输出
[/Quote]
ImN1 2012-09-10
  • 打赏
  • 举报
回复
换gecko引擎的浏览器试
Meteorlet 2012-09-10
  • 打赏
  • 举报
回复
我在firefox下试了一下text/html是可以的。
Anew_G 2012-09-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你用什么浏览器? ie应该不支持服务器推
[/Quote]

chorme,现在的情况就是

print "Content-type: text/plain\n\n"; 时正常推送

print "Content-type: text/html\n\n"; 时html元素解析正常,但要等到延迟循环结束后一起输出

除了这地方,其他代码都没改动
ImN1 2012-09-10
  • 打赏
  • 举报
回复
你用什么浏览器? ie应该不支持服务器推
Anew_G 2012-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

text/plain 是纯文本啊
text/html 才是超文本
[/Quote]

我把print "Content-type: text/plain\n\n"; 改成 print "Content-type: text/html\n\n"; 后

确实是解析了html元素,但是浏览器的行为变成等循环结束以后一起把数据输出,而不是像改动前的一句一句不断输出
ImN1 2012-09-10
  • 打赏
  • 举报
回复
text/plain 是纯文本啊
text/html 才是超文本

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧