Sometimes we want to reuse a php function or include a file and want to capture the output (from echo, print, etc.) of that function/file to a variable. I had to do this in wordpress but the code is same for any php software.
Capture php output of file include
We can use php functions ob_start() and ob_get_clean() to start output buffering and get the content of the buffer. Here is sample php code snippet:
ob_start(); include(ABSPATH . 'path/to/include/file.php'); $content = ob_get_clean();
ob_get_clean() gets the buffer content, cleans the buffer and ends the buffering. There are couple of other ob_ functions for more flexibility. But I was able to manage with just these two.
Capture php output of function call
Here is sample php code snippet for function call
ob_start(); function_foo("var1", "var2"); $content = ob_get_clean();
Nested ob_start calls
ob_start and ob_get_clean() calls can be nested also. Here is how cascaded calls will look like:
<?php function f1() { echo "f1"; } function f2() { echo "f2"; } ob_start(); f1(); ob_start(); f2(); $content_inner = ob_get_clean(); $content_outer = ob_get_clean(); print "content_inner=$content_inner\n"; print "content_outer=$content_outer\n"; ?>
Here is the the outcome of above code when executed using php on command line:
content_inner=f2 content_outer=f1
Benefits
Here are some benefits of output buffering:
- It becomes much easier to re-use an existing code which you don’t want to modify.
- Often keeping html code in separate file with php embedded in it is more convenient than it being is pure php form. Using output buffering that code output can easily be capture in a variable.