14

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

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

私の質問は、ob_get_contents()何からコンテンツを取得するかをどうやって知るのですか? (この場合 {$path}.ini)?

4

4 に答える 4

14

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

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

echo "I'm a little teapot short and stout";の下に置くとinclude、これもファイル$stringの本体の後に含まれ.iniます。

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

于 2013-02-03T11:31:26.047 に答える
6

「ob」は「出力バッファ」の略です。を呼び出すとob_start()、PHP は (echoなどを使用して) すべての出力を出力バッファーに再ルーティングします。次に、他のob_*関数を使用して、バッファの内容を取得および/またはクリアできます。

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

于 2013-02-03T11:32:00.980 に答える
3

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

于 2013-02-03T11:32:46.483 に答える
2

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

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

于 2013-02-03T11:34:37.853 に答える