php之获取地址栏信息
echo __FILE__; //E:\phpstudy_pro\WWW\ceshi\dir\demo.php
echo $_SERVER["SCRIPT_FILENAME"]; //E:/phpstudy_pro/WWW/ceshi/dir/demo.php
echo $_SERVER['SCRIPT_NAME']; dir/demo.php
echo __DIR__; //E:\phpstudy_pro\WWW\ceshi\dir
echo $_SERVER['HTTP_HOST']; //ceshi:1234,获取域名或主机地址
echo $_SERVER["SERVER_PORT"]; //1234,获取端口
echo $_SERVER["REQUEST_URI"]; ///dir/demo.php?str=demo&num=1,获取域名后的详细地址
echo $_SERVER['PHP_SELF']; //dir/demo.php,获取PHP文件名
echo $_SERVER["QUERY_STRING"]; //str=demo&num=1,获取PHP后的网址参数
print_r($_SERVER); //服务器各种数据
#测试网址: http://localhost/blog/testurl.php?id=5
//获取用户代理
echo $_SERVER['HTTP_REFERER']."<br>";
//获取完整的url
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
#http://localhost/blog/testurl.php?id=5
//包含端口号的完整url
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
#http://localhost:80/blog/testurl.php?id=5
//只取路径
$url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"];
echo dirname($url);
#http://localhost/blog
注释
$_SERVER[‘SCRIPT_FILENAME’] 与 FILE
通常情况下,PHP $_SERVER[‘SCRIPT_FILENAME’] 与 _FILE_ 都会返回 PHP 文件的完整路径(绝对路径)与文件名
就像上面返回的值一样,但在 windows 平台测试,得到结果如上所示可能会出现路径分隔符的细微差别。
区别
尽管 $_SERVER[‘SCRIPT_FILENAME’] 与 __FILE__ 非常相似,但在文件被 include 或 require 包含的时候,二者还是有细微区别。
$ _SERVER[‘SCRIPT_FILENAME’] 反映的是当前执行程序的绝对路径及文件名;__FILE__ 反映的是原始文件(被包含文件)的绝对路径及文件名。
PHP中的
$ _SERVER[‘HTTP_HOST’]
与$_SERVER[‘SERVER_NAME’]
的区别
通过:$ _SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’]可以获取域名及请求的URL。
1、当满足以下3个条件的时候,两者会输出相同的信息
- (1)、服务器端口号为80
- (2)、Apache中的conf中的ServerName设置正确
- (3)、HTTP/1.1协议规范
2、不同点
-
(1),通常情况:
- _SERVER[“HTTP_HOST”] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。
- _SERVER[“SERVER_NAME”] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。
-
(2),当服务器为非80端口时:
- _SERVER[“HTTP_HOST”] 会输出端口号,例如:mimiz.cn:8080
- _SERVER[“SERVER_NAME”] 会直接输出ServerName值
因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT