web-dev-qa-db-ja.com

PHPでob_get_contentsはどのように機能しますか?

これは私が読んでいる本のサンプルコードです:

_ob_start();
include("{$path}.ini");
$string = ob_get_contents();
ob_end_clean();
$pairs = parse_ini_string($string);
_

私の質問は、ob_get_contents()はどのようにコンテンツを取得するかをどのようにして知るのですか? (この状況では{$ path} .ini)?

14
Koray Tugay

_ob_get_contents_は、ob_start()を呼び出してから、出力バッファの内容を取得するだけです。基本的に、PHPの出力バッファーは、ブラウザーに対してoutputであったものをすべてキャッチします(ヘッダーを除く)。一部の出力をフィルターする必要がある場合に役立ちます。または、画面に出力を直接書き込むPHPメソッド(_var_dump_など)を使用しており、代わりに文字列内のメソッドの戻り値が必要です。

この場合、_.ini_ファイルをinclude() ingしているため、その内容は基本的に画面に出力され、ob_get_contents()はファイルの内容を取得します。

_echo "I'm a little teapot short and stout";_をincludeの下に置く場合、これは_$string_ファイルの本文の後の_.ini_にも含まれます。

ただし、特定のケースでは、出力バッファリングは不要なオーバーヘッドです。単に_file_get_contents_ファイルで_.ini_を使用してください。なぜ本にこのコードが含まれているのか、よくわかりません。

11
Rudi Visser

「ob」は「出力バッファ」を意味します。 ob_start()を呼び出すと、PHPはすべての出力を(echoなどを使用して)出力バッファーに転送します。次に、他のob_*関数を使用してバッファの内容をクリアします。

あなたの例では、"{$path}.ini"によって参照されるファイルによって生成されたすべての出力をバッファします。これを含めると、その出力がバッファーに追加され、ob_get_contents()を呼び出すと、バッファーの内容が取得されます。

5
leftclickben

PHPから:

ob_start — Turn on output buffering
ob_get_contents — Return the contents of the output buffer
ob_end_clean — Clean (erase) the output buffer and turn off output buffering

これで、ob_get_contentsは出力されたすべてのバッファを収集できます。

[1] http://www.php.net/manual/en/book.outcontrol.php

2
user1646111

ob_get_contents()は、ob_start()関数を呼び出した後にエコーされるすべてのものを取得しているため、_{$path}.ini_について特別なことは何もありません-収集するデータをエコーする必要があります(はい、単純なechoまたは_print_r_呼び出しの出力も収集されます-単純なスクリプトのデバッグに役立つ場合があります)。

あなたはob_start()関数を画面から(見えない)PHP内部バッファへの単純なリダイレクトとして理解し、後でob_get_contents()によって読み込まれます。 ob_start()関数を呼び出さなくても、画面に表示される可能性のあるもの(Webページ全体でも)をリダイレクトできます。

2
Nemanja Boric