11

I've reinstalled Apache, and switched from PHP 5.3 to 5.6. Everything works, except I get this error, when calling ob_start():

Cannot use output buffering in output buffering display handlers

I tried to enable output buffering in PHP, but I still get this error:

output_buffering = 4096
Iter Ator
  • 8,226
  • 20
  • 73
  • 164

4 Answers4

10

You're trying to start a output buffer inside a buffer callback. If you use this code, it will generate that error. But if you remove the ob_start() from the callback function it's OK.

<?php
error_reporting(-1);

function callback($buffer){
    //you can't call ob_start here
    ob_start();
    return (str_replace("apples", "oranges", $buffer));
}

ob_start("callback");

?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php
ob_end_flush();
Antony Thompson
  • 1,608
  • 1
  • 13
  • 22
4

Even though this is an old question, I just wanted to add that the same error occurs when the system runs out of memory while buffering.

If this is the case, the error mentioned in this topic will always be followed by an Allowed memory size of xxx bytes exhausted error.

2

Probably you are using a buffering function in output buffering callback which isn't possible as mentioned in php ob_start output_callback documentation. If not it should be the output-handler you used, check your php.ini and try to set it's value to "none" if possible.

mow
  • 271
  • 2
  • 6
0

maybe this sample code can help you:

ob_start();
echo "test";
$content = ob_get_contents();
ob_end_clean();
var_dump($content);
mmta41
  • 274
  • 2
  • 13