⑴ php獲取IP地址的三個函數區別
以下資料供參考:
1、REMOTE_ADDR 瀏覽當前頁面的用戶計算機的ip地址
2、HTTP_X_FORWARDED_FOR 瀏覽當前頁面的用戶計算機的網關
3.HTTP_CLIENT_IP 客戶端的ip
在PHP 中使用 REMOTE_ADDR 來取得客戶端的 IP 地址,但如果客戶端是使用代理伺服器來訪問,那取到的就是代理伺服器的 IP 地址,而不是真正的客戶端 IP 地址。
要想透過代理伺服器取得客戶端的真實 IP 地址,就要使用 HTTP_X_FORWARDED_FOR 來讀取。
不過要注意的事,並不是每個代理伺服器都能用 HTTP_X_FORWARDED_FOR 來讀取客戶端的真實 IP,有些用此方法讀取到的仍然是代理伺服器的 IP。
還有一點需要注意的是:如果客戶端沒有通過代理伺服器來訪問,那麼HTTP_X_FORWARDED_FOR 取到的值將是空的。
⑵ PHP 獲取客戶端真實IP地址
PHP獲取客戶端真實IP地址需依據具體部署環境選擇相應方法。通常,直接貼代碼的文章往往缺乏針對不同情況的詳細說明,這可能導致系統被假IP欺騙。不過,只要合理選擇獲取方式,程序便能避免此類問題。
PHP的運行方式多樣,包括php-cgi、php-fpm、swoole、php-cli、php-mod等。php-fpm作為fast-cgi進程管理器,常與Nginx搭配使用,而php-mod通常與Apache協同工作。從PHP5.4起,PHP亦可作為內置Web伺服器運行,形成了經典搭配如LAMP、LNMP、LNMPA、IIS+PHP。
獲取客戶端真實IP地址時,關鍵在於理解數據傳遞路徑。在無代理層(如PHP內置伺服器/swoole)環境下,客戶端IP數據直接從TCP/IP協議層傳遞,故可通過標准方法如REMOTE_ADDR或getenv("REMOTE_ADDR")獲取與伺服器直接連接的IP地址。在swoole中,通過$request->server['remote_addr']同樣能獲取客戶端IP。
在Nginx代理環境中,如LNMP方案,Nginx與php的通訊依賴於Header配置。通過設置proxy_set_header X-Forwarded-For $remote_addr或proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for,可以正確獲取客戶端真實IP。若配置了X-Real-IP $remote_addr,則可通過此頭獲取IP地址。正確配置這些Header,確保在Nginx代理下獲取到實際客戶端IP。
Apache代理下,獲取IP地址則取決於Apache配置信息。通常情況下,使用$_SERVER["REMOTE_ADDR"]即可獲取真實客戶端IP。若存在Nginx作為上層代理,可在Apache中使用mod_rpaf模塊,將客戶端IP地址傳遞到X-Forwarded-For頭中。
負載均衡、雲虛擬機、Serverless等環境下,IP獲取需查閱對應負載均衡程序文檔。通常通過HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR或X-REAL-IP等標識得知客戶端IP。注意,不應對多種來源進行空值判斷,以防止被偽造者利用,實現IP欺騙。
在IIS + PHP配置中,使用$_SERVER['REMOTE_ADDR']即可獲取IP地址。總結而言,獲取客戶端真實IP地址需結合具體環境選擇合適方法,避免直接復制粘貼代碼。部分方法可能返回數組形式的IP地址,此時應避免使用正則過濾,以防誤處理IPv6地址。更多關於PHP獲取客戶端真實IP地址的詳細信息,可訪問vb.net教程、C#教程、python教程、SQL教程、access 2010教程等學習資源。
⑶ PHP獲取客戶端IP
php獲取客戶端IP地址方法總結
用php獲取客戶端IP地址的方法,具體代碼如下:
?php
$iipp=$_SERVER["REMOTE_ADDR"];
echo
$iipp;
?
///////////////////////////////////////////////
?php
$user_IP
=
($_SERVER["HTTP_VIA"])
?
$_SERVER["HTTP_X_FORWARDED_FOR"]
:
$_SERVER["REMOTE_ADDR"];
$user_IP
=
($user_IP)
?
$user_IP
:
$_SERVER["REMOTE_ADDR"];
echo
$user_IP;
?
///////////////////////////////////////////////
?php
function
get_real_ip(){
$ip=false;
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$ip
=
$_SERVER["HTTP_CLIENT_IP"];
}
if
(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ips
=
explode
(",
",
$_SERVER['HTTP_X_FORWARDED_FOR']);
if
($ip)
{
array_unshift($ips,
$ip);
$ip
=
FALSE;
}
for
($i
=
0;
$i
<
count($ips);
$i++)
{
if
(!eregi
("^(10|172.16|192.168).",
$ips[$i]))
{
$ip
=
$ips[$i];
break;
}
}
}
return
($ip
?
$ip
:
$_SERVER['REMOTE_ADDR']);
}
echo
get_real_ip();
?
///////////////////////////////////////////////
php獲取ip的演算法:
?php
if
($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])
{
$ip
=
$HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
}
elseif
($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])
{
$ip
=
$HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
}
elseif
($HTTP_SERVER_VARS["REMOTE_ADDR"])
{
$ip
=
$HTTP_SERVER_VARS["REMOTE_ADDR"];
}
elseif
(getenv("HTTP_X_FORWARDED_FOR"))
{
$ip
=
getenv("HTTP_X_FORWARDED_FOR");
}
elseif
(getenv("HTTP_CLIENT_IP"))
{
$ip
=
getenv("HTTP_CLIENT_IP");
}
elseif
(getenv("REMOTE_ADDR"))
{
$ip
=
getenv("REMOTE_ADDR");
}
else
{
$ip
=
"Unknown";
}
echo
"你的IP:".$ip
;
?
///////////////////////////////////////////////
?php
if(getenv('HTTP_CLIENT_IP'))
{
$onlineip
=
getenv('HTTP_CLIENT_IP');
}
elseif(getenv('HTTP_X_FORWARDED_FOR'))
{
$onlineip
=
getenv('HTTP_X_FORWARDED_FOR');
}
elseif(getenv('REMOTE_ADDR'))
{
$onlineip
=
getenv('REMOTE_ADDR');
}
else
{
$onlineip
=
$HTTP_SERVER_VARS['REMOTE_ADDR'];
}
echo
$onlineip;
?