diff --git a/ext/mbstring/tests/007.inc b/ext/mbstring/tests/007.inc index 87e46da920a..5436bae09fe 100644 --- a/ext/mbstring/tests/007.inc +++ b/ext/mbstring/tests/007.inc @@ -6,6 +6,8 @@ $euc_jp = " mb_http_output('EUC-JP') or print("mb_http_output() failed\n"); ob_start('mb_output_handler'); echo $euc_jp; -ob_end_flush(); +$output = ob_get_clean(); + +var_dump( $output ); ?> diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 28b72032006..ed9019b1e09 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -747,6 +747,7 @@ function_entry basic_functions[] = { /* functions from output.c */ PHP_FE(ob_start, NULL) PHP_FE(ob_flush, NULL) + PHP_FE(ob_flush_all, NULL) PHP_FE(ob_clean, NULL) PHP_FE(ob_end_flush, NULL) PHP_FE(ob_end_clean, NULL) diff --git a/main/output.c b/main/output.c index 88fed70faba..d266a9624a1 100644 --- a/main/output.c +++ b/main/output.c @@ -739,7 +739,7 @@ PHP_FUNCTION(ob_start) /* }}} */ /* {{{ proto bool ob_flush(void) - Flush (send) contents of the output buffers */ + Flush (send) contents of the output buffer. The last buffer content is sent to next buffer */ PHP_FUNCTION(ob_flush) { if (ZEND_NUM_ARGS() != 0) @@ -749,12 +749,35 @@ PHP_FUNCTION(ob_flush) php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to flush buffer. No buffer to flush."); RETURN_FALSE; } - + php_end_ob_buffer(1, 1 TSRMLS_CC); RETURN_TRUE; } /* }}} */ +/* {{{ proto bool ob_flush_all(void) + Flush (send) contents of output buffers. All buffered contents will be written/sent */ +PHP_FUNCTION(ob_flush_all) +{ + int orig; + + if (ZEND_NUM_ARGS() != 0) + WRONG_PARAM_COUNT; + + if (!OG(ob_nesting_level)) { + php_error_docref("ref.outcontrol" TSRMLS_CC, E_NOTICE, "failed to flush buffer. No buffer to flush."); + RETURN_FALSE; + } + + orig = OG(implicit_flush); /* save current implicit flush state */ + php_start_implicit_flush(TSRMLS_C); + php_end_ob_buffer(1, 1 TSRMLS_CC); + OG(implicit_flush) = orig; + + RETURN_TRUE; +} +/* }}} */ + /* {{{ proto bool ob_clean(void) Clean (delete) the current output buffer */ PHP_FUNCTION(ob_clean) diff --git a/main/php_output.h b/main/php_output.h index 67d16a1741b..4d0f7f0697f 100644 --- a/main/php_output.h +++ b/main/php_output.h @@ -47,6 +47,7 @@ PHPAPI int php_ob_get_length(zval *p TSRMLS_DC); PHP_FUNCTION(ob_start); PHP_FUNCTION(ob_flush); +PHP_FUNCTION(ob_flush_all); PHP_FUNCTION(ob_clean); PHP_FUNCTION(ob_end_flush); PHP_FUNCTION(ob_end_clean);