php獲取真實IP地址,參考方法如下:

貴陽網站制作公司哪家好,找創新互聯建站!從網頁設計、網站建設、微信開發、APP開發、響應式網站等網站項目制作,到程序開發,運營維護。創新互聯建站于2013年創立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯建站。
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);?
}
//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?;?
?
不建議使用js進行這個處理,你這樣做的話完整過程為
1. 用戶訪問php頁面
2. 服務端輸出html
3. 瀏覽器運行js檢查ip所屬區域
4. ajax方式提交區域信息給服務器
5. 服務器返回查詢結果
6. js將查詢結果顯示到當前頁面
你想想這要多長時間。因此最好是php端直接判斷區域,然后直接查詢并輸出就行了。
提供一個php寫的函數,如果有用望采納
function getCityByUserIp() {
$ip = false;
if (isset($_SERVER)){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")){
$ip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("HTTP_CLIENT_IP")) {
$ip = getenv("HTTP_CLIENT_IP");
} else {
$ip = getenv("REMOTE_ADDR");
}
}
if (false === $ip) {
return false;
}
$file = fopen(';ip=' . $ip, 'r');
$content = fread($file, 1024);
fclose($file);
if (! preg_match("/^var remote_ip_info = (\\{[^\\}]+\\});$/", $content, $_match)) {
return false;
}
$ipInfo = json_decode($_match[1]);
return $ipInfo;
}
返回的數組中包括 country, province, city等,如果返回false表示無法獲得ip或該ip沒有在大陸地區匹配的記錄(港澳臺似乎有province,但是沒有city)。
你沒有告知你的服務器網絡狀況。
如果是在正規服務商(比如騰訊云,阿里云等)購買的(虛擬)服務器,一般會有綁定的公網IP,關閉服務器后再打開是相同的。
如果你的服務器是在自己家(或者宿舍)的內部網絡,那么對應的公網ip就要看提供網絡的運營商了,大部分運營商提供的網絡每次撥號(或者登錄)后獲得的公網ip是不同的,甚至有時使用ip網站查詢到你電腦的公網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=$_SERVER["REMOTE_ADDR"];
$q=$mysqli-("select * from account where userip='$ip'");
if($q-rows_num0){echo 'IP已存在';}
else{
$q2=$mysqli-("insert into account (userip) values ('$ip')");
}
?
你看看吧,再有問題請HI我。
你的函數寫錯了,$ip=$_SERVER["REMOTE_ADDR"];
當前題目:php獲取ip數據不同 php獲取ip并記錄
本文鏈接:http://www.yijiale78.com/article40/dooioeo.html
成都網站建設公司_創新互聯,為您提供網站設計、云服務器、用戶體驗、微信公眾號、微信小程序、網站內鏈
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯