PHP下得到用戶端ip的方法

來源:互聯網
上載者:User
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, orFALSE 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");
       elseif (getenv("HTTP_X_FORWARDED_FOR")&&
strcasecmp(getenv("HTTP_X_FORWARDED_FOR"),"unknown"))
           $ip=
getenv("HTTP_X_FORWARDED_FOR");
       elseif (getenv("REMOTE_ADDR")&&
strcasecmp(getenv("REMOTE_ADDR"),"unknown"))
           $ip=
getenv("REMOTE_ADDR");
       elseif (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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.