summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/SAPI.c5
-rw-r--r--main/SAPI.h3
-rw-r--r--main/main.c15
-rw-r--r--main/php_globals.h3
4 files changed, 20 insertions, 6 deletions
diff --git a/main/SAPI.c b/main/SAPI.c
index 563f1cd072..67bd8019de 100644
--- a/main/SAPI.c
+++ b/main/SAPI.c
@@ -271,6 +271,7 @@ SAPI_API void sapi_activate(SLS_D)
SG(request_info).post_data = NULL;
SG(request_info).current_user = NULL;
SG(request_info).current_user_length = 0;
+ SG(request_info).no_headers = 0;
/* It's possible to override this general case in the activate() callback, if
* necessary.
@@ -363,7 +364,7 @@ SAPI_API int sapi_add_header_ex(char *header_line, uint header_line_len, zend_bo
char *colon_offset;
SLS_FETCH();
- if (SG(headers_sent)) {
+ if (SG(headers_sent) && !SG(request_info).no_headers) {
char *output_start_filename = php_get_output_start_filename();
int output_start_lineno = php_get_output_start_lineno();
@@ -457,7 +458,7 @@ SAPI_API int sapi_send_headers()
int ret = FAILURE;
SLS_FETCH();
- if (SG(headers_sent)) {
+ if (SG(headers_sent) || SG(request_info).no_headers) {
return SUCCESS;
}
diff --git a/main/SAPI.h b/main/SAPI.h
index 86eb356104..9c2f06abe3 100644
--- a/main/SAPI.h
+++ b/main/SAPI.h
@@ -73,7 +73,8 @@ typedef struct {
const char *content_type;
- unsigned char headers_only;
+ zend_bool headers_only;
+ zend_bool no_headers;
sapi_post_entry *post_entry;
diff --git a/main/main.c b/main/main.c
index 2ef64e9af1..325a9802b5 100644
--- a/main/main.c
+++ b/main/main.c
@@ -223,6 +223,7 @@ PHP_INI_BEGIN()
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_BOOLEAN("output_buffering", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM,OnUpdateBool, output_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_ALL, OnUpdateBool, register_argc_argv, php_core_globals, core_globals)
STD_PHP_INI_BOOLEAN("register_globals", "1", PHP_INI_ALL, OnUpdateBool, register_globals, php_core_globals, core_globals)
STD_PHP_INI_BOOLEAN("safe_mode", "0", PHP_INI_SYSTEM, OnUpdateBool, safe_mode, php_core_globals, core_globals)
@@ -623,7 +624,15 @@ int php_request_startup(CLS_D ELS_DC PLS_DC SLS_DC)
sapi_add_header(SAPI_PHP_VERSION_HEADER, sizeof(SAPI_PHP_VERSION_HEADER)-1, 1);
}
- if (PG(output_buffering)) {
+ if (PG(output_handler)) {
+ zval *output_handler;
+
+ ALLOC_INIT_ZVAL(output_handler);
+ Z_STRLEN_P(output_handler) = strlen(PG(output_handler)); /* this can be optimized */
+ Z_STRVAL_P(output_handler) = estrndup(PG(output_handler), Z_STRLEN_P(output_handler));
+ Z_TYPE_P(output_handler) = IS_STRING;
+ php_start_ob_buffer(output_handler);
+ } else if (PG(output_buffering)) {
php_start_ob_buffer(NULL);
} else if (PG(implicit_flush)) {
php_start_implicit_flush();
@@ -656,11 +665,11 @@ void php_request_shutdown(void *dummy)
PLS_FETCH();
if (setjmp(EG(bailout))==0) {
- sapi_send_headers();
+ php_end_ob_buffers(SG(request_info).headers_only?0:1);
}
if (setjmp(EG(bailout))==0) {
- php_end_ob_buffers(SG(request_info).headers_only?0:1);
+ sapi_send_headers();
}
if (PG(modules_activated) && setjmp(EG(bailout))==0) {
diff --git a/main/php_globals.h b/main/php_globals.h
index 97461c1e0a..aa313a4075 100644
--- a/main/php_globals.h
+++ b/main/php_globals.h
@@ -65,6 +65,9 @@ struct _php_core_globals {
zend_bool safe_mode;
zend_bool sql_safe_mode;
zend_bool enable_dl;
+
+ char *output_handler;
+
char *safe_mode_exec_dir;
long memory_limit;