menu
書いてる野郎
orebike@gmail.com
ob_start
という関数を使うと画面への出力をバッファリングできるのでこいつを利用する。
ob_get_contents
でバッファした内容を文字列として取得できる。
ob_end
でバッファ終了なのだが、このままほっておくとバッファ内容を最終的に出力してしまうので文字列として取得した後に終了と同時にバッファ内容をクリアする。
<?php ob_start(); ?> <p>hoge</p> <?php $out = ob_get_contents(); ob_end_clean(); echo $out; ?>
アウトプットは
<p>hoge</p>
となる
確認として echoをコメントアウトすると何も出ないことがわかる
別ファイルから読み込む場合はincludeをそのまま使ってやる。 PHPのincludeは単にそこにコード展開するだけなので・・・
<?php ob_start(); include('hoge.php'); $out = ob_get_contents(); ob_end_clean(); echo $out; ?>
これでOK
これができるとレイアウトのような機能が実装できる。
めんどくせーんで関数化しておくと便利ですね。
<?php function render($file_name){ ob_start(); include($file_name); $out = ob_get_contents(); ob_end_clean(); return $out; } ?> <html> <head> <title>hoge</title> </head> <body> <?php echo render('hoge.php'); ?> </body> <html>
こんな風に使えますな。
呼び出される側が主体となって外枠を決定するというものならば
<?php ob_start(); ?> <h1>This is contents</h1> <p>I'm Japanese</p> <?php $content = ob_get_contents(); ob_end_clean(); include "layout.php"; ?>
<html> <head></head> <body> <?php echo $content ?> </body> </html>