PHPは、echo,printやprintf関数など様々な方法で文字列を出力して、その結果をブラウザに表示させることができる。 このとき出力される結果が、あまり変化することがない場合、あらかじめその出力結果をHTMLファイルに出力しておいて、それを表示させる方が処理が減って効率が良くなることがある。
例えば、ブログでは投稿回数に対して、閲覧回数の方が明らかに多い。投稿などがされない限り、出力結果に変化はない。 さすがに、全てのページを生成しないにしても、閲覧回数の多いトップだけでもHTMLファイルにしてユーザに見せれば、サーバへの負荷は減るはずである。 ページの更新は、投稿があるたびにPHPでHTMLファイルを出力させればいい。
こういった処理をさせるために、PHPファイルを書き換えるとなると、echoやprintをfwrite関数などに全て書き換えなければならないと思うかもしれない。 しかし、PHPには出力のバッファリングをする便利な出力制御関数がある。ob_start関数でバッファリングを開始すると、echoなどによる出力されるはずの内容が内部的に保存される。 その保存されているデータは、ob_get_contents関数で取得、ob_flush関数で出力、ob_end_clean関数でバッファをクリアしバッファリングを終了などの操作ができる。 ob_start関数で出力されるはずの内容をob_get_contents関数で取得すれば、簡単に書き換えができる。
<?php
ob_start(); //バッファリング開始
echo "これはテスト用文字列です。"; //ここでは出力されない
$output = ob_get_contents(); //出力されるはずだったデータを取得
ob_end_clean(); //本来出力されるはずのデータをクリア(これをしないと実行終了時に出力されてしまう)
//上で取得した$outputをファイル(test.txt)に出力する
$fp = fopen('test.txt', 'w');
fwrite($fp, $output);
fclose($fp);
?>