PHP获取URL地址的一些坑

在一些业务场景中,我们需要用到PHP去获取URL地址,度娘搜索了一下,发现都是同一种解决方案,如下:

#测试网址:     http://localhost/blog/testurl.php?id=5

//获取域名或主机地址 
echo $_SERVER['HTTP_HOST']."<br>"; #localhost

//获取网页地址 
echo $_SERVER['PHP_SELF']."<br>"; #/blog/testurl.php

//获取网址参数 
echo $_SERVER["QUERY_STRING"]."<br>"; #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

其中,获取包含端口号的完整url中:

//包含端口号的完整url
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
#http://localhost:80/blog/testurl.php?id=5

这个代码是有一定局限性的,他只能获取域名下的url,如这种形式:

http://ma.my.com/staff?item=person&date=2016%2F12%2F05%E8%87%B32016%2F12%2F11

如果是IP地址这种形式的url,IP地址是获取不到的:

http://119.24.205.83:81/staff?date=2016%2F12%2F19%E8%87%B32016%2F12%2F25&item=project

获取出来是这样的:

http://_:81/staff?date=2016%2F12%2F19%E8%87%B32016%2F12%2F25&item=project

所以,如果想要获取完整的URL,还是得使用这个(经检验,端口号也会获取到,是真正意义上的完整的URL):

//获取完整的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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维技术迷

SQL复习之删除数据库

本次记录删除数据库的两种方法,第一种为直接删除;第二种为先查询再删除。 删除数据库,语句如下: use master--指向当前操作的数据库 go --第一种...

3096
来自专栏互联网杂技

在服务器上利用docker快速部署博客—jpress

0.你需要购买一台服务器,如有没有用本地的机器也可以; 1.首先你的服务器需要安装docker,其他什么都可以不安装了,数据库与jdk,tomcat都不需要; ...

3868
来自专栏运维前线

CentOS7 安装并使用SQL Server

CentOS7 安装并使用SQL Server Linux 上的 SQL Server 安装指南 参考:https://docs.microsoft.com/z...

2336
来自专栏闵开慧

Ubuntu 下mysql常用操作

1:打开mysql数据库 mysql -h主机地址 -u用户名 -p用户密码 mysql -h110.110.110.110 -uroot -pabcd123 ...

3387
来自专栏Python爬虫与数据挖掘

在Navicat中如何新建数据库和表并做查询

上一篇文章,小编给大家分享了在Navicat中如何远程连接数据库,没有来得及上车的小伙伴可以戳这篇文章:在Ubuntu14.04中配置mysql远程连接教程。今...

642
来自专栏小白安全

开始→运行→输入的命令集锦【cmd命令】

gpedit.msc-------------------------组策略   sndrec32-------------------------录音机  ...

2427
来自专栏写写代码吃吃瓜

Tornado中sqlalchemy使用

2116
来自专栏Greenplum

Greenplum权限管理

每个数据库的逻辑结构对象都有一个所有者,所有者默认拥有所有的权限,不需要重新赋予。

1770
来自专栏公有云大数据平台弹性MapReduce

EMR上Hive ACL配置

到目前为止,hive就已经支持acl功能了。现在来看看如果使用acl功能(常用命令)。

1282
来自专栏应用案例

通过案例学习 Secret-每天5分钟玩转 Docker 容器技术

通过案例学习 Secret 在下面的例子中,我们会部署一个 WordPress 应用,WordPress 是流行的开源博客系统。 我们将创建一个 MySQL s...

2237

扫码关注云+社区