第四章:第40节 PHP预定义变量$_SERVER

更新于:2017-04-03 23:12:59

我们再学一个超级有用的预定义变量$_SERVER,从这个预定义变量里程序可以获取很多有用的参数。

1.png

直接访问1.PHP看看$_SERVER都有什么:

1.png

$_SERVER远不止这些东西,我们是直接输入网址进来的,假如是从其他页面点击进来或者提交表单进来,会显示更多东西。

1.png

在我们的PHP手册里会有很详细地对每个下标介绍,楠神就说几个会经常用到的下标参数吧。


一、

1.png

“HTTP_REFERER”即当前页的前一页的地址(如果存在)。

实际应用:可以用来做些验证,比如下载功能,用户从网站点击下载一个文件,只能是从允许的网址进入,可以用“HTTP_REFERER”做IF判断。好处防止其他网站盗链本站的资源。

额外说明下:所有“HTTP_”开头的下标参数都是不可信的,意思是这些参数都是浏览器提交过来的,第三方可以模拟浏览器向服务器提交这些参数。

“HTTP_REFERER”这个参数不可信,PHP的扩展CURL就可以伪造这个参数,后面介绍CURL就会明白了。


二、

1.png

上面这几个参数是很有用的

“SERVER_NAME”即主机名

“SERVER_ADDR”即服务器IP地址

“REMOTE_ADDR”即客户端IP地址


尤其“REMOTE_ADDR”实际用处很大,可以对客户端的IP做验证。可信度很高,不易被伪造。


不知道大家对http协议了解了多少,http协议是基于TCP/IP协议传输数据的(相关文章分享)。

TCP/IP是个协议组,由四个层次组成:网络接口层、网络层、传输层、应用层。

d6ca7bcb0a46f21fd656b015f7246b600c33ae12.jpg

看图中IP协议属于网络层的,TCP协议属于传输层的,而http协议是属于应用层的。我们用浏览器访问网页,整个过程就像下面的图一样:

785686-20160201223112616-1937529463.jpg

“REMOTE_ADDR”是服务器和客户端握手后建立的tcp连接的数据帧里的IP,在应用层是无法修改的,当然也并不是绝对无法伪造,不过对于php程序来说,这是底层的东西,无法伪造。


三、

1.png

“REQUEST_URI”是当前访问的页面的URL,这个参数将是我们下节课的重点,讲一讲怎么对URL重写。


注意:下标要严格区分大小写,预定义变量的下标都要严格区分大小写,培养良好的编程习惯。


本节学习代码》》》