cvs: php4 /ext/zlib zlib.c
| From: | Sander Roobol | Date: | Wed, 21 May 2003 16:05:03 +0000 |
| Subject: | cvs: php4 /ext/zlib zlib.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-21175@lists.php.net to get a copy of this message | ||
sander Wed May 21 12:05:03 2003 EDT
Modified files:
/php4/ext/zlib zlib.c
Log:
ob_gzhandler and zlib.output_compression should send a Content-Length
header if the length of the complete compressed output is known
# MFH follows in a few minutes, please wait with the release :)
Index: php4/ext/zlib/zlib.c
diff -u php4/ext/zlib/zlib.c:1.168 php4/ext/zlib/zlib.c:1.169
--- php4/ext/zlib/zlib.c:1.168 Mon Mar 17 09:45:06 2003
+++ php4/ext/zlib/zlib.c Wed May 21 12:05:03 2003
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zlib.c,v 1.168 2003/03/17 14:45:06 sniper Exp $ */
+/* $Id: zlib.c,v 1.169 2003/05/21 16:05:03 sander Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -45,6 +45,7 @@
#include "safe_mode.h"
#include "ext/standard/php_standard.h"
#include "ext/standard/info.h"
+#include "ext/standard/php_smart_str.h"
#include "php_zlib.h"
#include "fopen_wrappers.h"
#if HAVE_PWD_H
@@ -74,6 +75,22 @@
#define GZIP_HEADER_LENGTH 10
#define GZIP_FOOTER_LENGTH 8
+#define ADD_CL_HEADER(xln) \
+{ \
+ smart_str str = {0}; \
+ sapi_header_line ctr = {0}; \
+ \
+ smart_str_appends(&str, "Content-Length: "); \
+ smart_str_append_long(&str, xln); \
+ smart_str_0(&str); \
+ \
+ ctr.line = str.c; \
+ ctr.line_len = str.len; \
+ \
+ sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC); \
+ smart_str_free(&str); \
+}
+
/* True globals, no need for thread safety */
static int gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */
@@ -1013,6 +1030,8 @@
if (return_original) {
zval_dtor(return_value);
+ } else if(do_start && do_end) {
+ ADD_CL_HEADER(Z_STRLEN_P(return_value));
}
} else {
@@ -1040,6 +1059,8 @@
do_end = (mode & PHP_OUTPUT_HANDLER_END ? 1 : 0);
if (php_deflate_string(output, output_len, handled_output, handled_output_len,
ZLIBG(ob_gzip_coding), do_start, do_end, ZLIBG(output_compression_level) TSRMLS_CC) != SUCCESS) {
zend_error(E_ERROR, "Compression failed");
+ } else if (do_start && do_end) {
+ ADD_CL_HEADER(*handled_output_len);
}
}
}