如何在PHP中標識服務器IP地址?如何在PHP中標識服務器IP地址
回答
喜歡本作的服務器IP:
$_SERVER['SERVER_ADDR'];
,這爲港口
$_SERVER['SERVER_PORT'];
否。在某些共享主機上返回:: 1 – TheRealChx101 2014-08-02 06:18:00
這可能不正確,這取決於Web服務器前面使用的負載平衡器。在這種情況下,您還需要X-Forwarded-For標頭:http://en.wikipedia.org/wiki/X-Forwarded-For – Ligemer 2014-08-25 23:04:17
這不是服務器地址!這是* remote *瀏覽器調用遠程用戶控制的服務器的地址。使用由'約翰K'的答案而不是 – Ariel 2015-02-12 10:36:26
例如:
$_SERVER['SERVER_ADDR']
當你在IIS上,嘗試:
$_SERVER['LOCAL_ADDR']
當PHP作爲CGI模塊運行時,$ _SERVER ['LOCAL_ADDR']'僅在IIS下可用。 – 2011-04-27 07:58:07
@rudi_visser它也適用於fastcgi,但是如果通過locahost連接,則返回:: 1返回。如果通過服務器的名稱或IP連接,則會返回真實的IP。 – starbeamrainbowlabs 2012-07-21 14:01:49
@starbeamrainbowlabs FastCGI *是* CGI :)我的意思是與作爲ISAPI模塊運行形成鮮明對比,這是在FastCGI作爲穩定平臺出現之前編寫的。 – 2012-07-21 17:54:49
檢查$_SERVER陣列
echo $_SERVER['SERVER_ADDR'];
像這樣:
$_SERVER['SERVER_ADDR'];
$serverIP = $_SERVER["SERVER_ADDR"];
echo "Server IP is: <b>{$serverIP}</b>";
以前的答案都給予$ _ SERVER [ 'SERVER_ADDR']。這在一些IIS安裝上不起作用。如果你想這在IIS上工作,那麼使用以下命令:
$server_ip = gethostbyname($_SERVER['SERVER_NAME']);
您可能需要使用$HTTP_SERVER_VARS['server_ADDR']
,如果你沒有得到上面的答案什麼,如果你正在使用PHP
我發現這對我有用: GetHostByName(「」);
在運行Apache webserver的Windows 7上運行XAMPP v1.7.1。 不幸的是,它只是給我的網關IP地址。
檢查$ _ SERVER數組
echo $_SERVER['SERVER_ADDR'];
這並沒有找到「真正的IP」,它發現任何人可能設置的***任意,未經驗證的HTTP頭,任何人都可能用它來欺騙他們的IP,如果你喜歡他們。如果客戶端位於代理服務器後面,那麼不要相信任何HTTP頭文件。這也不符合這個問題。 – deceze 2013-04-03 10:15:04
無法確定這個答案如何不符合問題。問題是:「我如何識別PHP中的服務器IP地址?」。 OP應該學會如何更好地提問,或者你應該學習如何閱讀問題。此外,如果客戶端位於代理服務器後面,無論您嘗試從服務器端進行嘗試,仍然會受到干擾。完全不同的情況是服務器位於代理之後,因爲您可以使用X-FORWARDED-FOR標頭進行檢查。 – 2014-05-20 15:14:20
我剛剛創建一個簡單的腳本,將帶回$ _ SERVER [「REMOTE_ADDR」]和$ _ SERVER [「SERVER_ADDR」]在IIS,所以你不必改變每個變量。只需將此文本粘貼到每個頁面中包含的php文件中即可。
/** IIS IP Check **/
if(!$_SERVER['SERVER_ADDR']){ $_SERVER['SERVER_ADDR'] = $_SERVER['LOCAL_ADDR']; }
if(!$_SERVER['REMOTE_ADDR']){ $_SERVER['REMOTE_ADDR'] = $_SERVER['LOCAL_ADDR']; }
如果使用在bash PHP殼,您可以使用:
$server_name=exec('hostname');
因爲$_SERVER[] SERVER_ADDR
,HTTP_HOST
和SERVER_NAME
未設置。
最新的投票答案都不會可靠地返回服務器的公共地址。通常$_SERVER['SERVER_ADDR']
將是正確的,但是如果您通過VPN訪問服務器,它可能會返回內部網絡地址而不是公共地址,即使不在同一網絡上,某些配置將只會是空白或其他一些配置指定值。
同樣,有些情況下$host= gethostname(); $ip = gethostbyname($host);
不會返回正確的值,因爲它依靠DNS(內部配置的或外部記錄)和服務器的主機名設置來推斷服務器的IP地址。這兩個步驟都可能有問題。例如,如果服務器的主機名被格式化爲域名(即HOSTNAME=yahoo.com
),那麼(至少在我的php5.4/Centos6設置中)gethostbyname
將跳過直接找到Yahoo.com的地址而不是本地服務器的地址。
此外,由於gethostbyname
倒在公共DNS記錄了測試服務器,與未公開的或不正確的公共DNS記錄(例如,你被localhost
或IP地址訪問服務器,或者如果你正在使用覆蓋公共DNS您當地的hosts
文件),那麼你將得到沒有IP地址(它只會返回主機名),或者更糟糕的是,它會返回公共DNS記錄中指定的錯誤地址(如果存在的話)或域名是否有通配符。
根據不同的情況,你也可以通過做這樣的嘗試第三種方法:
$external_ip = exec('curl http://ipecho.net/plain; echo');
這有其自身的缺陷(依賴於特定的第三方網站,並有可能是網絡設置該路由通過不同的主機或代理路由出站連接)並且像gethostbyname
那樣可能會很慢。我真的不確定哪種方法最經常是正確的,但要記住的一點是,特定的場景/配置會導致所有這些方法的錯誤輸出......因此,如果可能的話,請驗證您的方法使用正在返回您期望的值。
我來到這個頁面尋找一種讓我自己的IP地址不是連接到我的遠程機器的方式。
這不適用於Windows機器。
但如果有人搜索我一直在尋找:
#! /usr/bin/php
<?php
$my_current_ip=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'");
echo $my_current_ip;
(從How to I get the primary IP address of the local machine on Linux and OS X?無恥改編)
這是從shell運行PHP腳本時實際工作的唯一選項。問題:當有多個活動接口時,如何決定返回哪個地址?我測試了有線和無線以太網連接處於活動狀態,然後僅使用無線活動,並且兩次都返回wlan ip。好劇本,謝謝! – 2017-05-20 18:18:37
它實際上並不知道要返回哪一個。它只是從ifconfig的輸出中返回最後一個inet接口,但忽略127.0.0.1。如果你只有「常用」接口,那麼它的表現相當不錯。如果你指定你想要的接口「ifconfig wlan0 | ...」,這可能是最安全的。這個腳本絕不是完美的,但它可以在簡單的設置中工作,它演示瞭如何在原則上做到這一點,以便根據需要進行調整。 – Dominic 2017-05-24 07:36:34
ifconfig | grep'inet addr'| cut -d':'-f 2 | awk'{print $ 1}'| grep -vE'^(192 \ .168 | 10 \。| 172 \ .1 [6789] \。| 172 \ .2 [0-9] \。| 172 \ .3 [01] \。| 127 \。 )'是我對此的最新修訂。它過濾掉所有本地ips,只給你外部 – Dominic 2017-11-14 13:20:46
這是你可以爲上面的例子適應用什麼,而不必擔心捲曲安裝在你的服務器上。
<?php
// create a new cURL resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt ($ch, CURLOPT_URL, "http://ipecho.net/plain");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL and pass it to the browser
$ip = curl_exec ($ch);
echo "The public ip for this server is: $ip";
// close cURL resource, and free up system resources
curl_close ($ch);
?>
- 1. 如何在PHP中檢測DNS服務器和IP地址
- 2. PHP curl,檢索服務器IP地址
- 3. PHP顯示服務器IP地址
- 4. 如何獲取服務器IP地址?
- 5. tcp服務器ip地址
- 6. 服務器的IP地址
- 7. DNS服務器IP地址
- 8. 服務器的IP地址
- 9. 任何網絡服務器可以識別私人IP地址
- 10. 如何從CLI獲取使用PHP的服務器IP地址?
- 11. 如何獲取使用php請求的服務器地址的IP地址?
- 12. 在PHP中獲取服務器的主機名或IP地址
- 13. 如何在.NET中獲取服務器的IP地址?
- 14. 如何在java中獲得服務器地址ip dynamiclly
- 15. 如何在EJB中查找服務器的IP地址
- 16. 如何在PHP(CLI)中查找我的服務器的IP地址
- 17. 如何在php中找到重定向服務器的IP地址
- 18. 如何在電子郵件標頭中隱藏服務器的IP地址
- 19. 在WCF服務中記錄IP地址
- 20. 獲取服務器IP地址
- 21. 獲取IP地址當前服務器
- 22. Google App Engine服務器IP地址
- 23. 獲取服務器IP地址
- 24. Google Cloud Messaging服務器的IP地址
- 25. 帶IP地址的TCP服務器
- 26. APNS服務器的IP地址範圍?
- 27. vagrant laravel homestead http服務器IP地址
- 28. 更改Eclipse的服務器IP地址
- 29. Appengine服務器的IP地址塊?
- 30. 域名服務器IP地址
你的意思是請求的IP地址或運行你的應用程序的機器的IP? – wosis 2011-04-27 07:48:19