文字

http_build_url

(PECL pecl_http >= 0.21.0)

http_build_url产生一个 URL

说明

string http_build_url ([ mixed $url [, mixed $parts [, int $flags = HTTP_URL_REPLACE [, array &$new_url ]]]] )

产生一个 URL。

第二个 URL 的组成部分将根据 flags 参数,合并到第一个 URL。

参数

url

一个或多个 URL 的组成部分字符串,或类似 parse_url() 所返回的关联数组。

parts

和第一个参数一样。

flags

HTTP_URL 常量的二进制或运算位掩码;默认是 HTTP_URL_REPLACE

new_url

如果设置了,它将被 URL 组成部分所填充,就像 parse_url() 所返回的那样

返回值

成功时返回新的 URL, 或者在失败时返回 FALSE

范例

Example #1 http_build_url() 的一个例子

<?php
echo  http_build_url ( "http://user@www.example.com/pub/index.php?a=b#files" ,
    array(
        
"scheme"  =>  "ftp" ,
        
"host"  =>  "ftp.example.com" ,
        
"path"  =>  "files/current/" ,
        
"query"  =>  "a=c"
    
),
    
HTTP_URL_STRIP_AUTH  HTTP_URL_JOIN_PATH  HTTP_URL_JOIN_QUERY  HTTP_URL_STRIP_FRAGMENT
);
?>

以上例程会输出:

ftp://ftp.example.com/pub/files/current/?a=c

参见

  • parse_url() - 解析 URL,返回其组成部分
  • http_build_str() - 产生一个查询字符串

用户评论:

[#1] mtinsley at dallasairmotive dot com [2015-07-13 13:39:18]

To see new interface:
http://devel-m6w6.rhcloud.com/mdref/http/Url

<?php
$url 
= new http\Url('http://google.com', ['query' => http_build_query(['q' => 'test'])]);

echo 
$url->toString();

// Output: http://google.com/?q=test
?>

[#2] zlatko dot zlatev at gmail dot com [2015-03-15 11:09:16]

pecl_http 2+ won't provide http_ functions any more. They moved to Http namespace, sadly no backwards compat. 

To sum it up - As of pecl_http >=2.0.0 this is no longed available. Also pecl_http 1.7.6 will work only for PHP <=5.5. For PHP 5.6 we are forced to use version pecl_http 2.0.6+

[#3] pasafama at gmail dot com [2014-09-26 16:04:33]

It seems to me that the return value must always have a protocol, a host and a path. If they are not provided in the input, default values are added.

From what I saw, the default value for the protocol is 'http://', for the host is the hostname (if running from cli) or the variable $_SERVER['HTTP_HOST'], for the path is the variable $_SERVER['SCRIPT_NAME']

[#4] michael at REMOVE-THIS-PART dot muryn dot name [2014-04-01 23:16:37]

To those that want to use http_build_url() without parameters to get the canonical page URL, be aware that this function seem to consider the equivalent of SCRIPT_NAME for the path instead of REQUEST_URI.

For example, if /example serve info.php (you can do this with mod_rewrite in Apache for example), while accessing http://example.com/example?test=1 this function will return http://example.com/info.php?test=1 instead of the URL the user see.  This could lead to obvious problems if you build other URL from this.

So like another comment say, it is reckless to use that undocumented feature.  Instead here is what I suggest:

<?php
function get_request_url()
{
    return 
get_request_scheme() . '://' $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}

function 
get_request_scheme()
{
    return (isset(
$_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' 'http';
}
?>

[#5] anon at example dot com [2014-02-04 11:33:47]

If you need to access the url to the current script you should examine $_SERVER['REQUEST_URI'].

Using an undocumented feature that gives the same functionality as existing PHP library calls is reckless.

[#6] Yzmir Ramirez [2013-07-10 18:10:34]

So you used parse_url(...) and looking to put it back together and seeing if this function will do?  

You may have seen some glue* functions that will rebuild the url with the parts that you have.  Try this:

<?php

   $parts 
parse_url($uri);
   

   
$uri http_build_url(''$parts);
?>


Notice the first param is empty string.  It also works with NULL and array() as well.

[#7] randyg at ernieball dot com [2012-02-06 20:15:14]

Although I've never used this function, based on the documentation it seems that the above code should also include the following:

<?php
    
if ( ! is_array$url ) ) // Added - Randy
    // Parse the original URL
        
$parse_url parse_url($url);
        
// allow parts to be a url Added - Randy
    
if ( ! is_array$parts ) )
        
$parts parse_url$parts );
?>

[#8] Ant P. [2010-06-09 09:58:49]

This function has a useful undocumented feature - the defaults are set in such a way that calling it with no parameters returns the full URL of the page being accessed.

上一篇: 下一篇: