+
+ if (z_composed_url) {
+ http_build_url(old_url, new_url, &composed_url, &url_str, &url_len);
+
+ zval_dtor(z_composed_url);
+ array_init(z_composed_url);
+ if (composed_url->scheme) {
+ add_assoc_string(z_composed_url, "scheme", composed_url->scheme, 1);
+ }
+ if (composed_url->user) {
+ add_assoc_string(z_composed_url, "user", composed_url->user, 1);
+ }
+ if (composed_url->pass) {
+ add_assoc_string(z_composed_url, "pass", composed_url->pass, 1);
+ }
+ if (composed_url->host) {
+ add_assoc_string(z_composed_url, "host", composed_url->host, 1);
+ }
+ if (composed_url->port) {
+ add_assoc_long(z_composed_url, "port", composed_url->port);
+ }
+ if (composed_url->path) {
+ add_assoc_string(z_composed_url, "path", composed_url->path, 1);
+ }
+ if (composed_url->query) {
+ add_assoc_string(z_composed_url, "query", composed_url->query, 1);
+ }
+ if (composed_url->fragment) {
+ add_assoc_string(z_composed_url, "fragment", composed_url->fragment, 1);
+ }
+ php_url_free(composed_url);
+ } else {
+ http_build_url(old_url, new_url, NULL, &url_str, &url_len);
+ }
+
+ if (new_url) {
+ php_url_free(new_url);
+ }
+ php_url_free(old_url);
+
+ RETURN_STRINGL(url_str, url_len, 0);