PHPでincludeした時に出力される文字列を変数に入れたい

諸々の出力関連の処理はJSON形式で出力させて、画面描画の処理はJavaScriptでやってるとたまにこういう事があります。

「JSONで出力したものを、出力せずに直接PHPの中で配列として扱いたいなぁ。」
(何を言ってるかよく分からない)

つまりこういうことです。

このファイルを仮にjson.phpとしましょう。
・接続

・dbからデータ取ってくる

・この時、何回も書きたくないようなSQL文を生成して処理

echo json_encode($ary, true);

・画面にJSONが出力される

すでにjson.php内では画面に出力することを前提としているため、データ配列を返却する修正を加えたくないですよね。
できれば、受け手側で処理したい。

1)includeを使う
includeした箇所で画面出力されます

2)file_get_contentsを使う
やってみ。
やってみ。
中身全見え。笑

3)ob_startを使う
ob_startは出力のバッファリングを有効にする関数です。
つまり、出力処理を一旦保留して変数に格納することができます。
使い方はこんな感じ。

// バッファスタート
ob_start();
	// 該当ファイルのインクルード(通常であれば文字出力されます)
	include_once("json.php");
	// 出力された内容を変数に格納
	$json = ob_get_contents();
// バッファ終了
ob_end_clean();
// 受け取ったのはJSON文字列だったので変数に変換
$ary = json_decode($json, true);
// あとはお好きなように!

参考:PHP: ob_start – Manual

SNSでシェア