脚本应显示文件的内容,但如果开头和结尾的很多字符(超过8000个)添加了意外字符(不同文件的字符可能会更改)。
b15f
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
</body>
</html>
0
b15f 和 0 在哪里?
脚本:
<?php
header("HTTP/1.1 200 OK");
header("Content-Type: text/html; charset=utf-8");
$content = file_get_contents( "index.html" );
echo($content);
?>
答案 0 :(得分:0)
看起来你看到了大块长度。
您可能正在使用chunked encoding并将结果保存为原始状态。 HTTP具有不同的传输邮件正文的方式。最常见的是Content-Length,但只有在知道开始发送内容时的长度时才能执行此操作。这种方法的一个方便的方面是原始消息体不需要解码;你只需阅读Content-Length字节,那就是你的结果。
如果页面是动态的,有时您希望在知道全长之前开始向客户端写入字节。这是您使用分块编码时。每个块前面都有一个十六进制格式的块长度。在最后一个块为0之后,表示空块和传输结束。
服务器有一个8k缓冲区限制(例如,我认为这是PHP的默认值),这意味着在正文大于8k后,它会以块的形式发送。因此,在文件大于8k之后,您会在数据中散布大小块。
<强>解决方案:强>
ob_start();
echo($content);
header('Content-Length: '.ob_get_length());
ob_end_flush();