2009-07-25 83 views
2

好足夠簡單我的IP是顯示了錯誤的PHP家用服務器

<?PHP 
echo $_SERVER[REMOTE_ADDR]; 
?> 

好吧,也許不是,我在我的IP是目前72.184.212.85但是上面的代碼,我正在使用的IP阻止系統一個腳本顯示了我的IP爲127.0.0.1

所以我的主服務器IP,當我去我的劇本我的IP顯示爲127.0.0.1 當我去其他網站則顯示爲72.184.212.85

如何獲取要顯示在我的測試服務器上的第一個值?

回答

14

$_SERVER['REMOTE_ADDR']將始終顯示請求來自的IP地址。如果您在自己的網絡中的自己的計算機上訪問自己的腳本,則您的外部IP地址永遠不會發揮作用。該請求將不得不離開您的本地網絡,然後返回以顯示外部地址,但如果它全部是本地的,則永遠不會發生。

+2

那麼,不*總是*。據我所知,如果通過代理連接,REMOTE_ADDR將包含代理的地址,而不是實際調用者的IP地址。但無論如何,答案都是可靠的。 – 2009-07-25 04:28:51

+5

「來自請求的IP。」如果請求來自代理(代表用戶請求),那麼它將成爲代理的地址。這就是TCP/IP的工作原理,PHP不能在代理服務器後面神奇地看到。 – deceze 2009-07-25 04:31:49

1

您必須讓您的服務器公開訪問,然後從公共地址訪問它。我猜你正在使用本地主機訪問你的服務器?

運行你的服務器說端口8080,然後轉發你的路由器的端口,所以它是公開的互聯網。然後訪問您的網頁/ phpscript http://72.184.212.85:8080而不是http://localhost:8080

+0

他最好有一個很好的理由公開揭露這樣的港口。 – deceze 2009-07-25 04:33:10

0

這裏是我不會推薦一個荒唐的解決方案:

註冊你家的IP與域名,然後看看那裏的請求,從通過URL來了:

$url = $_SERVER["SERVER_NAME"]; 

$url = $_SERVER["HTTP_HOST"]; 

然後對該結果進行dns查找,該結果應該返回其註冊的IP,即您的外部IP。

$ext_ip = gethostbyaddr($url); 

的唯一原因,這是行不通的(很抱歉,如果我錯了),如果是使用SERVER_NAME同樣的方法爲「REMOTE_HOST」,這是一個反向DNS查找,這不會解決,因爲您的內部IP不會註冊到該域名。檢查的一個簡單方法是:

phpinfo(); 

並查看環境變量是什麼。

相關問題