php url=htt,PHP http_build_url()和PECL安装

这篇博客介绍了如何在没有PECL扩展时,通过自定义常量和函数来合并、替换URL的各个部分。它详细解释了如何根据不同的标志位操作URL,并展示了如何使用这个自定义的http_build_url函数进行URL组装。
摘要由CSDN通过智能技术生成

有一个工作.如果你不想要或者只是不能使用PECL,那么有一种方法,在php.net评论中提到,这是一种替代方法:

if (!function_exists('http_build_url'))

{

define('HTTP_URL_REPLACE', 1); // Replace every part of the first URL when there's one of the second URL

define('HTTP_URL_JOIN_PATH', 2); // Join relative paths

define('HTTP_URL_JOIN_QUERY', 4); // Join query strings

define('HTTP_URL_STRIP_USER', 8); // Strip any user authentication information

define('HTTP_URL_STRIP_PASS', 16); // Strip any password authentication information

define('HTTP_URL_STRIP_AUTH', 32); // Strip any authentication information

define('HTTP_URL_STRIP_PORT', 64); // Strip explicit port numbers

define('HTTP_URL_STRIP_PATH', 128); // Strip complete path

define('HTTP_URL_STRIP_QUERY', 256); // Strip query string

define('HTTP_URL_STRIP_FRAGMENT', 512); // Strip any fragments (#identifier)

define('HTTP_URL_STRIP_ALL', 1024); // Strip anything but scheme and host

// Build an URL

// The parts of the second URL will be merged into the first according to the flags argument.

//

// @param mixed (Part(s) of) an URL in form of a string or associative array like parse_url() returns

// @param mixed Same as the first argument

// @param int A bitmask of binary or'ed HTTP_URL constants (Optional)HTTP_URL_REPLACE is the default

// @param array If set, it will be filled with the parts of the composed url like parse_url() would return

function http_build_url($url, $parts=array(), $flags=HTTP_URL_REPLACE, &$new_url=false)

{

$keys = array('user','pass','port','path','query','fragment');

// HTTP_URL_STRIP_ALL becomes all the HTTP_URL_STRIP_Xs

if ($flags & HTTP_URL_STRIP_ALL)

{

$flags |= HTTP_URL_STRIP_USER;

$flags |= HTTP_URL_STRIP_PASS;

$flags |= HTTP_URL_STRIP_PORT;

$flags |= HTTP_URL_STRIP_PATH;

$flags |= HTTP_URL_STRIP_QUERY;

$flags |= HTTP_URL_STRIP_FRAGMENT;

}

// HTTP_URL_STRIP_AUTH becomes HTTP_URL_STRIP_USER and HTTP_URL_STRIP_PASS

else if ($flags & HTTP_URL_STRIP_AUTH)

{

$flags |= HTTP_URL_STRIP_USER;

$flags |= HTTP_URL_STRIP_PASS;

}

// Parse the original URL

// - Suggestion by Sayed Ahad Abbas

// In case you send a parse_url array as input

$parse_url = !is_array($url) ? parse_url($url) : $url;

// Scheme and Host are always replaced

if (isset($parts['scheme']))

$parse_url['scheme'] = $parts['scheme'];

if (isset($parts['host']))

$parse_url['host'] = $parts['host'];

// (If applicable) Replace the original URL with it's new parts

if ($flags & HTTP_URL_REPLACE)

{

foreach ($keys as $key)

{

if (isset($parts[$key]))

$parse_url[$key] = $parts[$key];

}

}

else

{

// Join the original URL path with the new path

if (isset($parts['path']) && ($flags & HTTP_URL_JOIN_PATH))

{

if (isset($parse_url['path']))

$parse_url['path'] = rtrim(str_replace(basename($parse_url['path']), '', $parse_url['path']), '/') . '/' . ltrim($parts['path'], '/');

else

$parse_url['path'] = $parts['path'];

}

// Join the original query string with the new query string

if (isset($parts['query']) && ($flags & HTTP_URL_JOIN_QUERY))

{

if (isset($parse_url['query']))

$parse_url['query'] .= '&' . $parts['query'];

else

$parse_url['query'] = $parts['query'];

}

}

// Strips all the applicable sections of the URL

// Note: Scheme and Host are never stripped

foreach ($keys as $key)

{

if ($flags & (int)constant('HTTP_URL_STRIP_' . strtoupper($key)))

unset($parse_url[$key]);

}

$new_url = $parse_url;

return

((isset($parse_url['scheme'])) ? $parse_url['scheme'] . '://' : '')

.((isset($parse_url['user'])) ? $parse_url['user'] . ((isset($parse_url['pass'])) ? ':' . $parse_url['pass'] : '') .'@' : '')

.((isset($parse_url['host'])) ? $parse_url['host'] : '')

.((isset($parse_url['port'])) ? ':' . $parse_url['port'] : '')

.((isset($parse_url['path'])) ? $parse_url['path'] : '')

.((isset($parse_url['query'])) ? '?' . $parse_url['query'] : '')

.((isset($parse_url['fragment'])) ? '#' . $parse_url['fragment'] : '')

;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值