cvs: php4 /main main.c output.c php_globals.h php_output.h

From: Date: Tue, 20 Aug 2002 19:49:38 +0000
Subject: cvs: php4 /main main.c output.c php_globals.h php_output.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-13493@lists.php.net to get a copy of this message
helly Tue Aug 20 15:49:38 2002 EDT Modified files: /php4/main main.c output.c php_globals.h php_output.h Log: Changed handling of output buffer sizes. @Added php.ini option "double_buffering" that forces an additional first @output buffer and improved handling of buffer sizes. (Marcus) Index: php4/main/main.c diff -u php4/main/main.c:1.480 php4/main/main.c:1.481 --- php4/main/main.c:1.480 Mon Aug 19 14:40:28 2002 +++ php4/main/main.c Tue Aug 20 15:49:37 2002 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: main.c,v 1.480 2002/08/19 18:40:28 helly Exp $ */ +/* $Id: main.c,v 1.481 2002/08/20 19:49:37 helly Exp $ */ /* {{{ includes */ @@ -197,6 +197,24 @@ } /* }}} */ +/* {{{ OnUpdateOutputBuffering + */ +static PHP_INI_MH(OnUpdateOutputBuffering) +{ + if(!strncasecmp(new_value, "off", sizeof("off"))) { + new_value = "0"; + new_value_length = sizeof("0"); + } else if(!strncasecmp(new_value, "on", sizeof("on"))) { + new_value = "1"; + new_value_length = sizeof("1"); + } + OnUpdateInt(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + + return SUCCESS; +} +/* }}} */ + + /* Need to convert to strings and make use of: * PHP_SAFE_MODE * @@ -249,7 +267,8 @@ STD_PHP_INI_BOOLEAN("magic_quotes_gpc", "1", PHP_INI_ALL, OnUpdateBool, magic_quotes_gpc, php_core_globals, core_globals) STD_PHP_INI_BOOLEAN("magic_quotes_runtime", "0", PHP_INI_ALL, OnUpdateBool, magic_quotes_runtime, php_core_globals, core_globals) STD_PHP_INI_BOOLEAN("magic_quotes_sybase", "0", PHP_INI_ALL, OnUpdateBool, magic_quotes_sybase, php_core_globals, core_globals) - STD_PHP_INI_ENTRY("output_buffering", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM,OnUpdateInt, output_buffering, php_core_globals, core_globals) + STD_PHP_INI_ENTRY("output_buffering", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM,OnUpdateOutputBuffering, output_buffering, php_core_globals, core_globals) + STD_PHP_INI_ENTRY("double_buffering", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM,OnUpdateOutputBuffering, double_buffering, php_core_globals, core_globals) STD_PHP_INI_ENTRY("output_handler", NULL, PHP_INI_PERDIR|PHP_INI_SYSTEM,OnUpdateString, output_handler, php_core_globals, core_globals) STD_PHP_INI_BOOLEAN("register_argc_argv", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM,OnUpdateBool, register_argc_argv, php_core_globals, core_globals) STD_PHP_INI_BOOLEAN("register_globals", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM,OnUpdateBool, register_globals, php_core_globals, core_globals) @@ -826,12 +845,7 @@ php_start_ob_buffer_named(PG(output_handler), 0, 1 TSRMLS_CC); } else if (PG(output_buffering)) { - if (PG(output_buffering)>1) { - php_start_ob_buffer(NULL, PG(output_buffering), 0 TSRMLS_CC); - } - else { - php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC); - } + php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC); } else if (PG(implicit_flush)) { php_start_implicit_flush(TSRMLS_C); Index: php4/main/output.c diff -u php4/main/output.c:1.110 php4/main/output.c:1.111 --- php4/main/output.c:1.110 Mon Aug 19 14:47:23 2002 +++ php4/main/output.c Tue Aug 20 15:49:37 2002 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: output.c,v 1.110 2002/08/19 18:47:23 helly Exp $ */ +/* $Id: output.c,v 1.111 2002/08/20 19:49:37 helly Exp $ */ #include "php.h" #include "ext/standard/head.h" @@ -113,23 +113,39 @@ } } +/* {{{ php_ob_default_buffer_size + * Start output buffering */ +PHPAPI int php_ob_default_buffer_size(TSRMLS_D) +{ + uint buffer_size = (uint)(PG(output_buffering) > 1 ? PG(output_buffering) : 4096); + if (OG(ob_nesting_level)==0 && PG(double_buffering)!=0) { + buffer_size = (uint)(PG(double_buffering) >= buffer_size ? PG(double_buffering) : 4*buffer_size); + } + return buffer_size; +} +/* }}} */ + /* {{{ php_start_ob_buffer * Start output buffering */ PHPAPI int php_start_ob_buffer(zval *output_handler, uint chunk_size, zend_bool erase TSRMLS_DC) { - uint initial_size, block_size; + uint initial_chunk_size, initial_size, block_size; if (OG(ob_lock)) { php_error_docref("ref.outcontrol" TSRMLS_CC, E_ERROR, "Cannot use output buffering in output buffering display handlers"); return FAILURE; } - if (chunk_size) { - initial_size = (chunk_size*3/2); - block_size = chunk_size/2; - } else { - initial_size = 40*1024; - block_size = 10*1024; + if (OG(ob_nesting_level)==0 && PG(double_buffering)) { + initial_chunk_size = php_ob_default_buffer_size(TSRMLS_C); + initial_size = 4*initial_chunk_size; + block_size = initial_chunk_size; + php_ob_init(initial_size, block_size, NULL, initial_chunk_size, erase TSRMLS_CC); + } + if (chunk_size<2) { + chunk_size = php_ob_default_buffer_size(TSRMLS_C); } + initial_size = chunk_size; + block_size = chunk_size; return php_ob_init(initial_size, block_size, output_handler, chunk_size, erase TSRMLS_CC); } /* }}} */ @@ -327,6 +343,9 @@ */ PHPAPI void php_ob_set_internal_handler(php_output_handler_func_t internal_output_handler, uint buffer_size, char *handler_name, zend_bool erase TSRMLS_DC) { + if (buffer_size<2) { + buffer_size = php_ob_default_buffer_size(TSRMLS_C); + } if (OG(ob_nesting_level)==0 || OG(active_ob_buffer).internal_output_handler || strcmp(OG(active_ob_buffer).handler_name, OB_DEFAULT_HANDLER_NAME)) { php_start_ob_buffer(NULL, buffer_size, erase TSRMLS_CC); } @@ -389,6 +408,10 @@ php_error_docref("ref.outcontrol" TSRMLS_CC, E_WARNING, "output handler '%s' cannot be used twice", handler_name); return FAILURE; } + if (!handler_gz && SG(headers_sent)) { + php_error_docref("ref.outcontrol" TSRMLS_CC, E_WARNING, "output handler '%s' cannot be activated - headers already sent", handler_name); + return FAILURE; + } if (!handler_gz && php_ob_init_conflict(handler_name, "zlib output compression" TSRMLS_CC)) return FAILURE; if (!handler_mb && php_ob_init_conflict(handler_name, "ob_iconv_handler" TSRMLS_CC)) @@ -844,8 +867,8 @@ else { add_assoc_long(elem, "type", PHP_OUTPUT_HANDLER_USER); add_assoc_long(elem, "initial_size", ob_buffer->size); - add_assoc_long(elem, "chunk_size", ob_buffer->chunk_size); } + add_assoc_long(elem, "chunk_size", ob_buffer->chunk_size); add_assoc_long(elem, "status", ob_buffer->status); add_assoc_string(elem, "name", ob_buffer->handler_name, 1); add_assoc_bool(elem, "del", ob_buffer->erase); Index: php4/main/php_globals.h diff -u php4/main/php_globals.h:1.79 php4/main/php_globals.h:1.80 --- php4/main/php_globals.h:1.79 Thu Aug 8 15:12:27 2002 +++ php4/main/php_globals.h Tue Aug 20 15:49:37 2002 @@ -58,6 +58,7 @@ zend_bool implicit_flush; int output_buffering; + int double_buffering; char *safe_mode_include_dir; zend_bool safe_mode_gid; Index: php4/main/php_output.h diff -u php4/main/php_output.h:1.40 php4/main/php_output.h:1.41 --- php4/main/php_output.h:1.40 Fri Aug 9 18:29:57 2002 +++ php4/main/php_output.h Tue Aug 20 15:49:37 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_output.h,v 1.40 2002/08/09 22:29:57 helly Exp $ */ +/* $Id: php_output.h,v 1.41 2002/08/20 19:49:37 helly Exp $ */ #ifndef PHP_OUTPUT_H #define PHP_OUTPUT_H @@ -41,6 +41,7 @@ PHPAPI int php_get_output_start_lineno(TSRMLS_D); PHPAPI void php_ob_set_internal_handler(php_output_handler_func_t internal_output_handler, uint buffer_size, char *handler_name, zend_bool erase TSRMLS_DC); PHPAPI int php_ob_handler_used(char *handler_name TSRMLS_DC); +PHPAPI int php_ob_default_buffer_size(TSRMLS_D); PHP_FUNCTION(ob_start); PHP_FUNCTION(ob_flush);

« previous php.cvs (#13493) next »