【问题标题】:"false" appearing next to ob_start()“假”出现在 ob_start() 旁边
【发布时间】: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 方法输出的,也许看看该方法的作用。我猜在某个布尔变量上调用了 echoprint
  • 我会更新到 3.0 并停止搞乱系统文件
  • @AlexanderO'Mara,我查看了 _remap 方法,它所做的只是在我的控制器方法上调用 call_user_func_array。所以我想也许是因为我有一个旧版本的PHP,但是更新到5.6并没有解决它。

标签: php codeigniter output-buffering ob-start ghosts-in-the-machine


【解决方案1】:

事实证明,问题出在一个模型的深处,该模型由控制器调用的另一个模型调用,该模型在发生某种错误情况时输出false。故事的寓意,深入研究我自己的代码,而不是将其归咎于框架中的错误......

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 2018-06-27
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多