7

私は使用している多くのウェブサイトで読みました

ob_start(); 

php を変数に格納し、php を少し処理するのではなく一度に表示するため、ページの読み込み時間を短縮できます。

また、非常に便利です

header('location: /');

これはスパゲッティ コードだと言う人もいますが、コードがプログラマーにとって明確で簡潔である限り、これは問題にならないはずですよね?

それを使用することについてどう思いますか、出力バッファリングとして何を設定しますか、どのように、いつ、なぜそれを使用すべきか、使用すべきでないかについて、長所と短所があります。

4

3 に答える 3

6

この質問には、トピックに関する非常に良い解説があります

于 2011-04-19T12:00:14.833 に答える
1

出力バッファリングの主な利点は、出力を圧縮するob_gzhandlerで使用できるため、使用する帯域幅が少なくなることです。サーバーが圧縮されたphpファイルを送信するように設定されていない場合に使用すると便利です。

もう1つの利点は、スクリプトがデータベースまたはその他の制約されたリソースを使用し、接続を閉じる前またはそれらのリソースを解放する前に出力がある場合です。このようなものを持つ代わりに:

  1. データベースに接続する
  2. ユーザーへの出力の送信を開始します
  3. ユーザーがすべてを受け取るのを待ちます
  4. データベース接続を閉じます

あなたが持っている:

  1. バッファリングを開始します
  2. データベースに接続する
  3. いくつかのものを出力する
  4. データベース接続を閉じる
  5. バッファをユーザーに送信します。

スクリプトをデータベースに100ミリ秒間接続する必要があり、ユーザーがスクリプトをダウンロードするためにさらに300ミリ秒必要な場合、出力バッファリングがデータベース接続制限へのストレスを解放するのにどのように役立つかを理解できます。

適切に構成されたサーバーを使用して適切にコーディングされたものがこれらの利点を無効にする可能性があることは知っていますが、誰があなたの後にコーディングするかはわかりません。また、サーバーが実行されているサーバーを常に制御できるとは限りません。

于 2011-04-19T12:29:50.033 に答える
-1

一部のユーザーはphpをよく知りません。そのため、ob_start を間違って使用しています。

header()、cookie()、セッションなどのヘッダー関数を使用している場合は、出力を送信する必要はありません。これらの関数は、出力前から使用する必要があります。

しかし、一部のユーザーは、ob_start または出力バッファリング関数を使用して出力の送信を停止する必要があります。

そのため、JavaScript またはメタ転送を使用してユーザーを転送できます。

<script language="javascript"> window.location = 'some.php'; </script>

または、メタ リフレッシュを使用してユーザーを転送できます。

<META HTTP-EQUIV="Refresh" CONTENT="0;URL=some.php"> 

ヘッダー関数を本当に使用する必要がある場合は、出力を送信しないでください (文字またはスペースを入力するか、UTF-8 署名も出力されることを忘れないでください)。

于 2011-04-19T12:04:46.247 に答える