Skip to content

Commit 293d990

Browse files
committed
Optimized parse_url() by using "known" strings
1 parent 26a6d20 commit 293d990

File tree

2 files changed

+41
-16
lines changed

2 files changed

+41
-16
lines changed

Zend/zend_string.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,14 @@ EMPTY_SWITCH_DEFAULT_CASE()
408408
_(ZEND_STR_SEVERITY, "severity") \
409409
_(ZEND_STR_STRING, "string") \
410410
_(ZEND_STR_TRACE, "trace") \
411+
_(ZEND_STR_SCHEME, "scheme") \
412+
_(ZEND_STR_HOST, "host") \
413+
_(ZEND_STR_PORT, "port") \
414+
_(ZEND_STR_USER, "user") \
415+
_(ZEND_STR_PASS, "pass") \
416+
_(ZEND_STR_PATH, "path") \
417+
_(ZEND_STR_QUERY, "query") \
418+
_(ZEND_STR_FRAGMENT, "fragment") \
411419

412420

413421
typedef enum _zend_known_string_id {

ext/standard/url.c

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ PHP_FUNCTION(parse_url)
335335
size_t str_len;
336336
php_url *resource;
337337
zend_long key = -1;
338+
zval tmp;
338339

339340
ZEND_PARSE_PARAMETERS_START(1, 2)
340341
Z_PARAM_STRING(str, str_len)
@@ -385,22 +386,38 @@ PHP_FUNCTION(parse_url)
385386
array_init(return_value);
386387

387388
/* add the various elements to the array */
388-
if (resource->scheme != NULL)
389-
add_assoc_string(return_value, "scheme", resource->scheme);
390-
if (resource->host != NULL)
391-
add_assoc_string(return_value, "host", resource->host);
392-
if (resource->port != 0)
393-
add_assoc_long(return_value, "port", resource->port);
394-
if (resource->user != NULL)
395-
add_assoc_string(return_value, "user", resource->user);
396-
if (resource->pass != NULL)
397-
add_assoc_string(return_value, "pass", resource->pass);
398-
if (resource->path != NULL)
399-
add_assoc_string(return_value, "path", resource->path);
400-
if (resource->query != NULL)
401-
add_assoc_string(return_value, "query", resource->query);
402-
if (resource->fragment != NULL)
403-
add_assoc_string(return_value, "fragment", resource->fragment);
389+
if (resource->scheme != NULL) {
390+
ZVAL_STRING(&tmp, resource->scheme);
391+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_SCHEME), &tmp);
392+
}
393+
if (resource->host != NULL) {
394+
ZVAL_STRING(&tmp, resource->host);
395+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_HOST), &tmp);
396+
}
397+
if (resource->port != 0) {
398+
ZVAL_LONG(&tmp, resource->port);
399+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PORT), &tmp);
400+
}
401+
if (resource->user != NULL) {
402+
ZVAL_STRING(&tmp, resource->user);
403+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_USER), &tmp);
404+
}
405+
if (resource->pass != NULL) {
406+
ZVAL_STRING(&tmp, resource->pass);
407+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PASS), &tmp);
408+
}
409+
if (resource->path != NULL) {
410+
ZVAL_STRING(&tmp, resource->path);
411+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_PATH), &tmp);
412+
}
413+
if (resource->query != NULL) {
414+
ZVAL_STRING(&tmp, resource->query);
415+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_QUERY), &tmp);
416+
}
417+
if (resource->fragment != NULL) {
418+
ZVAL_STRING(&tmp, resource->fragment);
419+
zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_FRAGMENT), &tmp);
420+
}
404421
done:
405422
php_url_free(resource);
406423
}

0 commit comments

Comments
 (0)