rasmus Thu Jun 15 20:49:05 2006 UTC Modified files: (Branch: PHP_5_2) /php-src/ext/soap php_encoding.c Log: MFH: I don't think the call to xmlNodeSetContentLen() is needed here and it is causing performance problems because it tries to parse the blob and create a subtree. Because we are escaping the string anyway, we are never going to get a subtree, but the entity parsing that is done by xmlNodeSetContentLen() is killing performance on large blobs of text. On one recent example it took a couple of minutes to parse whereas if we just create a text node like this and set the contents to the raw string it is down to milliseconds. http://cvs.php.net/viewcvs.cgi/php-src/ext/soap/php_encoding.c?r1=1.103.2.21.2.1&r2=1.103.2.21.2.2&diff_format=u Index: php-src/ext/soap/php_encoding.c diff -u php-src/ext/soap/php_encoding.c:1.103.2.21.2.1 php-src/ext/soap/php_encoding.c:1.103.2.21.2.2 --- php-src/ext/soap/php_encoding.c:1.103.2.21.2.1 Fri May 26 09:02:33 2006 +++ php-src/ext/soap/php_encoding.c Thu Jun 15 20:49:05 2006 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_encoding.c,v 1.103.2.21.2.1 2006/05/26 09:02:33 dmitry Exp $ */ +/* $Id: php_encoding.c,v 1.103.2.21.2.2 2006/06/15 20:49:05 rasmus Exp $ */ #include <time.h> @@ -727,7 +727,7 @@ static xmlNodePtr to_xml_string(encodeTypePtr type, zval *data, int style, xmlNodePtr parent) { - xmlNodePtr ret; + xmlNodePtr ret, text; char *str; int new_len; TSRMLS_FETCH(); @@ -737,13 +737,15 @@ FIND_ZVAL_NULL(data, ret, style); if (Z_TYPE_P(data) == IS_STRING) { - str = php_escape_html_entities(Z_STRVAL_P(data), Z_STRLEN_P(data), &new_len, 0, 0, NULL TSRMLS_CC); + str = estrndup(Z_STRVAL_P(data), Z_STRLEN_P(data)); + new_len = Z_STRLEN_P(data); } else { zval tmp = *data; zval_copy_ctor(&tmp); convert_to_string(&tmp); - str = php_escape_html_entities(Z_STRVAL(tmp), Z_STRLEN(tmp), &new_len, 0, 0, NULL TSRMLS_CC); + str = estrndup(Z_STRVAL(tmp), Z_STRLEN(tmp)); + new_len = Z_STRLEN(tmp); zval_dtor(&tmp); } @@ -765,7 +767,8 @@ soap_error1(E_ERROR, "Encoding: string '%s' is not a valid utf-8 string", str); } - xmlNodeSetContentLen(ret, str, new_len); + text = xmlNewTextLen(str, new_len); + xmlAddChild(ret, text); efree(str); if (style == SOAP_ENCODED) {
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php