【发布时间】:2015-06-20 00:29:54
【问题描述】:
我好像有鬼。我正在加载一个页面(通常在另一个页面中加载,如果有帮助的话,但是当我自己加载页面时仍然会出现错误)并且在输出的顶部,在其他所有内容之前,我得到一个随机的false。
在$this->load->view('my_view');期间输出。我去调查了 CodeIgniter 系统文件,发现在_ci_load($_ci_data) 方法中,有一行写着ob_start();。当我在这段代码周围加上这样的代码时:
echo "hey!";
ob_start();
echo "here!";
我得到的输出是hey!falsehere!。
我发现阻止false 输出的唯一方法是在代码中的某个位置之前放置另一个ob_start()。我在控制器、视图、视图加载器和 CodeIgniter.php 本身中摆弄了不同的位置。这是我发现它坏了的地方:
// Is there a "remap" function? If so, we call it instead
if (method_exists($CI, '_remap'))
{
$CI->_remap($method, array_slice($URI->rsegments, 2));
}
如果我在调用_remap 之前加上ob_start(),false 就会消失;如果我之后把它说对了,false 仍然会出现。
有人知道该怎么做吗?我知道这是一个非常困难且晦涩的问题,但我不知道下一步应该采取什么措施。非常欢迎任何有关问题可能来自何处的建议。
我正在运行 PHP 5.4.30,使用 CodeIgniter 2.1.4(可能需要更新...)
【问题讨论】:
-
如果
false是由_remap方法输出的,也许看看该方法的作用。我猜在某个布尔变量上调用了echo或print。 -
我会更新到 3.0 并停止搞乱系统文件
-
@AlexanderO'Mara,我查看了 _remap 方法,它所做的只是在我的控制器方法上调用 call_user_func_array。所以我想也许是因为我有一个旧版本的PHP,但是更新到5.6并没有解决它。
标签: php codeigniter output-buffering ob-start ghosts-in-the-machine