これは私が読んでいる本のサンプルコードです:
_ob_start();
include("{$path}.ini");
$string = ob_get_contents();
ob_end_clean();
$pairs = parse_ini_string($string);
_
私の質問は、ob_get_contents()
はどのようにコンテンツを取得するかをどのようにして知るのですか? (この状況では{$ path} .ini)?
_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
_を使用してください。なぜ本にこのコードが含まれているのか、よくわかりません。
「ob」は「出力バッファ」を意味します。 ob_start()
を呼び出すと、PHPはすべての出力を(echo
などを使用して)出力バッファーに転送します。次に、他のob_*
関数を使用してバッファの内容をクリアします。
あなたの例では、"{$path}.ini"
によって参照されるファイルによって生成されたすべての出力をバッファします。これを含めると、その出力がバッファーに追加され、ob_get_contents()
を呼び出すと、バッファーの内容が取得されます。
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は出力されたすべてのバッファを収集できます。
ob_get_contents()
は、ob_start()
関数を呼び出した後にエコーされるすべてのものを取得しているため、_{$path}.ini
_について特別なことは何もありません-収集するデータをエコーする必要があります(はい、単純なecho
または_print_r
_呼び出しの出力も収集されます-単純なスクリプトのデバッグに役立つ場合があります)。
あなたはob_start()
関数を画面から(見えない)PHP内部バッファへの単純なリダイレクトとして理解し、後でob_get_contents()
によって読み込まれます。 ob_start()
関数を呼び出さなくても、画面に表示される可能性のあるもの(Webページ全体でも)をリダイレクトできます。