all-in-one-event-calendar/lib/compatibility/ob.php
2017-11-09 17:36:04 +01:00

142 lines
No EOL
4.1 KiB
PHP

<?php
/**
* Wrapper for all the output buffer calls (ob_*)
*/
class Ai1ec_Compatibility_OutputBuffer extends Ai1ec_Base {
/**
* Wrap the ob_end_flush() method:
* Flush (send) the output buffer and turn off output buffering
*
* @return bool Returns TRUE on success or FALSE on failure
*/
public function end_flush() {
return ob_end_flush();
}
/**
* Wrap the ob_get_contents() method:
* Return the contents of the output buffer
*
* @retrun string This will return the contents of the output buffer or
* FALSE, if output buffering isn't active.
*/
public function get_contents() {
return ob_get_contents();
}
/**
* Wrap the ob_get_level() method:
* Returns the nesting level of the output buffering mechanism.
*
* @return int Returns the level of nested output buffering handlers or zero
* if output buffering is not active.
*/
public function get_level() {
return ob_get_level();
}
/**
* Wrap the ob_start() method: turn output buffering on.
*
* @param callback $output_callback Method to be called on finish.
* @param int $chunk_size Buffer size limite.
* @param int|bool|null $flags Control performable operations.
*
* @return bool Returns TRUE on success or FALSE on failure.
*/
public function start(
$output_callback = null,
$chunk_size = 0,
$flags = null
) {
if ( 'ob_gzhandler' === $output_callback && $this->is_zlib_active() ) {
$output_callback = null; // do not compress again
}
if ( null === $flags ) {
if ( defined( 'PHP_OUTPUT_HANDLER_STDFLAGS' ) ) {
$flags = PHP_OUTPUT_HANDLER_STDFLAGS;
} else {
$flags = true;
}
}
return ob_start( $output_callback, $chunk_size, $flags );
}
/**
* Gzip the content if possible.
*
* @param string $string
*/
public function gzip_if_possible( $string ) {
$gzip = $this->_registry->get( 'http.request' )->client_use_gzip();
// only use output buffering for gzip.
if ( $gzip ) {
$this->start( 'ob_gzhandler' );
header( 'Content-Encoding: gzip' );
}
echo $string;
if ( $gzip ) {
$this->end_flush();
}
}
/**
* Check if zlib compression is activated.
*
* @return bool Activation status.
*/
public function is_zlib_active() {
$zlib = ini_get( 'zlib.output_compression' );
if ( 'off' !== strtolower( $zlib ) && ! empty( $zlib ) ) {
return true;
}
return false;
}
/**
* Wrap ob_end_clean() and check the zip level to avoid crashing:
* Clean (erase) the output buffer and turn off output buffering
*
* @return bool Returns TRUE on success or FALSE on failure
*/
public function end_clean() {
return ob_end_clean();
}
/**
* Handle the closing of the object buffer when more then one object buffer
* is opened. This cause an error if it's not correctly handled
*
* @return bool Returns TRUE on success or FALSE on failure
*/
public function end_clean_all() {
if ( ini_get( 'zlib.output_compression' ) ) {
return false;
}
$level = $this->get_level();
$success = true;
while ( $level ) {
$this->end_clean();
$new_level = $this->get_level();
if ( $new_level === $level ) {
$success = false;
break;
}
$level = $new_level;
}
return $success;
}
/**
* Wrap the ob_get_clean() method:
* Gets the current buffer contents and delete current output buffer.
*
* @return string Returns the contents of the output buffer and end output
* buffering. If output buffering isn't active then FALSE is returned.
*/
public function get_clean(){
return ob_get_clean();
}
}