PHP 的 $_SERVER詳解

導語

$_SERVER 是PHP預約義的超全局變量。所謂「超全局變量」,即在腳本所有做用域中均可以使用,$_SERVER保存關於報頭、路徑和腳本位置的信息。工做中常常忘記,在此整理記錄下,加深印象。測試是在Windows下進行的,環境爲Apache/2.4.23 (Win32)+PHP/5.6.27-nts,訪問域名爲http://www.example.com/index....,文件目錄在E:/WWW/example/php

主要內容詳解

  • $_SERVER["SCRIPT_NAME"] => "/index.php",當前腳本路徑
  • $_SERVER["REQUEST_URI"] => "/index.php?id=1",訪問的頁面URI,包含查詢字符串
  • $_SERVER["QUERY_STRING"] => "id=1",查詢字符串,不存在爲" "
  • $_SERVER["REQUEST_METHOD"] => "GET",請求方法,如"POST"、"PUT"等
  • $_SERVER["SERVER_PROTOCOL"] => "HTTP/1.1",通訊協議的名稱和版本
  • $_SERVER["GATEWAY_INTERFACE"] => "CGI/1.1",服務器使用的CGI 規範的版本
  • $_SERVER["REMOTE_PORT"] => "60599",用戶鏈接服務器使用的端口
  • $_SERVER["SCRIPT_FILENAME"] => "E:/WWW/example/index.php",當前腳本的絕對路徑
  • $_SERVER["DOCUMENT_ROOT"] => "E:/WWW/example/",當前腳本文檔根目錄的絕對路徑
  • $_SERVER["REMOTE_ADDR"] => "127.0.0.1",用戶的IP地址
  • $_SERVER["SERVER_PORT"] => "80",服務器使用的端口
  • $_SERVER["SERVER_ADDR"] => "127.0.0.1",服務器的IP地址
  • $_SERVER["SERVER_NAME"] => "www.example.com",服務器的主機名,注:若是腳本運行於虛擬主機中,該名稱是由那個虛擬主機所設置的值決定。在 Apache 2 裏,必須設置 UseCanonicalName = On 和 ServerName。 不然該值會由客戶端提供,就有可能被僞造。 上下文有安全性要求的環境裏,不該該依賴此值。
  • $_SERVER["SERVER_SOFTWARE"] => "Apache/2.4.23 (Win32) OpenSSL/1.0.2j mod_fcgid/2.3.9",響應頭中Server的內容
  • $_SERVER["SERVER_SIGNATURE"] => "",包含了服務器版本和虛擬主機名的字符串
  • $_SERVER["HTTP_HOST"] => "www.example.com",請求頭中Host項的內容
  • $_SERVER["HTTP_CONNECTION"] => "keep-alive",請求頭中Connection項的內容
  • $_SERVER["HTTP_PRAGMA"] => "no-cache",請求頭中Pragma項的內容
  • $_SERVER["HTTP_CACHE_CONTROL"] => "no-cache",請求頭中Cache-Control項的內容
  • $_SERVER["HTTP_UPGRADE_INSECURE_REQUESTS"] => "1",請求頭中Upgrade-Insecure-Requests項的內容
  • $_SERVER["HTTP_USER_AGENT"] => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36",請求頭中User-Agent項的內容
  • $_SERVER["HTTP_ACCEPT"] => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8",請求頭中Accept項的內容
  • $_SERVER["HTTP_ACCEPT_ENCODING"] => "gzip, deflate",請求頭中Accept-Encoding項的內容
  • $_SERVER["HTTP_ACCEPT_LANGUAGE"] => "zh-CN,zh;q=0.8",請求頭中Accept-Language項的內容
  • $_SERVER["PHP_SELF"] => "/index.php",當前執行腳本的文件名
  • $_SERVER["REQUEST_TIME_FLOAT"] => 1510112348.8084,請求開始的時間戳,微秒級別精準度
  • $_SERVER["REQUEST_TIME"] => 1510112348,請求開始的時間戳

實例

以上是測試中的 $_SERVER 的主要內容,根據不一樣的環境配置,會有些變化。在實際工做中,$_SERVER有不少做用,這裏只舉兩個簡單實例,獲取當前請求URL以及簡單防盜鏈html

<?php
// $_SERVER['HTTPS']當前是否爲HTTPS協議
if (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
    $url = 'https://';
} else {
    $url = 'http://';
}

if ($_SERVER['SERVER_PORT'] == 80) {
    $url .= $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
} else {
    $url .= $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['SERVER_PORT'];
}
<?php
// $_SERVER['HTTP_REFERER'],前一頁面的url
if (!empty($_SERVER['HTTP_REFERER'])) {
    if (!strpos($_SERVER['HTTP_REFERER'], 'www.example.com')) {
        header('Location: http://www.example.com');
    }
}

參考資料:PHP手冊HTTP消息頭web

相關文章
相關標籤/搜索