Skip to content
Advertisement

Output buffering not working or making any sense

I am absolutely stumped here. I must either be missing something very simple or dont understand how this works.

Output buffering does not work at all on MAMP PRO, all contents are simply being displayed on the page and nothing goes to the buffer, not even hello world. I have tried every example

I am creating a simple framework and output buffering just does not work.

I have a module class with a function that includes a file and the code simply shows on the page without me even clearing the buffer.

I have checked the php.ini file in both loaded configuration file and the configuration file shows output_buffering = 4096. I am so confused

Here is the code example:

//index.php
var_dump(ob_start());//returns true
echo "Hello World"; //prints straight to the screen
include MODULES.'/home.php'; //output comes straight out
var_dump(ob_get_contents());//Shows html string
$test = ob_get_contents();
echo $test; //Output gets displayed twice

In PHP.ini: output_buffering=4096;

Advertisement

Answer

ob_get_contents does not clear the buffer so when a script ends it is flushed to the output as usual. If you only want to get data as string and clear buffer use ob_get_clean()

You can think of output buffering as creating “bookmarks” or “restore points” in output buffer. For example:

  • buffer is empty
  • echo 'hello' – output buffer has “hello” string
  • ob_start() – “bookmark” is created
  • echo 'world' – output buffer has two lines “hello” and “world” strings
  • ob_get_contents() – returns output buffer content since last “bookmark” – returns “world”, but buffer contents stay the same
  • scripts ends and flushes whole output buffer to screen

  • if you use ob_get_clean() instead it returns contents since last “bookmark” and deletes it from output buffer – the buffer has only “hello” in it

EDIT: I know it’s very simple and naive explanation but I recall it helped me a lot to grasp the concept.

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement