PHP/PHPの出力を文字列として取得する

PHP/PHPの出力を文字列として取得する

バージョンと製造年月日

  • 2008-12-08
  • PHP5.2.5

画面への出力を文字列として取得する

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>

Tag

php/get_php_output_as_string.txt · 最終更新: 2015-01-07 21:51 by ore