php 獲取本機外網/公網IP的代碼


  一般都是用 $_SERVER['REMOTE_ADDR'] 獲取用戶IP,

  但如果使用了反向代理的,HTTP頭中 REMOTE_ADDR 就不是用戶的地址,反而是上一級代理的地址了。

  獲取用戶的真實外網IP

function getRealIp() {
  $onlineip = '';
  if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
    $onlineip = getenv('HTTP_CLIENT_IP');
  } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
    $onlineip = getenv('HTTP_X_FORWARDED_FOR');
  } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
    $onlineip = getenv('REMOTE_ADDR');
  } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
    $onlineip = $_SERVER['REMOTE_ADDR'];
  }
  return $onlineip;
}

  趕緊試一下吧 ~

備注:

  getenv(string varname) ,函數定義:獲取系統的環境變量,根據提供不同的參數可以獲取不同的環境變量。

具體參數:
“PHP_SELF”          當前正在執行腳本的文件名,與document root 相關。如果 PHP 以命令行方式運行,該變量在PHP 4.3.0 之前無效。

“argv”            傳遞給該腳本的參數。當腳本運行在命令行方式時,argv 變量傳遞給程序C 語言樣式的命令行參數。當調用GET 方法時,該變量包含請求的數據。

“argc”            包含傳遞給程序的命令行參數的個數(如果運行在命令行模式)。

“GATEWAY_INTERFACE”    服務器使用的CGI 規范的版本。例如,“CGI/1.1”。

“SERVER_NAME”          當前運行腳本所在服務器主機的名稱。如果該腳本運行在一個虛擬主機上,該名稱是由那個虛擬主機所設置的值決定。

“SERVER_SOFTWARE”       服務器標識的字串,在響應請求時的頭信息中給出。

“SERVER_PROTOCOL”       請求頁面時通信協議的名稱和版本。例如,“HTTP/1.0”。

“REQUEST_METHOD”         訪問頁面時的請求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
                  注: 如果請求的方式是HEAD,PHP 腳本將在送出頭信息后中止(這意味着在產生任何輸出后,不再有輸出緩沖)。

“REQUEST_TIME”          請求開始時的時間戳。從PHP 5.1.0 起有效。

“QUERY_STRING”         查詢(query)的字符串(URL 中第一個問號? 之后的內容)。

“DOCUMENT_ROOT”        當前運行腳本所在的文檔根目錄。在服務器配置文件中定義。

“HTTP_ACCEPT”          當前請求的Accept: 頭信息的內容。

“HTTP_ACCEPT_CHARSET”      當前請求的Accept-Charset: 頭信息的內容。例如:“iso-8859-1,*,utf-8”。

“HTTP_ACCEPT_ENCODING”    當前請求的Accept-Encoding: 頭信息的內容。例如:“gzip”。

“HTTP_ACCEPT_LANGUAGE”    當前請求的Accept-Language: 頭信息的內容。例如:“en”。

“HTTP_CONNECTION”        當前請求的Connection: 頭信息的內容。例如:“Keep-Alive”。

“HTTP_HOST”           當前請求的Host: 頭信息的內容。

“HTTP_REFERER”         鏈接到當前頁面的前一頁面的URL 地址。不是所有的用戶代理(瀏覽器)都會設置這個變量,而且有的還可以手工修改HTTP_REFERER。因此,這個變量不總是真實正確的。

“HTTP_USER_AGENT”       當前請求的User-Agent: 頭信息的內容。該字符串表明了訪問該頁面的用戶代理的信息。
                 一個典型的例子是:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。也可以使用get_browser() 得到此信息。 “HTTPS”          如果腳本是通過HTTPS 協議被訪問,則被設為一個非空的值。 “REMOTE_ADDR”      正在瀏覽當前頁面用戶的IP 地址。 “REMOTE_HOST”       正在瀏覽當前頁面用戶的主機名。反向域名解析基於該用戶的REMOTE_ADDR。
               注: 必須配置Web 服務器來建立此變量。例如Apache 需要在httpd.conf 中有HostnameLookups On。參見gethostbyaddr()。 “REMOTE_PORT”       用戶連接到服務器時所使用的端口。 “SCRIPT_FILENAME”    當前執行腳本的絕對路徑名。              注: 如果腳本在CLI 中被執行,作為相對路徑,例如file.php 或..
/file.php,$_SERVER[‘SCRIPT_FILENAME’] 將包含用戶指定的相對路徑。 “SERVER_ADMIN”     該值指明了Apache 服務器配置文件中的SERVER_ADMIN 參數。如果腳本運行在一個虛擬主機上,則該值是那個虛擬主機的值。 “SERVER_PORT”     服務器所使用的端口。默認為“80”。如果使用SSL 安全連接,則這個值為用戶設置的HTTP 端口。 “SERVER_SIGNATURE”   包含服務器版本和虛擬主機名的字符串。 “PATH_TRANSLATED”   當前腳本所在文件系統(不是文檔根目錄)的基本路徑。這是在服務器進行虛擬到真實路徑的映像后的結果。              注: PHP 4.3.2 之后,PATH_TRANSLATED 在Apache 2 SAPI 模式下不再和 Apache1 一樣隱含賦值,而是若 Apache 不生成此值,PHP 便自己生成並將其值放入SCRIPT_FILENAME 服務器常量中。
             這個修改遵守了CGI 規范,PATH_TRANSLATED 僅在PATH_INFO 被定義的條件下才存在。              Apache
2 用戶可以使用httpd.conf 中的AcceptPathInfo On 來定義PATH_INFO。 “SCRIPT_NAME”     包含當前腳本的路徑。這在頁面需要指向自己時非常有用。FILE 包含當前文件的絕對路徑和文件名(例如包含文件)。 “REQUEST_URI”     訪問此頁面所需的URI。例如,“/index.html”。 “PHP_AUTH_DIGEST”   當作為Apache 模塊運行時,進行HTTP Digest 認證的過程中,此變量被設置成客戶端發送的“Authorization”HTTP 頭內容(以便作進一步的認證操作)。 “PHP_AUTH_USER”    當PHP 運行在Apache 或IIS(PHP 5 是ISAPI)模塊方式下,並且正在使用HTTP 認證功能,這個變量便是用戶輸入的用戶名。 “PHP_AUTH_PW”     當PHP 運行在Apache 或IIS(PHP 5 是ISAPI)模塊方式下,並且正在使用HTTP 認證功能,這個變量便是用戶輸入的密碼。 HTTP_CLIENT_IP    取得用戶的IP代碼;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM