php - CodeIgniter header 已发送且 ob_start() 位于 index.php 的开头

标签 php codeigniter

<分区>

在我的应用程序中,我可以确保没有这样的“无意”空白或其他任何东西。我没有在 Controller 或模型上执行“echo”,但日志文件中总是有“header already sent”错误(浏览器中没有显示)。我也没有任何关闭的 php 标记。唯一“可疑”的是我在模型和 Controller 上都加载了 session 和输入库。

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

浏览了一段时间后,我在 stack overflow 找到了这个答案: 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>

最佳答案

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

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

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

与:

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

关于php - CodeIgniter header 已发送且 ob_start() 位于 index.php 的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15266322/

相关文章:

css - CodeIgniter - 简单的 base_url 问题

带有 Codeigniter 的 JQuery Noty

PHP 和 NVP(名称-值对)列表?

php - 如何在 Laravel 中发生异常后继续执行?

php - 将图像放入 SQLite 数据库

php - PayPal IPN,很多注册,一次付款,都按错误的顺序

html - .htaccess 隐藏具有相对链接问题的index.php

php - 无法在 Codeigniter 中使用社区身份验证登录

php - 使用 PHP MySQL 更新玩家分数

javascript - 在ajaxForm中显示等待div直到服务器响应