CodeIgniter - 奇怪的输出问题

时间:2010-12-15 16:27:46

标签: php codeigniter

我看到脚本输出有一个非常奇怪的问题。我有时在输出开始之前得到一个四位十六进制代码,在输出结束时得到一个零 - 例如:

2fc3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0     
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html >
......
</html>
0  

十六进制数根据请求的uri和/或内容而有所不同。我没有使用缓存,输出压缩已关闭。我在几个项目中看到了这个问题,每个项目都非常不同,并且托管在不同的服务器上。

此处可以看到问题的一个示例:http://www.holidayproperties.co.uk/notfound.html

您可以将'notfound'替换为任意随机文本,以查看十六进制代码更改为不同的值。

我使用这个模板库 - http://codeigniter.com/forums/viewthread/95687 - 虽然即使绕过库并直接输出,使用echo,我也看到同样的问题。

我希望能够解决这个问题,所以非常感谢所有的帮助。

[编辑] 我发现删除了以下内容:

$this->output->set_header('HTTP/1.1 404 Not Found');

解决了这个问题,但为什么要首先发生这种情况呢?标头是在任何输出之前设置的,事实上我没有得到任何关于在输出开始后设置标题的php / ci警告。

谢谢,

布林。

3 个答案:

答案 0 :(得分:1)

在黑暗中拍摄,但你的任何php文件在php标签之前或之后都有前导或尾随空格?这给了我过去的问题。

另一个长镜头是我在一段时间后发布的这个问题:How to get IE8 to not show my PHP page as blank

向下滚动页面,看看我是如何解决它的。它与我的服务器的默认编码不是UTF-8有关,因此在我生成的html中吐出一些垃圾文本。可能没有帮助,但我想我会把它扔出去。

答案 1 :(得分:0)

特定控制器中的所有视图都会发生这种情况吗?也许你在构造函数中有一个回声。

答案 2 :(得分:0)

这是分块编码(https://en.wikipedia.org/wiki/Chunked_transfer_encoding)答案的子标题。禁用分块的最简单方法是使用1.0版本的HTTP:

$this->output->set_header("HTTP/1.0 404 Not Found");