]> granicus.if.org Git - php/commitdiff
- Fixed bug #49248 by fixing bug #48994 properly
authorJani Taskinen <jani@php.net>
Mon, 17 Aug 2009 17:30:32 +0000 (17:30 +0000)
committerJani Taskinen <jani@php.net>
Mon, 17 Aug 2009 17:30:32 +0000 (17:30 +0000)
ext/zlib/zlib.c
main/SAPI.c

index e70ec7875b3d712bca4059341e3ba17100bf7fff..e9c672149147224e755403d240be90f6c8042989 100644 (file)
@@ -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");
                }
index 97268253c785b45c26c4fb935df0759d3f96a41d..d8d45cefdbd0d8fc749893f9985945650ed8ae1b 100644 (file)
@@ -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.
         */