PHP_PHP チュートリアルのバッファ制御の実装コード

WBOY
リリース: 2016-07-21 16:13:03
オリジナル
681 人が閲覧しました

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: 内部バッファの内容を返します。

使用法: 文字列 ob_get_contents(void)

説明: この関数は、出力バッファがアクティブ化されていない場合、現在のバッファの内容を返します。FALSE を返します。

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" //Output
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(); ; //バッファの内容を取得し、?$info
?$file=fopen('info.txt','w') //ファイルを開く info.txt
fwrite(?$file, ?$info); // info.txt
fclose(?$file); // ファイルを閉じる info.txt
?>

上記の方法を使用すると、さまざまなユーザーの phpinfo 情報を保存できます。これは以前は不可能だったかもしれません。実は上記は一部の「処理」を「関数」に変換する方法なのです!

http://www.bkjia.com/PHPjc/313531.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/313531.html技術記事 PHPを使うと必然的にheader関数とsetcookie関数を使うことになりますが、この2つの関数はブラウザにファイルのヘッダ情報を送信することになりますが、もしこの2つの関数を以前に使っていれば…
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート