のプラグインを書いていますWordPress
。私の目標は、それをすべての人のために機能させることです。一部のページはajax
応答を使用します。一部のユーザーは、テーマや他のプラグインからのエラーと警告を表示するWP_DEBUG定数をアクティブにしました。
コアが含まれているため、これによりAjax PHPが破損Wordpress
し、一部のブログでWPが警告を表示する可能性があります。
私がこれを解決した古い方法は次のとおりです。
<?php
ob_start();
//The wordpress core require
ob_end_clean();
//Now the ajax response:
echo '0';
?>
ただし、あるユーザーから非常に奇妙なバグが報告されました。ajax
ページが応答せず、Operaでのみ機能し、Google Chromeは次のように述べています。エラー330(net :: ERR_CONTENT_DECODING_FAILED):
ユーザーのWebサーバーを調べてみると、WP構成、プラグイン、またはその他の方法でob_start( "ob gzhandler")が使用されていることがわかりました。
ob_get_status(true)は、動作中のWebサーバーに表示されます。
Array
(
[0] => Array
(
[chunk_size] => 4096
[type] => 1
[status] => 0
[name] => default output handler
[del] => 1
)
[1] => Array
(
[chunk_size] => 0
[size] => 40960
[block_size] => 10240
[type] => 1
[status] => 0
[name] => default output handler
[del] => 1
)
)
そして、バグのあるWebサーバーでは:
Array
(
[0] => Array
(
[chunk_size] => 4096
[type] => 1
[status] => 0
[name] => default output handler
[del] => 1
)
[1] => Array
(
[chunk_size] => 0
[size] => 40960
[block_size] => 10240
[type] => 1
[status] => 0
[name] => default output handler
[del] => 1
)
[2] => Array
(
[chunk_size] => 0
[size] => 40960
[block_size] => 10240
[type] => 1
[status] => 0
[name] => ob_gzhandler
[del] => 1
)
)
私のユーザーWebサーバーのシーケンスは次のとおりです。
- 私のコードはob_start()を呼び出します
- WPコアを含め、WPはすべてを初期化し、ob_start( "ob gzhandler")を呼び出します
- 私のコードがob_end_clean()を呼び出すと、失敗します。
WP警告を非表示にする安全な方法が必要ですが、GZIP対応の構成(疑わしいプラグイン)を壊すことはできません。不可能な場合は、警告システムにajaxを壊したままにして、bufferメソッドを忘れることをお勧めします。
クリーンな方法は次のようになると思います。
$buffers = count(ob_get_status(true));
ob_start();
//The wordpress core require
if (count(ob_get_status(true)) == $buffers + 1) {
ob_end_clean();
} else {
ob_flush();
}
//Now the ajax response:
echo '0';
しかし、PHPのバージョンと構成、WPのバージョン、プラグイン、構成による無限の組み合わせのいくつかは、誰かを壊してしまうのではないかと心配しています。この問題を解決する良い方法は何だと思いますか?