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

goF*_*ard 3 php codeigniter

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

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

浏览片刻后,我在堆栈溢出时找到了这个答案:https: //stackoverflow.com/a/13783368/755319 它说我可以在index.php的开头添加ob_start()用于输出缓冲

<?php
ob_start();
/*
 *---------------------------------------------------------------
 * APPLICATION ENVIRONMENT
 *--------------------------------------------------------------- 
Run Code Online (Sandbox Code Playgroud)

是保存做这样的事情吗?

编辑:好的,我可能错了,错过了一些东西.有没有任何程序化的方法来找出错误?(找到错误的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>
Run Code Online (Sandbox Code Playgroud)

Ale*_*chi 8

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

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

$this->ip_address = $_SERVER['REMOTE_ADDR'];
Run Code Online (Sandbox Code Playgroud)

有:

$this->ip_address = $this->server('remote_addr');
Run Code Online (Sandbox Code Playgroud)