2

PHP の出力バッファリングについて混乱しているようです。次のようなコードがあります。

function return_json($obj) {
  ob_get_clean();
  ob_start();
  header("Content-Type: application/json");
  echo json_encode($obj);
  exit;
}

しかし、ob_get_clean() が気に入らないようです。その時点に到達する前に一部の HTML が誤って生成される可能性があるため、私はこれを行いますが、これが意図された方法だと思いました。

私は何が欠けていますか?

4

6 に答える 6

9

ob_get_clean () を使用するには、ある時点で ob_start () を実行していることを確認する必要があります。それ以外の場合は、クリーニングするバッファーがなく、すべてが既にユーザー エージェントにフラッシュされています。

于 2009-03-18T12:25:29.960 に答える
7

ob_get_level()関数を使用して、出力バッファーがアクティブかどうかを確認し、終了します。

while (ob_get_level()) {
    ob_end_clean();
}
于 2009-03-18T12:34:38.987 に答える
3

その関数が呼び出される前に出力をキャッチするには、すべてのコードの前に ob_start を実行する必要があります

于 2009-03-18T12:25:18.400 に答える
1

出力バッファリングを開始した後にバッファをきれいにしたいだけなら

ob_start() 

使用する

ob_clean()

また、echo、print_r などの関数では何もフラッシュされていないことにも注意してください。そのため、スクリプトの最初に ob_start() を指定する必要があります。インクルードがブラウザに何かを送信していないことを確認してください。

于 2009-03-18T12:27:11.313 に答える
0

何も出力されないという問題がある場合、flush メソッドが不足しているように見えますか? また、ob_end_clean() は、出力バッファリングが開始された後にのみ呼び出すことができます。それ以外の場合は、'false' を返します。ob_ メソッドを使用して、既に発行されている既存のヘッダーをクリーンアップすることはできません。自分で確認する必要があります。

function return_json($obj) {
  ob_start();
  header("Content-Type: application/json");
  echo json_encode($obj);
  ob_end_flush();
  exit;
}
于 2009-03-18T13:13:32.263 に答える
0

コンテンツが生成される前に、ob_start を呼び出す必要があります。通常の使用法は次のようになります。

ob_start();
# generated content here

$content = ob_get_contents(); # $content now contains anything that has been output already
ob_end_clean();

# generate any headers you need
echo $content;
于 2009-03-18T12:29:20.153 に答える