@ZEAL Blog·厉
We stand alone,
TOGETHER.

PHP下得到客户端ip的方法

Posted by zeal on 2005-05-12 14:18 , 2140 characters |  + 1 - 2   English
转载请保留本行原始出处声明信息 : http://www.zeali.net/entry/42 MaDe1nZEAL
标签 ( PHP ):  , 
PHP Manual中提及的使用getenv('REMOTE_ADDR')来获取客户端ip的方法存在不少问题,所以有必要考虑采用更为完善的方法来比较精确的获取用户客户端的ip。

getenv

(PHP 3, PHP 4, PHP 5)

getenv -- Gets the value of an environment variable

Description

string getenv ( string varname )

Returns the value of the environment variable varname, or FALSE on an error.

<?php// Example use of getenv()$ip = getenv('REMOTE_ADDR');// Or simply use a Superglobal ($_SERVER or $_ENV)$ip = $_SERVER['REMOTE_ADDR'];?>

这是在PHP官方的manual提供的方法。

但是当Web服务器API是ASAPI (IIS)的时候,getenv函数是不起作用的。这种情况下你如果用getenv来取得用户客户端ip的话,得到的将是错误的ip地址。

因此更为安全和准确的方法是尽量避免使用getenv函数。比如可以用以下的函数来获取ip信息:

//Get the real client IP ("bullet-proof")

function GetIP(){
  
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
          
$ip = getenv("HTTP_CLIENT_IP");
      
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
          
$ip = getenv("HTTP_X_FORWARDED_FOR");
      
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
          
$ip = getenv("REMOTE_ADDR");
      
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
          
$ip = $_SERVER['REMOTE_ADDR'];
      
else
          
$ip = "unknown";
  
return($ip);
}

更为详细的讨论请参见http://cn.php.net/manual/zh/function.getenv.php

Last Modified on 2007-05-24 17:06
5 条评论:
- 清风言紫2005-05-12 20:11
工作间隙上来看看,晕,天书!:)
- zeal2005-05-12 22:10
工作时间贴的一般都是工作上相关的东西俄。大部分会是编程开发方面地。偶的艺术细胞没你好,写不出优美的文章来 :)
- 清风言紫 (link) 于 2005-05-13 23:14
好久不写了,写的不是很好,只是表达了自己的所思所想,有时感觉象白开水,有时感觉不够深刻,但我想只要真就行了:)
- fdsa () 于 2005-07-09 08:17
写的不错,
还可以分开大小ip,
以前我做过asp的,
php的一直都在想,
-------------------------------------
现在我想做一个客户机识别,
光做ip好像不行

能不能做个机器名识别
php 获取客户端机器名

php获取客户端mac
- yyy (link) 于 2007-08-06 17:29
局域网id呢
Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | Back To Home | @ZEAL | 沪ICP备05024379号