【PHP基础知识】——服务器相关参数及其含义

1、前言

日常开发过程中,常常需要用PHP获取服务器的配置和必要信息,又或者需要获取远程服务器的信息或者ip地址、主机名等。有些方法名时常会混淆,有些参数含义也不尽理解,这里就利用工作后的空余时间写写归纳和总结吧。


2、关于$_SERVER

2.1 $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的数组。这个数组中内容由 Web 服务器创建。

注:$_SERVER这个数组是只有通过web服务器接收到的访问才能获取到服务器的信息,如果只是在代码目录下以CGI方式执行php脚本,则是无法获取到一些客户端地址等参数的值

如果要在多种方式下获取系统或者服务器的配置,可以用$_ENV或者getenv()函数获取,可参考此链接:http://php.net/manual/zh/reserved.variables.environment.php

2.2 $_SERVER是一个超全局变量,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。

2.3 关于$_SERVER变量的参数列表及其含义如下:



3、获取服务器参数的函数

(1)gethostbyname()函数——返回主机名 hostname 对应的 IPv4 互联网地址。

用法:

string  gethostbyname (  string $hostname )
(2)gethostname()函数 — 获取本地机器的标准主机名。
用法:
string  gethostname (  void )
(3)gethostbyaddr()函数 — 获取指定的IP地址对应的主机名。
用法:
string  gethostbyaddr (  string $ip_address )
(4)gethostbynamel()函数——返回互联网主机名 hostname 解析出来的 IPv4 地址列表。
用法:
array  gethostbynamel (  string $hostname )
(5)getservbyname()函数——返回互联网服务 service 指定的协议 protocol 中对应的端口, 依据 /etc/services。
用法:
int  getservbyname (  string $service ,  string $protocol )

4、关于获取客户端IP:

     4.1 $_SERVER['REMOTE_ADDR']; 客户端IP,有可能是用户的IP,也有可能是代理的IP。
4.2 $_SERVER['HTTP_CLIENT_IP']; 代理端的IP,可能存在,可伪造。
4.3 $_SERVER['HTTP_X_FORWARDED_FOR']; 用户是在哪个IP使用的代理,可能存在,可以伪造。

故而此方式可以较为准确地获取客户端ip地址(可避免代理,但是也有可能存在伪造):
$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST'];

5、关于获取服务器IP:

可以使用$_SERVER['SERVER_ADDR']或者gethostbyname()函数获取,gethostbyname函数获取可以在web和CGI方式下进行,CGI方式是通过获取/etc/hosts的配置来取得的服务器IP,需要在hosts文件里存在本机ip配置,方法如下(其中$_SERVER['HOSTNAME']可在命令行获取到):
gethostbyname($_SERVER['HOSTNAME']);

6、关于获取服务器名:

6.1可以使用$_SERVER['SERVER_NAME']获取服务器主机名,该变量可以读取服务器Nginx或Apache的SERVER_NAME配置;
6.2 也可以使用gethostbyname()函数获取,这个函数在实现上,会先查找/etc/hosts文件的内容,然后查询DNS服务器。如果/etc/hosts文件没有配置,返回的主机名就是localhost,也就是127.0.0.1

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值