该脚本应显示文件的内容,但是如果在开头和结尾有很多字符(超过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);
?>
看起来您正在看到块长度。
您可能正在使用分块编码并将结果原始保存。HTTP具有传输消息正文的不同方式。最常见的是Content-Length,但只有在知道开始发送内容的长度时,才可以这样做。这种方法的一个方便方面是,原始消息主体无需解码;您只需读取Content-Length字节,这就是您的结果。
如果页面是动态的,则有时您想在知道全长之前就开始向客户端写入字节。这是您使用分块编码的时候。每个块前面都有一个十六进制格式的块长度。最后一个块之后是0,表示一个空块和传输结束。
服务器具有8k的缓冲区限制(例如,我认为这是PHP的默认设置),这意味着在正文大于8k之后,将以块的形式发送它。因此,在文件大于8k之后,您会在数据中散布块大小。
解决方案:
ob_start();
echo($content);
header('Content-Length: '.ob_get_length());
ob_end_flush();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句