PHP を使用する場合、誰もが必然的に header 関数と setcookie 関数を使用します。これら 2 つの関数はファイル ヘッダー情報をブラウザーに送信しますが、これら 2 つの関数を使用する前に出力がある場合 (スペースなどの空の出力も含まれます)。 、キャリッジ リターン、ライン フィードなど)を使用すると、エラーが表示されます。プロンプト情報は次のとおりです。「ヘッダーの送信準備がすべて整いました」!では、出力後にファイルのヘッダー情報を送信する方法はあるのでしょうか? PHP 4.0 にはバッファ制御のための関数がいくつか追加されています。これらの関数を使用すると、多くの問題を解決できます。
1. 関連機能の紹介:
1. フラッシュ: バッファー内の内容を出力し、バッファーを削除します。
関数形式:flush()
注: この関数は頻繁に使用され、非常に効率的です。
2. ob_start: 出力バッファを開きます
関数形式: void ob_start(void)
注: バッファーがアクティブ化されると、PHP プログラムからのファイル以外のヘッダー情報はすべて送信されず、内部バッファーに保存されます。バッファの内容を出力するには、ob_end_flush() を使用するか、ob_end_clean() を使用してバッファの内容を出力します。
3. ob_get_contents: 内部バッファの内容を返します。
使用法: string ob_get_contents(void)
説明: この関数は、出力バッファがアクティブ化されていない場合、現在のバッファの内容を返します。
4. ob_get_length: 内部バッファーの長さを返します。
使用法: int ob_get_length(void)
説明: この関数は、出力バッファがアクティブ化されていない場合、ob_get_contents と同じように現在のバッファの長さを返します。その後、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 の意味を知っています。この文字列はバッファを開いたり閉じたりできます。デフォルトでは、バッファを閉じて絶対出力を開きます。 。
2. 使用例:
著者は冒頭で、バッファ制御関数を使用すると、ファイルヘッダー内の情報送信時のエラーを防ぐことができると述べました。次に例を示します。
?
ob_start(); //バッファを開く
echo "Hello/n"; //出力
header('location:gotourl.php');ブラウザを gotourl.php
?>
にリダイレクトします。 ?
ob_start が削除された場合、PHP はファイルの 4 行目でエラーを要求します (エラー メッセージは上記のとおりです)。ただし、ob_start を使用すると、バッファが開かれるときにエラーは要求されません。 echo 以降の文字 ブラウザには出力されませんが、サーバー上に保持されます。flush または ob_end_flush を使用するまで出力されないため、ファイル ヘッダーの出力エラーは発生しません。
以下は非常に古典的な使用法です:
たとえば、 を使用してサーバーとクライアントの設定情報を取得しますが、この情報はクライアントによって異なります。 phpinfo()関数?バッファ制御が存在しない前は、まったく方法がなかったと言えますが、バッファ制御を使用すると、それを簡単に解決できます。
?
ob_start(); //バッファを開きます
phpinfo(); //phpinfo 関数を使用します
?$info=ob_get_contents(); //バッファの内容を取得します値を割り当てます Give ?$info
?$file=fopen('info.txt','w'); // ファイルを開きます info.txt
fwrite(?$file,?$info); //情報を書き込む info.txt
fclose(?$file); //ファイルを閉じる info.txt
?>
?
上記の方法を使用すると、以前は不可能だったさまざまなユーザーの phpinfo 情報を保存できます。実は上記は一部の「処理」を「関数」に変換する方法なのです!
別: 検証コードによって生成された画像の場合、画像をブラウザに出力する前に、キャッシュ領域をクリアする必要があります
?????????//キャッシュ領域をクリアする
??? ?? ob_clean();
????? // ファイルヘッダーを設定します。 PNG");
??????? ImagePNG($distortion_im);
????????? ImageDestroy($distortion_im);
??????? ImageDestroy ($im);
出典: http://www.poluoluo.com/jzxy/201309/243650.html