dmitry Fri Jul 13 14:00:06 2007 UTC
Modified files: (Branch: PHP_5_2)
/php-src NEWS
/php-src/ext/soap soap.c
Log:
Fixed bug #41635 (SoapServer and zlib.output_compression with FastCGI result
in major slowdown
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.834&r2=1.2027.2.547.2.835&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.834 php-src/NEWS:1.2027.2.547.2.835
--- php-src/NEWS:1.2027.2.547.2.834 Fri Jul 13 01:24:15 2007
+++ php-src/NEWS Fri Jul 13 14:00:04 2007
@@ -108,6 +108,8 @@
- Fixed bug #41655 (open_basedir bypass via glob()). (Ilia)
- Fixed bug #41640 (get_class_vars produces error on class constants).
(Johannes)
+- Fixed bug #41635 (SoapServer and zlib.output_compression with FastCGI result
+ in major slowdown). (Dmitry)
- Fixed bug #41633 (Crash instantiating classes with self-referencing
constants). (Dmitry)
- Fixed bug #41630 (segfault when an invalid color index is present in
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/soap.c?r1=1.156.2.28.2.25&r2=1.156.2.28.2.26&diff_format=u
Index: php-src/ext/soap/soap.c
diff -u php-src/ext/soap/soap.c:1.156.2.28.2.25
php-src/ext/soap/soap.c:1.156.2.28.2.26
--- php-src/ext/soap/soap.c:1.156.2.28.2.25 Sun May 27 17:46:46 2007
+++ php-src/ext/soap/soap.c Fri Jul 13 14:00:05 2007
@@ -17,7 +17,7 @@
| Dmitry Stogov <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: soap.c,v 1.156.2.28.2.25 2007/05/27 17:46:46 iliaa Exp $ */
+/* $Id: soap.c,v 1.156.2.28.2.26 2007/07/13 14:00:05 dmitry Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -1848,8 +1848,6 @@
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Dump memory
failed");
}
- snprintf(cont_len, sizeof(cont_len), "Content-Length: %d",
size);
- sapi_add_header(cont_len, strlen(cont_len), 1);
if (soap_version == SOAP_1_2) {
sapi_add_header("Content-Type: application/soap+xml;
charset=utf-8", sizeof("Content-Type: application/soap+xml; charset=utf-8")-1,
1);
} else {
@@ -1857,8 +1855,38 @@
}
xmlFreeDoc(doc_return);
- php_write(buf, size TSRMLS_CC);
- xmlFree(buf);
+
+ if (zend_ini_long("zlib.output_compression",
sizeof("zlib.output_compression"), 0) &&
+ zend_hash_exists(EG(function_table), "ob_gzhandler",
sizeof("ob_gzhandler"))) {
+ zval nm_ob_gzhandler;
+ zval str;
+ zval mode;
+ zval result;
+ zval *params[2];
+
+ INIT_ZVAL(result);
+ ZVAL_STRINGL(&nm_ob_gzhandler, "ob_gzhandler",
sizeof("ob_gzhandler") - 1, 0);
+ ZVAL_STRINGL(&str, (char*)buf, size, 0);
+ params[0] = &str;
+ ZVAL_LONG(&mode, PHP_OUTPUT_HANDLER_START |
PHP_OUTPUT_HANDLER_END);
+ params[1] = &mode;
+ if (call_user_function(CG(function_table), NULL,
&nm_ob_gzhandler, &result, 2, params TSRMLS_CC) != FAILURE &&
+ Z_TYPE(result) == IS_STRING &&
+ zend_alter_ini_entry("zlib.output_compression",
sizeof("zlib.output_compression"), "0", sizeof("0")-1, PHP_INI_USER,
PHP_INI_STAGE_RUNTIME) == SUCCESS) {
+ xmlFree(buf);
+ buf = NULL;
+ snprintf(cont_len, sizeof(cont_len),
"Content-Length: %d", Z_STRLEN(result));
+ sapi_add_header(cont_len, strlen(cont_len), 1);
+ php_write(Z_STRVAL(result), Z_STRLEN(result)
TSRMLS_CC);
+ }
+ zval_dtor(&result);
+ }
+ if (buf) {
+ snprintf(cont_len, sizeof(cont_len), "Content-Length:
%d", size);
+ sapi_add_header(cont_len, strlen(cont_len), 1);
+ php_write(buf, size TSRMLS_CC);
+ xmlFree(buf);
+ }
} else {
sapi_add_header("HTTP/1.1 202 Accepted", sizeof("HTTP/1.1 202
Accepted")-1, 1);
sapi_add_header("Content-Length: 0", sizeof("Content-Length:
0")-1, 1);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php