ホームページ  >  記事  >  バックエンド開発  >  php ob_startの使い方を詳しく解説

php ob_startの使い方を詳しく解説

WBOY
WBOYオリジナル
2016-07-25 08:58:491086ブラウズ
  1. ob_start(); //バッファ
  2. echoを開く "Hellon"; //Output
  3. header("location:index.php"); //ブラウザをインデックスにリダイレクトします。 ob_end_flush();//すべてのコンテンツをブラウザに出力します
  4. //by bbs.it-home.org
  5. ?>
コードをコピー
header() 関数を知っている人なら誰でも知っていることですが、この関数はファイル ヘッダーをブラウザに送信しますが、この関数を使用する前に出力 (スペース、復帰、改行などの空の出力を含む) がある場合は、エラーが表示されます。最初の行の ob_start() を削除してこのプログラムを実行すると、次のエラー メッセージが表示されることがわかります。「ヘッダーはすべて送信準備ができました。」ただし、ob_start を使用すると、エラー メッセージは表示されません。その理由は、バッファーが開かれたときに、echo 以降の文字がブラウザーに出力されず、flush を使用するまでサーバー上に出力されないためです。または ob_end_flush なので、ファイル ヘッダー出力エラーは発生しません。

1. 関連機能の紹介: 1. フラッシュ: バッファーと出力の内容をリフレッシュします。 関数形式:flush() 説明: この関数は頻繁に使用され、非常に効率的です。 2. ob_start: 出力バッファをオープンします。 関数形式: void ob_start(void) 注: バッファーがアクティブ化されると、PHP プログラムからのファイル以外のヘッダー情報はすべて送信されず、内部バッファーに保存されます。バッファの内容を出力するには、ob_end_flush() または flash() を使用してバッファの内容を出力します。 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 フラグ]) 注: Perl を使用したことがある人なら誰でも $|=x の意味を知っています。この文字列はバッファをオープン/クローズできます。デフォルトでは、絶対出力をオンにした後にバッファをクローズします。スクリプト出力 ブラウザに直接送信します。flush() を呼び出す必要はありません

2. 深い理解:

1.フラッシュ機能について: この関数は PHP3 で登場した非常に効率的な関数で、ブラウザのキャッシュを更新する非常に便利な関数です。フラッシュを説明するために、非常に明らかな動作効果を示す例を示します。 例2。

    for($i = 1; $i <= 300; $i++ ) print(" ");
  1. // この文はキャッシュの構造が非常に重要です。 content 一定サイズに達した場合のみブラウザから出力できます
  2. // つまり、キャッシュコンテンツが一定サイズに達しない場合、プログラムの実行が完了するまで出力されません。
  3. // テストの結果、このサイズの下限は 256 文字であることがわかりました。これは、今後キャッシュによって受信されるコンテンツが
  4. // 継続的に送信されることを意味します。
  5. For($j = 1; $j <= 20; $j++) {
  6. echo $j."
  7. ";
  8. flush(); //これにより、キャッシュ内の新しいコンテンツが絞り出されて表示されますブラウザに移動します
  9. sleep(1); // プログラムを 1 秒間「スリープ」させて、効果をより明確に確認できるようにします
  10. }
  11. ?>
コードをコピーします
注:プログラム内で ob_implicit_flush() をヘッダーに追加して絶対フラッシュをオンにすると、プログラム内でフラッシュ() を使用できなくなります。これにより、効率が向上します。

2. obシリーズの機能について: まず、私の良き友人である y10k の例を引用したいと思います。 例 3. たとえば、サーバーとクライアントの設定情報を使用できますが、この情報はクライアントによって異なります。phpinfo() 関数の出力を保存したい場合はどうすればよいでしょうか。バッファ制御がない前は、まったく方法がなかったと言えますが、バッファ制御を使用すると、問題を簡単に解決できます。

ob_start(); //バッファを開きます
  • phpinfo(); //phpinfo関数を使用します
  • $info=ob_get_contents(); //バッファの内容を取得して割り当てます。 to $info
  • $file=fopen('info.txt','w'); // ファイルを開きます info.txt
  • fwrite($file,$info); // info.txt
  • fclose($) file); // ファイル info.txt を閉じます
  • ?>
  • コードをコピーします
  • 上記の方法を使用すると、以前は不可能だったかもしれないさまざまなユーザーの phpinfo 情報を保存できます。実は上記は一部の「処理」を「関数」に変換する方法なのです! 「これはただのことですか? 他に用途はあるのですか?」と疑問に思う人もいるかもしれません。もちろん、著者のフォーラムの PHP 構文強調表示はこれに関連しています (PHP のデフォルトの構文強調表示機能は、直接出力します)。結果を保存できません。呼び出されるたびに表示されるのは CPU の無駄になります。興味がある場合は、作者のフォーラムで構文強調表示機能によって表示された結果が保持されます。見てください

    これで、ob_start() の関数をある程度理解できたのではないでしょうか。上の例は単純に見えますが、実際には、ob_start() の使用の重要なポイントをマスターしたことになります。 . ob_start を使用してブラウザのキャッシュを開くと、flush()、ob_end_flush() を呼び出す前 (またはプログラムが実行される前) にキャッシュの内容が出力されなくなります。 これで、出力コンテンツの後にヘッダー、setcookie、セッションを使用できることがわかりました。これは、ob_start のパラメーターをキャッシュの書き込み後に使用することもできます。 ob_start("ob_gzhandler"); などのコマンドを実行し、最も一般的な方法は、ob_get_contents() を使用してキャッシュの内容を取得し、それを処理することです。 . 処理が完了したら、flush()、ob_end_flush()、プログラム実行完了後の自動出力など、さまざまなメソッドを使用して出力できます。もちろん、ob_get_contents() を使用している場合は、出力メソッドを自分で制御する必要があります。

    1. 静的テンプレート技術

    はじめに: いわゆる静的テンプレート技術は、特定のメソッドを使用して、ユーザーがクライアント側の PHP によって生成された HTML ページを取得できるようにします。この HTML ページが更新されなくなると、別のユーザーがこのページを再度参照したときに、プログラムは、sina、163、sohu などの大量の情報を含む一部の Web サイトの PHP および関連データベースを呼び出すことはなくなります。このようなテクノロジーの恩恵は非常に大きいです。

    1 2 次のページ 最後のページ



    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。