From db53d496233c06b8df9caa1236d2c87427b70604 Mon Sep 17 00:00:00 2001 From: Jani Taskinen Date: Mon, 17 Aug 2009 17:30:32 +0000 Subject: [PATCH] - Fixed bug #49248 by fixing bug #48994 properly --- ext/zlib/zlib.c | 13 +++++++++++++ main/SAPI.c | 33 --------------------------------- 2 files changed, 13 insertions(+), 33 deletions(-) diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index e70ec7875b..e9c6721491 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -1045,6 +1045,19 @@ static void php_gzip_output_handler(char *output, uint output_len, char **handle } else { do_start = (mode & PHP_OUTPUT_HANDLER_START ? 1 : 0); do_end = (mode & PHP_OUTPUT_HANDLER_END ? 1 : 0); + + if (do_start && !SG(headers_sent) && !SG(request_info).no_headers) { + switch (ZLIBG(compression_coding)) { + case CODING_GZIP: + sapi_add_header_ex(ZEND_STRL("Content-Encoding: gzip"), 1, 1 TSRMLS_CC); + break; + case CODING_DEFLATE: + sapi_add_header_ex(ZEND_STRL("Content-Encoding: deflate"), 1, 1 TSRMLS_CC); + break; + } + sapi_add_header_ex(ZEND_STRL("Vary: Accept-Encoding"), 1, 1 TSRMLS_CC); + } + if (php_deflate_string(output, output_len, handled_output, handled_output_len, do_start, do_end TSRMLS_CC) != SUCCESS) { zend_error(E_ERROR, "Compression failed"); } diff --git a/main/SAPI.c b/main/SAPI.c index 97268253c7..d8d45cefdb 100644 --- a/main/SAPI.c +++ b/main/SAPI.c @@ -32,9 +32,6 @@ #if (HAVE_PCRE || HAVE_BUNDLED_PCRE) && !defined(COMPILE_DL_PCRE) #include "ext/pcre/php_pcre.h" #endif -#if HAVE_ZLIB -#include "ext/zlib/php_zlib.h" -#endif #ifdef ZTS #include "TSRM.h" #endif @@ -790,36 +787,6 @@ SAPI_API int sapi_send_headers(TSRMLS_D) return SUCCESS; } -#if HAVE_ZLIB - /* Add output compression headers at this late stage in order to make - it possible to switch it off inside the script. */ - - if (ZLIBG(output_compression)) { - zval nm_zlib_get_coding_type; - zval *uf_result = NULL; - - ZVAL_STRINGL(&nm_zlib_get_coding_type, "zlib_get_coding_type", sizeof("zlib_get_coding_type") - 1, 0); - - if (call_user_function_ex(CG(function_table), NULL, &nm_zlib_get_coding_type, &uf_result, 0, NULL, 1, NULL TSRMLS_CC) != FAILURE && uf_result != NULL && Z_TYPE_P(uf_result) == IS_STRING) { - char buf[128]; - int len; - - assert(Z_STRVAL_P(uf_result) != NULL); - - len = slprintf(buf, sizeof(buf), "Content-Encoding: %s", Z_STRVAL_P(uf_result)); - if (len <= 0 || sapi_add_header(buf, len, 1) == FAILURE) { - return FAILURE; - } - if (sapi_add_header_ex("Vary: Accept-Encoding", sizeof("Vary: Accept-Encoding") - 1, 1, 0 TSRMLS_CC) == FAILURE) { - return FAILURE; - } - } - if (uf_result != NULL) { - zval_ptr_dtor(&uf_result); - } - } -#endif - /* Success-oriented. We set headers_sent to 1 here to avoid an infinite loop * in case of an error situation. */ -- 2.40.0