When WP_DEBUG is set to true, the output buffer always includes an error. Specifically, the error I see is :
<b>Notice</b>: ob_end_flush() [<a href='ref.outcontrol'>ref.outcontrol</a>]: failed to delete buffer zlib output compression.
Since I'm making sure my plugins are PHP 5.2+ compatible, hence testing in PHP 5.2, I'm not sure if this is what's causing the notice in my output buffer.
This additional output is included along with my response and is a deal breaker for me. Traced the problem to be coming from an action that is triggered on shutdown. Specifically, a shutdown calls the following code which in turn gives the notice.
function wp_ob_end_flush_all() {
$levels = ob_get_level();
for ($i=0; $i<$levels; $i++)
ob_end_flush();
}
So, i just remove the action in all my ajax callback functions before I echo the output back to the client eg:
add_action('wp_ajax_prefix_readABC', array('prefix_readABC'));
public function prefix_readABC(){
if(WP_DEBUG){
remove_action( 'shutdown', 'wp_ob_end_flush_all', 1);
}
echo '{"result":["a", "b", "c"]}';
die();
}
The above appears to work without problems. Note the inclusion of remove_action( 'shutdown', 'wp_ob_end_flush_all', 1);
It does feel a little clumsy but I'm only doing it in the ajax request and we're only outputting a piece of json back to the client with a shutdown, so I don't seehow this will have any drastic affects anywhere else and the issue is resolved for now. Lastly, this is only done when WP_DEBUG is true, i.e. your in development. I don't have any problems when in production and WP_DEBUG is turned off (false).
If you are using classes then it's just a matter of having a base class with the remove_action in the constructor.
No comments:
Post a Comment