大家好,今天小编来为大家解答以下的问题,关于php获取服务器ip,PHP如何获取客户端真实IP这个很多人还不知道,现在让我们一起来看看吧!
一、php 获取服务器计算机名和服务器域名
1、做成web服务器需要满足:域名或者公网ip,电脑安装配置web服务,开启80端口允许访问,网站程序。
2、域名或者公网ip,这一点一般家用宽带没有固定的公网ip,常用的动态域名解析花生壳,科迈动态解析,建议申请使用花生壳动态域名解析,并设置到路由器上,这样网站的访问域名是花生壳的子域名。
3、如果有公网固定ip,建议购买一个域名解析到这个ip上,这个公网ip可以在电脑设定。web绑定,防火墙允许80端口就可以了。
4、电脑安装配置web服务,这个条件比较好实现,找个服务器操作系统,如win2003系统,安装上iis组件就可以了,默认80就打开了,然后再配置一下程序需要的环境。
5、如果.程序就安装 framwork相应版本,如果php就配置php+mysql环境。
6、家用宽带默认80端口在路由器不开放的,需要在路由器上做端口映射,将个人电脑ip 80端口通过宽带路由映射出去。
7、网站程序,自己会开发了可以自己做,不会了到网上一些开源程序就可以了。
二、php 如何获取服务器的信息
服务器变量$_SERVER详解:
1、$_SESSION['PHP_SELF']—获取当前正在执行脚本的文件名
2、$_SERVER['SERVER_PROTOCOL']—请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
3、$_SERVER['REQUEST_TIME']—请求开始时的时间戳。从 PHP 5.1.0起有效。和time函数效果一样。
4、$_SERVER['argv']—传递给该脚本的参数。我试了下,get方法可以得到$_SERVER['argv'][0];post方法无法给他赋值。
5、$_SERVER['SERVER_NAME']—返回当前主机名。
6、$_SERVER['SERVER_SOFTWARE']—服务器标识的字串,在响应请求时的头信息中给出。如Microsoft-IIS/6.0
7、$_SERVER['REQUEST_METHOD']—访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
8、$_SERVER['QUERY_STRING']—查询(query)的字符串(URL中第一个问号?之后的内容)。
9、$_SERVER['DOCUMENT_ROOT']—当前运行脚本所在的文档根目录。在服务器配置文件中定义。如E:\server
10、$_SERVER['HTTP_ACCEPT']—当前请求的 Aept:头信息的内容。
11、$_SERVER['HTTP_ACCEPT_CHARSET']—当前请求的 Aept-Charset:头信息的内容。例如:“iso-8859-1,*,utf-8”。
12、$_SERVER['HTTP_ACCEPT_ENCODING']—当前请求的 Aept-Encoding:头信息的内容。例如:“gzip”。
13、$_SERVER['HTTP_ACCEPT_LANGUAGE']—当前请求的 Aept-Language:头信息的内容。例如:“en”。
14、$_SERVER['HTTP_CONNECTION']—当前请求的 Connection:头信息的内容。例如:“Keep-Alive”。
15、$_SERVER['HTTP_HOST']—当前请求的 Host:头信息的内容。
16、$_SERVER['HTTP_REFERER']—到当前页面的前一页面的 URL。
17、$_SERVER['HTTP_USER_AGENT']—返回用户使用的浏览器信息。也可以使用 get_browser()得到此信息。
18、$_SERVER['HTTPS']—如果通过s访问,则被设为一个非空的值,否则返回off.
19、$_SERVER['REMOTE_ADDR']—正在浏览当前页面用户的 IP。
20、$_SERVER['REMOTE_HOST']—正在浏览当前页面用户的主机名。反向域名解析基于该用户的 REMOTE_ADDR。如本地测试返回127.0.0.1
21、$_SERVER['REMOTE_PORT']—用户连接到服务器时所使用的端口。我在本机测试没通过,不知道什么原因。
22、$_SERVER['SCRIPT_FILENAME']—当前执行脚本的绝对路径名。如返回E:\server\index.php
23、$_SERVER['SERVER_ADMIN']—该值指明了 Apache服务器配置文件中的 SERVER_ADMIN参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值
24、$_SERVER['SERVER_PORT']—服务器所使用的端口。默认为“80”。如果使用 SSL安全连接,则这个值为用户设置的 HTTP端口。
25、$_SERVER['SERVER_SIGNATURE']—包含服务器版本和虚拟主机名的字符串。
26、$_SERVER['PATH_TRANSLATED']—当前脚本所在文件系统(不是文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。 Apache 2用户可以使用 d.conf中的 AeptPathInfo On来定义 PATH_INFO。
27、$_SERVER['SCRIPT_NAME']—包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__包含当前文件的绝对路径和文件名(例如包含文件)。
28、$_SERVER['REQUEST_URI']—访问此页面所需的 URI。例如,“/index.html”。
29、$_SERVER['PHP_AUTH_DIGEST']—当作为 Apache模块运行时,进行 HTTP Digest认证的过程中,此变量被设置成客户端发送的“Authorization”HTTP头内容(以便作进一步的认证操作)。
30、$_SERVER['PHP_AUTH_USER']–当 PHP运行在 Apache或 IIS(PHP 5是 ISAPI)模块方式下,并且正在使用 HTTP认证功能,这个变量便是用户输入的用户名。
31、$_SERVER['PHP_AUTH_PW']—当 PHP运行在 Apache或 IIS(PHP 5是 ISAPI)模块方式下,并且正在使用 HTTP认证功能,这个变量便是用户输入的密码。
32、$_SERVER['AUTH_TYPE']–当 PHP运行在 Apache模块方式下,并且正在使用 HTTP认证功能,这个变量便是认证的类型。
三、php如何获取局域网内网的IP
这个跟你的路由设置和访问方式有关。
假设你的服务端在10.10.50.1,公网IP都是8.8.8.8。
假设你的客户端在 10.10.50.100-199,出口公网IP是4.4.4.4
如果你的客户端以公网的形式访问,如,则服务端获得IP都是4.4.4.4。
反之以内网的形式访问,如,获得的IP就是10.10.50.1XX。
解决的办法,要么就是使用内网访问,要么使用设置一下路由,指定10.10.50.100-199访问的话,不走公网,走10网段。
四、PHP如何获取客户端真实IP
如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面。
下面提供一个函数:<?php
//定义一个函数getIP()
function getIP(){global$ip;
if(getenv("HTTP_CLIENT_IP"))
$ip= getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip= getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip= getenv("REMOTE_ADDR");else$ip="Unknow";
return$ip;}
//使用方法:
echo getIP();?>
getenv("REMOTE_ADDR")用来取得客户端的 IP,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP,而不是真正的客户端 IP。要想透过代理服务器取得客户端的真实 IP,就要使用 getenv("HTTP_X_FORWARDED_FOR")来读取。
但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR")取到的值将是空的。
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip= getenv("HTTP_X_FORWARDED_FOR");
表示如果getenv("HTTP_X_FORWARDED_FOR")取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR")取到的真实IP值。
如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip= getenv("HTTP_X_FORWARDED_FOR");这一行语句。
这种情况下已经确认客户端没有使用代理服务器,从而通过
else if(getenv("REMOTE_ADDR"))
这两行语句获得客户端的IP也是真实的IP。