com php-src: Optimized parse_url() by using "know n" strings: Zend/zend_string.h ext/standard/url .c
[email protected] (Dmitry Stogov)
| Newsgroups | php.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: 293d99052db363dd655ebe24a3c1fed3c095012a Author: Dmitry Stogov <[email protected]> Mon, 22 May 2017 23:23:12 +0300 Parents: 26a6d20ab50b47291eba0870a36c59f1840df602 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=293d99052db363dd655ebe24a3c1fed3c095012a Log: Optimized parse_url() by using "known" strings Changed paths: M Zend/zend_string.h M ext/standard/url.c Diff: diff --git a/Zend/zend_string.h b/Zend/zend_string.h index 77dd083..81db801 100644 --- a/Zend/zend_string.h +++ b/Zend/zend_string.h @@ -408,6 +408,14 @@ EMPTY_SWITCH_DEFAULT_CASE() _(ZEND_STR_SEVERITY, "severity") \ _(ZEND_STR_STRING, "string") \ _(ZEND_STR_TRACE, "trace") \ + _(ZEND_STR_SCHEME, "scheme") \ + _(ZEND_STR_HOST, "host") \ + _(ZEND_STR_PORT, "port") \ + _(ZEND_STR_USER, "user") \ + _(ZEND_STR_PASS, "pass") \ + _(ZEND_STR_PATH, "path") \ + _(ZEND_STR_QUERY, "query") \ + _(ZEND_STR_FRAGMENT, "fragment") \ typedef enum _zend_known_string_id { diff --git a/ext/standard/url.c b/ext/standard/url.c index c2d7865..9806ed5 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -335,6 +335,7 @@ PHP_FUNCTION(parse_url) size_t str_len; php_url *resource; zend_long key = -1; + zval tmp; ZEND_PARSE_PARAMETERS_START(1, 2) Z_PARAM_STRING(str, str_len) @@ -385,22 +386,38 @@ PHP_FUNCTION(parse_url) array_init(return_value); /* add the various elements to the array */ - if (resource->scheme != NULL) - add_assoc_string(return_value, "scheme", resource->scheme); - if (resource->host != NULL) - add_assoc_string(return_value, "host", resource->host); - if (resource->port != 0) - add_assoc_long(return_value, "port", resource->port); - if (resource->user != NULL) - add_assoc_string(return_value, "user", resource->user); - if (resource->pass != NULL) - add_assoc_string(return_value, "pass", resource->pass); - if (resource->path != NULL) - add_assoc_string(return_value, "path", resource->path); - if (resource->query != NULL) - add_assoc_string(return_value, "query", resource->query); - if (resource->fragment != NULL) - add_assoc_string(return_value, "fragment", resource->fragment); + if (resource->scheme != NULL) { + ZVAL_STRING(&tmp, resource->scheme); + zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_SCHEME), &tmp); + } + if (resource->host != NULL) { + ZVAL_STRING(&tmp, resource->host); + zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_HOST), &tmp); + } + if (resource->port != 0) { + ZVAL_LONG(&tmp, resource->port); + zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PORT), &tmp); + } + if (resource->user != NULL) { + ZVAL_STRING(&tmp, resource->user); + zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_USER), &tmp); + } + if (resource->pass != NULL) { + ZVAL_STRING(&tmp, resource->pass); + zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PASS), &tmp); + } + if (resource->path != NULL) { + ZVAL_STRING(&tmp, resource->path); + zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PATH), &tmp); + } + if (resource->query != NULL) { + ZVAL_STRING(&tmp, resource->query); + zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_QUERY), &tmp); + } + if (resource->fragment != NULL) { + ZVAL_STRING(&tmp, resource->fragment); + zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_FRAGMENT), &tmp); + } done: php_url_free(resource); }