phpcodeigniteroutput-bufferingob-startghosts-in-the-machine

"false" appearing next to ob_start()


I appear to have a ghost. I'm loading a page (normally loaded inside another page, if that helps, but the bug still appears when I load the page by itself) and at the top of the output, before everything else, I get a random false.

It is output during $this->load->view('my_view');. I went and investigated the CodeIgniter system files and found, within the _ci_load($_ci_data) method, a line that says ob_start();. When I put lines around this code like this:

echo "hey!";
ob_start();
echo "here!";

the output I get is hey!falsehere!.

The only way I've found that I can stop the false from being output is by putting another ob_start() somewhere before that in the code. I've fiddled with different placements, in the controller, the view, the view loader, and in CodeIgniter.php itself. Here's where I found it breaks:

// Is there a "remap" function? If so, we call it instead
if (method_exists($CI, '_remap'))
{
    $CI->_remap($method, array_slice($URI->rsegments, 2));
}

If I put ob_start() before the call to _remap, the false goes away; if I put it right afterwards, the false still shows up.

Anyone know what to do? I know this is a really hard and obscure question, but I have no idea what the next step I should take is. Any recommendations of where the problem could possibly be coming from are very much welcome.

I'm running PHP 5.4.30, using CodeIgniter 2.1.4 (probably time to update ...)


Solution

  • Turns out the problem was deep inside a model called by another model called by the controller that was outputting a false when a certain error condition happened. Moral of the story, search deeper into my own code instead of blaming it on a bug in the framework ...