[英]How to use php to get ip address of a visitor
我想獲得我的用戶的位置,但我不想使用第三方系統來做到這一點
所以我做了這個腳本
<?php
function getIPAddress() {
//whether ip is from the share internet
if(!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
//whether ip is from the proxy
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
//whether ip is from the remote address
else{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$ip = getIPAddress();
echo $ip;
?>
當我訪問 http://localhost 時它是 ::1 然后當我連接到互聯網時我去http://192.168.43.104它是 192.168.43.104 我在網上看到 192.168.xxx.xxx 是公共的ip 並且有數百萬用戶使用 192.168.xxx.xxx ,並且無法從中獲取我的訪客位置
我的問題是
編輯
目前在我的頁面上它告訴我 192.168.43.104 但如果我用谷歌搜索“我的 ip”,我會得到197.210.85.238 Your public IP address
是從我的公共197.210.85.238 Your public IP address
中獲得的,我的位置可以從
您的服務器只能在您通過 WAN(又名公共互聯網)訪問時了解您的公共 IP。
如果您使用以下 IP 訪問服務器:
請注意,它們是 IANA 為私有網絡保留的 IPv4 地址,應該只在路由器后面使用。 並且任何路由器都可以自由使用它們(因此它對定位用戶地理位置沒有意義)。
由於您僅通過局域網 (LAN) 訪問該服務器,因此您的流量根本沒有通過公共互聯網路由。 本地網絡流量將不包含您要求的公共 IP 信息。
簡而言之,請將您的應用程序放在公共服務器上以正確測試您的代碼。
PS 正如其他人指出的那樣,geoip 數據從來都不是 100% 准確的。 如果您決定僅根據 IP 確定用戶位置,則您需要接受結果不准確。
我來回答你的兩個問題。
是的,它是一個私有 IP 地址范圍。 IP 地理定位服務(例如 IP2Location)僅適用於公共 IP 地址范圍。
問題不在於您的腳本。 一個簡單的 $_SERVER['REMOTE_ADDR']; 在大多數情況下,應該獲取您的訪問者 IP 地址。 但是,您需要在 WAN 而不是 LAN 中對其進行測試。 例如,您將頁面放在位於數據中心的服務器中,並從辦公室的另一個網絡訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.