PHP4.0 は、出力バッファリング関数のコレクションを提供します。出力バッファリングのサポートにより、圧縮されたバッファーの周囲に関数をラップする関数を作成できます。 PHP4 の出力バッファリングのサポートにより、HTML 本文が出力されるかどうかに関係なく、HTML ヘッダー情報を保存できます。ただし、PHP では、ヘッダー情報 ((header()、コンテンツ タイプ、Cookie) はバッファリングされません。
PHPを使用する過程で、ヘッダーと
setcookie の 2 つの関数を使用すると、これら 2 つの関数はファイル ヘッダー情報の一部をブラウザに送信しますが、これら 2 つの関数を使用する前に出力 (スペース、キャリッジ リターン、ライン フィードなどの空の出力を含む) がある場合、エラーが発生します。プロンプトの場合、プロンプト情報は次のとおりです。「ヘッダーの送信準備がすべて整いました」! 。 PHP 4.0 にはバッファ制御のための関数がいくつか追加されています。これらの関数を使用すると、多くの問題を解決できます。
関数名 関数形式 関数説明
Flush flash() はバッファの内容を出力し、バッファを削除します。 この機能は頻繁に使用され、非常に効率的です。
ob_start void ob_start(void) 出力バッファを開きます。 バッファーがアクティブな場合、PHP プログラムからのファイル以外のヘッダー情報はすべて送信されず、内部バッファーに保存されます。バッファの内容を出力するには、ob_end_flush() を使用するか、ob_end_clean() を使用してバッファの内容を出力します。
ob_get_contents string ob_get_contents(void) 内部バッファの内容を返します。 この関数は現在のバッファの内容を返します。出力バッファがアクティブでない場合は FALSE を返します。
ob_get_length int ob_get_length(void) 内部バッファの長さを返します。 この関数は、出力バッファがアクティブでない場合、ob_get_contents と同様に現在のバッファの長さを返します。 FALSEを返します。
ob_end_flush void ob_end_flush(void) 内部バッファの内容をブラウザに送信し、出力バッファを閉じます。 この関数は、出力バッファーの内容 (存在する場合) を送信します。
ob_end_clean void ob_end_clean(void) 内部バッファの内容を削除し、内部バッファを閉じます。 この関数は内部バッファの内容を出力しません。
ob_implicit_flush void ob_implicit_flush ([int flag]) Perl を使用したことのある人なら誰でも、この文字列でバッファを開いたり閉じたりできることを知っています。ob_implicit_flush 関数もそれと同じです。デフォルトではバッファ領域を閉じ、絶対出力をオンにします。
2. 分析例:
1. バッファ制御機能を使用して、ファイルヘッダー内の情報の送信エラーを防ぎます。
<? //PHP プロンプト
ob_start(); //バッファをオープンする
echo "ようこそ /n" //出力
header("location:next.php"); // ブラウザを next.php にリダイレクトします。
?>
ob_start が削除されると、PHP はファイルの 4 行目でエラー メッセージを表示し、「ヘッダーはすべての送信準備ができました」というエラー メッセージを表示します。ただし、ob_start を追加すると、エラーは表示されません。バッファが開かれ、エコー後のエラー。文字はブラウザには出力されませんが、サーバーのバッファに残ります。flush または ob_end_flush を使用するまで出力されないため、ファイル ヘッダーにあるエラーは発生しません。出力されました!
2. 出力を保存します (これは非常に古典的な使用法です)。
関数の出力結果など、クライアントの画面出力情報を知りたいとします。この出力情報はクライアントごとに異なります。関数 <?phpinfo(); ?> を使用してサーバーの設定情報を取得できますが、phpinfo() 関数の出力を保存したい場合はどうすればよいでしょうか?バッファ制御がない前は全く方法がなかったとも言えますが、バッファ制御があれば簡単に解決できます。
<?
ob_start(); //バッファをオープンする
phpinfo(); //phpinfo関数を使用する
$info=ob_get_contents(); //バッファの内容を取得し、$info に代入します。
$file=fopen('phpinfo.txt','w'); //ファイル phpinfo.txt を開きます。
fwrite($file,$info); //phpinfo.txtに情報を書き込みます。
fclose($file); // ファイル phpinfo.txt を閉じます。
?>
上記の方法を使用すると、さまざまなユーザーの phpinfo 情報を保存できます。これは以前は不可能だったかもしれません。同様に、通常の方法では完了するのが難しいタスクを保存するためにバッファメソッドを使用できます。これは、実際には一部の「処理」を「関数」に変換する方法です。