PHP中的"Transfer-Encoding:chunked"标头

Ddw*_*dsf 7 php header http

我想将Transfer-Encoding: chunked标题添加到我正在输出的文件(它刚刚生成纯文本),但是当我添加:

header("Transfer-Encoding: chunked");
flush();
Run Code Online (Sandbox Code Playgroud)

浏览器不想打开文件.

...的网页可能暂时关闭,或者可能已永久移动到新的网址.

我需要做些什么呢?

Kin*_*nch 5

您需要Content-Length随发送的每个块一起发送。看看维基百科的第一印象,分块编码的样子。它不是那么微不足道,而且在许多情况下它的尺寸过大。

更新:首先发送标头,因为它们必须始终在任何内容之前发送(也使用分块编码)。然后您发送(对于每个块)大小(十六进制),然后是内容。flush()在每个块之后记住。最后,您必须发送一个零大小的块以确保连接正确关闭。

它没有经过测试,但像这样

header("Transfer-Encoding: chunked");
echo "5\r\n";
echo "Hello";
echo "\r\n\r\n";
flush();
echo "5\r\n";
echo "World";
echo "\r\n";
flush();
echo "0\r\n\r\n";
flush();
Run Code Online (Sandbox Code Playgroud)

  • 我不是专家,但我认为这个答案可能是错误的。它不符合这里的答案:http://stackoverflow.com/questions/2481858/how-to-make-php-generate-chunked-response。除非我误解了,否则 PHP 和 apache 会处理低级编码(输出块大小),因此您实际需要做的就是在输出结束前一次或多次刷新(),并且响应将分块传输编码。这符合我在 Firefox 中查看结果的经验(结果逐渐加载) (3认同)