已经发送了CodeIgniter头,并在index.php的开头发送了ob_start()

时间:2013-03-07 08:25:05

标签: php codeigniter

在我的申请中,我可以确保没有这样的“无意”空白或其他任何内容。我不在控制器或模型上执行“echo”,但是日志文件中始终存在“header already sent”错误(浏览器中没有显示)。我也没有关闭php标签。唯一“可疑”的事情是我在模型和控制器上加载会话和输入库。

这实际上不是一个大问题,但如果我使用CLI请求,则错误会变得很糟糕。

浏览片刻后,我在堆栈溢出时找到了这个答案: https://stackoverflow.com/a/13783368/755319 它说我可以在index.php

的开头添加ob_start()用于输出缓冲
<?php
ob_start();
/*
 *---------------------------------------------------------------
 * APPLICATION ENVIRONMENT
 *--------------------------------------------------------------- 

保存是做这样的事情吗?

编辑:好的,我可能错了,在这里错过了什么。有没有任何程序化的方法来找出错误? (找到错误的php标签,空格或其他内容的程序)?

再次编辑:错误仅在CLI模式下生成。错误如下:

<h4>A PHP Error was encountered</h4>

<p>Severity: Notice</p>
<p>Message:  Undefined index: REMOTE_ADDR</p>
<p>Filename: core/Input.php</p>
<p>Line Number: 351</p>

</div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  Cannot modify header information - headers already sent by (output started at /home/gofrendi/public_html/No-CMS/system/core/Exceptions.php:185)</p>
<p>Filename: libraries/Session.php</p>
<p>Line Number: 675</p>

2 个答案:

答案 0 :(得分:8)

第一个警告产生的输出将触发第二个警告(即:无法修改标题信息)。理论上,如果你解决了第一个警告,第二个应该自动修复。

打开system/core/Input.php并在#351行替换:

$this->ip_address = $_SERVER['REMOTE_ADDR'];

使用:

$this->ip_address = $this->server('remote_addr');

答案 1 :(得分:0)

避免输出缓冲的一般原因是它缓冲了 输出。这看起来很明显,但是如果你的输出被保存了 在缓冲区中直到事物结束,然后它才被交付 到浏览器直到进程结束,一下子。意思是 您的页面似乎不再逐渐加载,但整体 事物必须首先运行,使它看起来更慢。

通常,除了输出之外别无他法 缓冲,然后你可能有一个很好的论据来做同样的事情。