出力制御関数は、header() または setcookie() を使用して送信されるファイル ヘッダー情報には影響せず、echo() および PHP コードと同様のデータ ブロックにのみ影響します。
出力制御の一般的な印象を皆さんに伝えるために、最初に簡単な例を示します。
例 1.
コードをコピーします コードは次のとおりです。 :
ob_start(); //バッファを開く
echo "Hellon" //出力
header("location:index.php") ; //ブラウザをindex.phpにリダイレクトします
ob_end_flush(); //すべてのコンテンツをブラウザに出力します
header()関数を知っている人は誰でも知っていますこの関数はファイル ヘッダーをブラウザに送信しますが、この関数を使用する前に出力 (スペース、復帰、改行などの空の出力を含む) がある場合は、エラーが表示されます。最初の行の ob_start() を削除してこのプログラムを実行すると、次のエラー メッセージが表示されることがわかります。「ヘッダーはすべて送信準備ができました。」ただし、ob_start を使用すると、エラー メッセージは表示されません。その理由は、バッファーが開かれたときに、echo 以降の文字がブラウザーに出力されず、flush を使用するまでサーバー上に出力されないためです。または ob_end_flush なので、ファイル ヘッダー出力エラーは発生しません。
1. 関連関数の紹介:
1. フラッシュ: バッファーの内容を更新して出力します。
関数の形式: flash()
説明: この関数は頻繁に使用され、非常に効率的です。
2. ob_start: 出力バッファを開きます
関数形式: void ob_start(void)
説明: バッファがアクティブ化されると、PHP プログラムからのファイル以外のヘッダー情報はすべて送信されませんが、保存されます。 .内部バッファ内。バッファの内容を出力するには、ob_end_flush() または flash() を使用してバッファの内容を出力します。
3. ob_get_contents: 内部バッファの内容を返します。
使用法: string ob_get_contents(void)
説明: この関数は、現在のバッファーの内容を返します。出力バッファーがアクティブ化されていない場合は、FALSE を返します。
4. ob_get_length: 内部バッファの長さを返します。
使用法: int ob_get_length(void)
説明: この関数は、出力バッファーがアクティブ化されていない場合、現在のバッファー内の長さを返します。その後、FALSE を返します。
5. ob_end_flush: 内部バッファの内容をブラウザに送信し、出力バッファを閉じます。
使用法: void ob_end_flush(void)
説明: この関数は、出力バッファーの内容 (存在する場合) を送信します。
6. ob_end_clean: 内部バッファの内容を削除し、内部バッファを閉じる
使用方法: void ob_end_clean(void)
説明: この関数は内部バッファの内容を出力せずに削除します。
7. ob_implicit_flush: 絶対リフレッシュをオンまたはオフにします。
使用方法: void ob_implicit_flush ([int flag])
注: Perl を使用したことがある人なら誰でも $|=x の意味を知っています。 /Close をオンにすると、ob_implicit_flush 関数はそれと同じになります。デフォルトでは、絶対出力をオンにした後、各スクリプト出力がブラウザに直接送信され、flush( を呼び出す必要はありません)。 )
2. 詳細な理解:
1. Flush 関数について:
この関数は、ブラウザのキャッシュを更新する非常に便利な関数です。非常に明らかな操作効果を示します。
例 2.
コードをコピーします。 コードは次のとおりです。 for($i = 1; $i <= 300; $i ) print(" ");
// この文は非常に重要です。そのコンテンツは、特定のサイズに達した場合にのみブラウザから利用可能です。
内に出力します。// つまり、キャッシュのコンテンツが特定のサイズに達しない場合、プログラムの実行が完了する前に出力されません。
// テストの結果、このサイズの下限は 256 文字であることがわかりました。これは、今後キャッシュによって受信されるコンテンツが
// 継続的に送信されることを意味します。
For($j = 1; $j <= 20; $j ) {
echo $j."
"; // これにより、新しいアイテムがキャッシュに追加されます。コンテンツは絞り出されてブラウザに表示されます。
sleep(1); //プログラムを 1 秒間「スリープ」させます。これにより、効果をより明確に確認できるようになります。
}
?>