ob_start

関数出力バッファリング制御

ob_startとは?

 状態:-  閲覧数:3,248  投稿日:2014-01-21  更新日:2014-01-21  
・出力のバッファリング を有効にする

ob_startで、既存ビュー出力を取得して、使い回す

 閲覧数:1,019 投稿日:2014-01-22 更新日:2014-01-29 

目的


既存ビュー出力を取得して、使い回したい
・例えば、複数のビュー出力を1つのレイアウトに組み込みたいとき

何が問題なの?
・処理結果を取得しても、その場で出力されてしまうため、別ファイルで利用できない


失敗例


レイアウトへ渡る前、$resultへ格納する時点で変数は出力されてしまっている

▼index.php
//グローバル変数として読込
include("config.php");

class View {
function display($data){
 extract($data);
 include("view.php");
}
}

$view = new View();
$result = $view ->display($data);
include("layout.php");


▼config.php … 設定ファイル
$data = array(); 
$data["name"] = "嵐";
$data["sex"] = "男性";
$data["number"] = "5";
$data["agency"] = "ジャニーズ事務所";


▼view.php … ビュー 
echo "こんにちは $name さん<br>";
echo "$sex<br>";
echo "$number 人<br>";
echo "$agency<br>";


▼layout.php … レイアウト 
<section>
<h1>Layout</h1>
<?php echo $result; ?>
</section>


・処理結果
こんにちは 嵐 さん
男性
5 人
ジャニーズ事務所
Layout


無理やりな例


レイアウトへ渡る前に出力されるのを防ぐため、viewでは出力せず一旦変数へ格納
・そのため、viewにてひたすら文字列連結処理しているのだが、不恰好過ぎる
※ビューファイルの出力結果を文字列に保存

▼index.php
・displayメソッドにて「return $html;」を追加
//グローバル変数として読込
include("config.php");

class View {
function display($data){
 extract($data);
 include("view.php");
 return $html;
}
}

$view = new View();
$result = $view ->display($data);
include("layout.php");


▼config.php … 設定ファイル
$data = array(); 
$data["name"] = "嵐";
$data["sex"] = "男性";
$data["number"] = "5";
$data["agency"] = "ジャニーズ事務所";


▼view.php … ビュー 
・viewでは出力せず、ひたすら文字列連結
$html = "こんにちは $name さん<br>";
$html.= "$sex<br>";
$html.= "$number 人<br>";
$html.= "$agency<br>";


▼layout.php … レイアウト 
<section>
<h1>Layout</h1>
<?php echo $result; ?>
</section>


・処理結果
Layout
こんにちは 嵐 さん
男性
5 人
ジャニーズ事務所


成功例


ob_start利用

▼index.php
//グローバル変数として読込
include("config.php");

class View {
function display($data){
 ob_start();
 extract($data);
 include("view.php");
 $html = ob_get_contents();
 ob_end_clean();
 return $html;
}
}

$view = new View();
$result = $view ->display($data);
include("layout.php");


▼config.php … 設定ファイル
$data = array(); 
$data["name"] = "嵐";
$data["sex"] = "男性";
$data["number"] = "5";
$data["agency"] = "ジャニーズ事務所";


▼view.php … ビュー 
echo "こんにちは $name さん<br>";
echo "$sex<br>";
echo "$number 人<br>";
echo "$agency<br>";


▼layout.php … レイアウト 
<section>
<h1>Layout</h1>
<?php echo $result; ?>
</section>


・処理結果
Layout
こんにちは 嵐 さん
男性
5 人
ジャニーズ事務所


動的にviewファイル名変更


ビューファイル名は固定ではなく、動的に変えた方が便利

▼index.php
//グローバル変数として読込
include("data.php");

class View {
function display($data){
ob_start();
extract($data);
include("$viewname.php");
$html = ob_get_contents();
ob_end_clean();
return $html;
}
}

$view = new View();
$result = $view ->display($data);
include("layout.php");


▼data.php … データファイル
$data = array(); 
$data["viewname"] = "view";
$data["name"] = "嵐";
$data["sex"] = "男性";
$data["number"] = "5";
$data["agency"] = "ジャニーズ事務所";


▼view.php … ビュー 
echo "こんにちは $name さん<br>";
echo "$sex<br>";
echo "$number 人<br>";
echo "$agency<br>";


▼layout.php … レイアウト 
<section>
<h1>Layout</h1>
<?php echo $result; ?>
</section>


・処理結果
Layout
こんにちは 嵐 さん
男性
5 人
ジャニーズ事務所



バッファリング

ob紛らわしい関数()一覧

コメント投稿(ログインが必要)



類似度ページランキング
順位 ページタイトル抜粋
1 ob_start 88
2 register_globals 58
3 Generators 56
4 session_start() 52
5 syntax error 50
6 set_error_handler 48
7 preg_match 44
8 break文 43
9 parse_url( ) 40
10 array_filter 40
11 session_destroy関数 40
12 foreach文 38
13 Doctrine 38
14 realpath 38
15 session_save_path() 37
16 static修飾子 35
17 __setメソッド 35
18 array_map 35
19 session_set_save_handler() 35
20 Composer 35
2026/7/25 2:58 更新
週間人気ページランキング / 7-17 → 7-23
順位 ページタイトル抜粋 アクセス数
1 PHP用語 6
2 コンストラクタ デストラクタ | クラスとオブジェクト 4
2 マジックメソッド(クラスとオブジェクト) カテゴリー 4
3 ログイン 3
4 Parse error: syntax error, unexpected $end in ○○.php on line △△ | Parse error(エラーメッセージ) 2
4 PHPでcurlを使用するためには?/ 2.オプション設定 / curlでPOST送信 2
4 You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. | Twitter API(エラーメッセージ) 2
4 htmlspecialchars / htmlentities / addslashes / mysql_real_escape_string / mysqli_real_escape_string | セキュリティ 2
4 デフォルト引数 | 関数 2
4 Fatal error: Uncaught Error: Class 'Mecab_Tagger' not found in /var/www/★★.php:☆☆ | Fatal error(エラーメッセージ) 2
4 遭遇例1.存在する間違ったデータベース名を指定 2
4 リファレンス基本操作は3通り 2
5 __setメソッド | マジックメソッド(クラスとオブジェクト) 1
5 P … 子クラスインスタンス生成。親クラス内での$this 1
5 Fatal error: Uncaught RuntimeException: SplFileObject::__construct(): failed to open stream: Permission denied in | Fatal error(エラーメッセージ) 1
5 Fatal error: Uncaught Wrench\Exception\HandshakeException: No accept header receieved on handshake response in ★★★ headless-chromium-php/vendor/wrench/wrench/lib/Wrench/Protocol/Protocol.php | エラーメッセージ 1
5 対応案B.文字列処理ではなく、配列処理を実施 1
5 PHPでどうしてもエラーが画面表示されない時は、HTMLコメントアウトを外してみる | エラーメッセージ 1
5 Fatal error: require_once(): Failed opening required 'PEAR.php' | Fatal error(エラーメッセージ) 1
5 PECLとは? 1
2026/7/24 5:05 更新