15

gzip圧縮と、PHPスクリプトで以前に出力されたものへのアクセスに出力バッファリングを使用します。

if(!ob_start("ob_gzhandler")) ob_start();

ここで、そのスクリプトがob_start()がすでに使用されている別のスクリプトに含まれている場合、警告が表示されます。

警告:ob_start()[ref.outcontrol]:出力ハンドラー'ob_gzhandler'をn行目のファイル名で2回使用することはできません

ob_start()だから私はすでに呼ばれているのかどうかをテストしたいと思います。私はob_get_status()私が必要とするものであるべきだと思いますが、これをテストする際にそれを使用するための最良の方法は何ですか?

4

4 に答える 4

16

ob_get_levelアクティブな出力制御ハンドラーの数をob_list_handlers返し、それらのハンドラーのリフトを返します。だからあなたはこれを行うことができます:

if (!in_array('ob_gzhandler', ob_list_handlers())) {
    ob_start('ob_gzhandler');
} else {
    ob_start();
}

ob_start通常、何度でも呼び出すことができますが、ob_gzhandler既に圧縮されたデータを圧縮する場合とは異なり、ハンドラーとして使用することはできません。

于 2011-05-15T18:47:11.683 に答える
11
if (ob_get_level())
    echo "ob already started";
于 2011-05-15T18:43:06.880 に答える
6

全般的:

if (ob_get_status())  {
  // ob started
}

より具体的に

$status = ob_get_status();
if ($status['name']=='ob_gzhandler') {
 // ob named ob_gzhandler started
}
于 2011-05-15T18:45:09.473 に答える
3

このように使用するのはどうですか?

if (ob_get_level() == 0) ob_start();

于 2011-05-15T18:43:26.257 に答える