为什么要使用HTTP_HOST和PHP_SELF来构建URL?

时间:2014-05-12 21:07:46

标签: php

我正在接着另一个开发人员拿起这些碎片并找到了这个片段。它没有评论,我很难解释它为什么存在。在requests.php中可以找到它。

$host = $_SERVER['HTTP_HOST'];
$self = $_SERVER['PHP_SELF'];
$query = !empty($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : null;
$url = !empty($query) ? "http://$host$self?$query" : "http://$host$self";

有什么想法吗?

更新 我能够理解URL已被解析,但我无法理解为什么(这应该是任何代码文档的本质)。我不认为这需要投票。提供了代码和问题,我将其打开,以便不指导答案。对这样一个问题的无数回答表明这不是一件坏事。

5 个答案:

答案 0 :(得分:2)

$host = $_SERVER['HTTP_HOST']; // returns the host of the site
$self = $_SERVER['PHP_SELF']; // returns the current page

/*
 * a ternary condition asking if the URL has a query string, 
 * if so make $query equal to the string, 
 * if not make $query null
 */    
 $query = !empty($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : null;

/* 
 * a ternary condition checking if $query is empty
 * if it isn't, concatenate the three elements
 * if it is only concatenate two of them
 */
$url = !empty($query) ? "http://$host$self?$query" : "http://$host$self";

答案 1 :(得分:1)

Documentation

它正在尝试解析当前正在执行的页面的URL。所以:

http://example.com/somepage.php?foo=bar

将是:

$host = 'example.com';
$self = '/somepage.php';
$query = 'foo=bar';

答案 2 :(得分:0)

如果您的网页位于http://www.test.com/test.php?x=y&1=2

  

$ query will ='x = y& 1 = 2'

和...

  

$ url will ='http://www.test.com/test.php?x=y&1=2'

例如,当您在某些页面上时,或者仅在存在查询等情况下,这可用于显示某些内容...

答案 3 :(得分:0)

$host = $_SERVER['HTTP_HOST']; // gets host header
$self = $_SERVER['PHP_SELF']; // filename of current file
$query = !empty($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : null; // if the query string is not empty (query string is stuff after the `?` in the URL) set `$query` to that else set it to null
$url = !empty($query) ? "http://$host$self?$query" : "http://$host$self"; // if `$query` is not empty print a url with the host the name of the current file and the query string else just print a url with the host and current file

答案 4 :(得分:0)

服务器的域名

$host = $_SERVER['HTTP_HOST'];

目前正在执行的脚本。

$self = $_SERVER['PHP_SELF'];

如果服务器查询字符串不为null,则查询将等于服务器的查询字符串,否则查询将等于null。

$query = !empty($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : null;

如果查询不为null,则url将等于$host.$self.$query,否则它的末尾没有查询字符串。

$url = !empty($query) ? "http://$host$self?$query" : "http://$host$self";