1. 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教程等學習資源。
2. php中有沒有直接獲取本機IP地址的函數
function_get_client_ip(){
$ip=$_SERVER['REMOTE_ADDR'];
if(isset($_SERVER['HTTP_CLIENT_IP'])&&preg_match('/^([0-9]{1,3}.){3}[0-9]{1,3}$/',$_SERVER['HTTP_CLIENT_IP'])){
$ip=$_SERVER['HTTP_CLIENT_IP'];
}elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])ANDpreg_match_all('#d{1,3}.d{1,3}.d{1,3}.d{1,3}#s',$_SERVER['HTTP_X_FORWARDED_FOR'],$matches)){
foreach($matches[0]AS$xip){
if(!preg_match('#^(10|172.16|192.168).#',$xip)){
$ip=$xip;
break;
}
}
}
return$ip;
}
這是dz的,拿去,不謝!
3. php用什麼函數獲得用戶的IP
簡單的
<?$iipp=$_SERVER["REMOTE_ADDR"];
echo $iipp;?>
復雜點的
<?
//php獲取ip的演算法
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 ;
?>
4. php上傳至伺服器獲取ip顯示127.0.0.1
有些php伺服器上無法使用網上所謂的5中獲取ip地址的方法,那些代碼使用後通常顯示為127.0.0.1,現在下面的方法可以解決這個問題。
獲取ip代碼 ?php if($HTTP_X_FORWARDED_FOR!="") $REMOTE_ADDR=$HTTP_X_FORWARDED_FOR; $tmp_ip=explode(",",$REMOTE_ADDR); $REMOTE_ADDR=$tmp_ip[0]; function getRealIp(){ $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']); } $real_ip=getRealIp(); echo "IP為:".$real_ip; ? 效果圖如下
5. php中怎麼獲取訪問當前頁面電腦的IP地址
本文所述php實例可以完成獲取區域網所有用戶的電腦IP和主機名、及mac地址的功能,對於php程序設計人員有一定的參考借鑒價值。完整代碼如下:
<?php
$bIp = gethostbyname($_ENV['COMPUTERNAME']); //獲取本機的區域網IP
echo "本機IP:",$bIp,"\n";
echo "本機主機名:",gethostbyaddr($bIp),"\n\n\n"; //gethostbyaddr 函數可以根據區域網IP獲取主機名
//默認網關IP
list($ipd1,$ipd2,$ipd3) = explode('.',$bIp);
$mask = $ipd1 . "." . $ipd2 . "." . $ipd3 ;
exec('arp -a',$aIp); //獲取區域網中的其他IP
foreach( $aIp as $ipv) {
if(strpos($ipv,'介面') !== false) {//一下顯示的IP是否是當前區域網中的 而不是其他的類型 可以在cmd下試一下命令
$bool = false;
preg_match('/(?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))/',$ipv,$arr);
if(strcmp($arr[0],$bIp) == 0) {
$bool = true;
}
} else {
if($bool) {
$str = preg_replace('/\s+/', '|', $ipv);
$sArr = explode('|',$str);
if($sArr[1] == 'Internet' || empty($sArr[1])) {
continue;
}
//去除默認網關
if(strcmp($mask . ".1", $sArr[1]) == 0) {
continue;
}
//去除同網關下255的IP
if(strcmp($mask . ".255", $sArr[1]) == 0) {
continue;
}
//去除組播IP
list($cIp) = explode('.', $sArr[1]);
if($cIp >= 224 && $cIp <= 239) {
continue;
}
echo "IP地址:|",$sArr[1],"|\n";
echo "MAC地址:",$sArr[2],"\n";
echo "主機名:",gethostbyaddr($sArr[1]),"\n";
echo "\n\n";
}
}
}
6. 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 取到的值將是空的。
7. php注冊系統咋么獲得用戶ip
只需要一行代碼即可!~~
$ip=$_SERVER['REMOTE_ADDR']; // 獲取訪客的 IP