这个问题有点模糊...如果你不介意大块的数据(大约0x1000八进制字节),那么PHP可以处理。
<?php
while (true) {
flush()
usleep(pow(2,18));
}
?>
PHP将生成编号的章节等内容。
如果您想发送微小的块,就像使用AJAX客户端一样...嗯,我结合了OP的问题和在PHP.NET上的一些研究,看起来他确实做得很好。
$ echo -en "GET /chunked/ HTTP/1.1\r\nHost: ec\r\n\r\n" | nc localhost 80
HTTP/1.1 200 OK
Date: Wed, 23 May 2012 13:03:01 GMT
Server: Apache/2.2.9 (Debian) PHP/5.3.5-1 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8o
X-Powered-By: PHP/5.3.5-1
Transfer-encoding: chunked
Content-Type: text/html
14
Teachers have class.
50
We secure our friends not by accepting favors but by doing them.
-- Thucydides
48
Vulcans never bluff.
-- Spock, "The Doomsday Machine", stardate 4202.1
31
All kings is mostly rapscallions.
-- Mark Twain
41
Reappraisal, n.:
An abrupt change of mind after being found out.
49
He who knows, does not speak. He who speaks, does not know.
-- Lao Tsu
现在还不确定是否会最终挤出它自己(不正确的)块数,但我没有看到任何迹象。
<?php
header("Transfer-encoding: chunked");
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++) ob_end_flush();
ob_implicit_flush(1); flush();
function dump_chunk($chunk)
{
printf("%x\r\n%s\r\n", strlen($chunk), $chunk);
flush();
}
for (;;) {
$output = array();
exec("/usr/games/fortune", $output);
dump_chunk(implode("\n", $output));
usleep(pow(2,18));
}
?>
header("Transfer-encoding: chunked");
会破坏 PHP 的本机分块编码,它将不再计算和发送块长度! - cachius