mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00

This avoids temporary allocations and some copies. For this benchmark: ```php for ($i=0;$i<2000000;$i++) { http_build_query([999999 => 'foo', 'aaab' => 'def', 'aaaaa'=>1, 'aaaaaaaa' => 'a']); } ``` On an i7-4790: ``` Benchmark 1: ./sapi/cli/php ../buildquery.php Time (mean ± σ): 298.9 ms ± 7.3 ms [User: 295.6 ms, System: 2.3 ms] Range (min … max): 293.6 ms … 314.0 ms 10 runs Benchmark 2: ./sapi/cli/php_old ../buildquery.php Time (mean ± σ): 594.8 ms ± 8.6 ms [User: 590.8 ms, System: 2.4 ms] Range (min … max): 586.3 ms … 616.1 ms 10 runs Summary ./sapi/cli/php ../buildquery.php ran 1.99 ± 0.06 times faster than ./sapi/cli/php_old ../buildquery.php ``` For this benchmark: ```php for ($i=0;$i<2000000;$i++) { http_build_query(['test' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa']); } ``` On an i7-4790: ``` Benchmark 1: ./sapi/cli/php ../buildquery.php Time (mean ± σ): 188.4 ms ± 6.7 ms [User: 184.6 ms, System: 2.9 ms] Range (min … max): 182.0 ms … 205.4 ms 14 runs Benchmark 2: ./sapi/cli/php_old ../buildquery.php Time (mean ± σ): 323.9 ms ± 8.7 ms [User: 319.8 ms, System: 2.7 ms] Range (min … max): 318.0 ms … 341.2 ms 10 runs Summary ./sapi/cli/php ../buildquery.php ran 1.72 ± 0.08 times faster than ./sapi/cli/php_old ../buildquery.php ```
55 lines
2.3 KiB
C
55 lines
2.3 KiB
C
/*
|
|
+----------------------------------------------------------------------+
|
|
| Copyright (c) The PHP Group |
|
|
+----------------------------------------------------------------------+
|
|
| This source file is subject to version 3.01 of the PHP license, |
|
|
| that is bundled with this package in the file LICENSE, and is |
|
|
| available through the world-wide-web at the following url: |
|
|
| https://www.php.net/license/3_01.txt |
|
|
| If you did not receive a copy of the PHP license and are unable to |
|
|
| obtain it through the world-wide-web, please send a note to |
|
|
| license@php.net so we can mail you a copy immediately. |
|
|
+----------------------------------------------------------------------+
|
|
| Author: Jim Winstead <jimw@php.net> |
|
|
+----------------------------------------------------------------------+
|
|
*/
|
|
|
|
#ifndef URL_H
|
|
#define URL_H
|
|
|
|
typedef struct php_url {
|
|
zend_string *scheme;
|
|
zend_string *user;
|
|
zend_string *pass;
|
|
zend_string *host;
|
|
unsigned short port;
|
|
zend_string *path;
|
|
zend_string *query;
|
|
zend_string *fragment;
|
|
} php_url;
|
|
|
|
PHPAPI void php_url_free(php_url *theurl);
|
|
PHPAPI php_url *php_url_parse(char const *str);
|
|
PHPAPI php_url *php_url_parse_ex(char const *str, size_t length);
|
|
PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port);
|
|
PHPAPI size_t php_url_decode(char *str, size_t len); /* return value: length of decoded string */
|
|
PHPAPI size_t php_url_decode_ex(char *dest, const char *src, size_t src_len);
|
|
PHPAPI size_t php_raw_url_decode(char *str, size_t len); /* return value: length of decoded string */
|
|
PHPAPI size_t php_raw_url_decode_ex(char *dest, const char *src, size_t src_len);
|
|
PHPAPI zend_string *php_url_encode(char const *s, size_t len);
|
|
PHPAPI zend_string *php_raw_url_encode(char const *s, size_t len);
|
|
PHPAPI void php_url_encode_to_smart_str(smart_str *buf, char const *s, size_t len, bool raw);
|
|
|
|
#define PHP_URL_SCHEME 0
|
|
#define PHP_URL_HOST 1
|
|
#define PHP_URL_PORT 2
|
|
#define PHP_URL_USER 3
|
|
#define PHP_URL_PASS 4
|
|
#define PHP_URL_PATH 5
|
|
#define PHP_URL_QUERY 6
|
|
#define PHP_URL_FRAGMENT 7
|
|
|
|
#define PHP_QUERY_RFC1738 1
|
|
#define PHP_QUERY_RFC3986 2
|
|
|
|
#endif /* URL_H */
|