summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJani Taskinen <jani@php.net>2009-08-17 17:30:32 +0000
committerJani Taskinen <jani@php.net>2009-08-17 17:30:32 +0000
commitdb53d496233c06b8df9caa1236d2c87427b70604 (patch)
treee54561788f889c00b7652e097917357da0dd1597
parent46bd9ed59712e5505e0193fff2246ec8a452c89e (diff)
downloadphp-git-db53d496233c06b8df9caa1236d2c87427b70604.tar.gz
- Fixed bug #49248 by fixing bug #48994 properly
-rw-r--r--ext/zlib/zlib.c13
-rw-r--r--main/SAPI.c33
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.
*/