通過(guò)以下代碼示例斯撮,我們可以知道台妆,PHP如何獲得請(qǐng)求的URL及請(qǐng)求的頭部,body等具體信息拘荡;
/**
* 獲取HTTP請(qǐng)求原文
* @return string
*/
function get_http_raw() {
$raw = '';
// (1) 請(qǐng)求行
$raw .= $_SERVER['REQUEST_METHOD'].' '.$_SERVER['REQUEST_URI'].' '.$_SERVER['SERVER_PROTOCOL']."\r\n";
// (2) 請(qǐng)求Headers
foreach($_SERVER as $key => $value) {
if(substr($key, 0, 5) === 'HTTP_') {
$key = substr($key, 5);
$key = str_replace('_', '-', $key);
$raw .= $key.': '.$value."\r\n";
}
}
// (3) 空行
$raw .= "\r\n";
// (4) 請(qǐng)求Body
$raw .= file_get_contents('php://input');
return $raw;
}
".=" 相當(dāng)于"+="
通過(guò)超級(jí)變量我們可以獲得請(qǐng)求的表單提交方式:
$_SERVER['REQUEST_METHOD'] 該變量中存儲(chǔ)的是表單提交的方式
通過(guò)該方法可以判斷瀏覽器端請(qǐng)求的操作方式臼节,是post還是get,用于程序的判斷。
同樣,PHP編程中經(jīng)常需要用到一些服務(wù)器的一些信息:
$_SERVER['PHP_SELF'] #當(dāng)前正在執(zhí)行腳本的文件名网缝,與 document root相關(guān)巨税。
$_SERVER['argv'] #傳遞給該腳本的參數(shù)。
$_SERVER['argc'] #包含傳遞給程序的命令行參數(shù)的個(gè)數(shù)(如果運(yùn)行在命令行模式)粉臊。
$_SERVER['GATEWAY_INTERFACE'] #服務(wù)器使用的 CGI 規(guī)范的版本草添。例如,“CGI/1.1”扼仲。
$_SERVER['SERVER_NAME'] #當(dāng)前運(yùn)行腳本所在服務(wù)器主機(jī)的名稱远寸。
$_SERVER['SERVER_SOFTWARE'] #服務(wù)器標(biāo)識(shí)的字串,在響應(yīng)請(qǐng)求時(shí)的頭部中給出屠凶。
$_SERVER['SERVER_PROTOCOL'] #請(qǐng)求頁(yè)面時(shí)通信協(xié)議的名稱和版本驰后。例如,“HTTP/1.0”阅畴。
$_SERVER['REQUEST_METHOD'] #訪問(wèn)頁(yè)面時(shí)的請(qǐng)求方法倡怎。例如:“GET”、“HEAD”贱枣,“POST”监署,“PUT”。
$_SERVER['QUERY_STRING'] #查詢(query)的字符串纽哥。
$_SERVER['DOCUMENT_ROOT'] #當(dāng)前運(yùn)行腳本所在的文檔根目錄钠乏。在服務(wù)器配置文件中定義。
$_SERVER['HTTP_ACCEPT'] #當(dāng)前請(qǐng)求的 Accept: 頭部的內(nèi)容春塌。
$_SERVER['HTTP_ACCEPT_CHARSET'] #當(dāng)前請(qǐng)求的 Accept-Charset: 頭部的內(nèi)容晓避。例如:“iso-8859-1,*,utf-8”。
$_SERVER['HTTP_ACCEPT_ENCODING'] #當(dāng)前請(qǐng)求的 Accept-Encoding: 頭部的內(nèi)容只壳。例如:“gzip”俏拱。
$_SERVER['HTTP_ACCEPT_LANGUAGE']#當(dāng)前請(qǐng)求的 Accept-Language: 頭部的內(nèi)容。例如:“en”吼句。
$_SERVER['HTTP_CONNECTION'] #當(dāng)前請(qǐng)求的 Connection: 頭部的內(nèi)容锅必。例如:“Keep-Alive”。
$_SERVER['HTTP_HOST'] #當(dāng)前請(qǐng)求的 Host: 頭部的內(nèi)容惕艳。
$_SERVER['HTTP_REFERER'] #鏈接到當(dāng)前頁(yè)面的前一頁(yè)面的 URL 地址搞隐。
$_SERVER['HTTP_USER_AGENT'] #當(dāng)前請(qǐng)求的 User_Agent: 頭部的內(nèi)容。
$_SERVER['HTTPS'] # 如果通過(guò)https訪問(wèn),則被設(shè)為一個(gè)非空的值(on)远搪,否則返回off
$_SERVER['REMOTE_ADDR'] #正在瀏覽當(dāng)前頁(yè)面用戶的 IP 地址劣纲。
$_SERVER['REMOTE_HOST'] #正在瀏覽當(dāng)前頁(yè)面用戶的主機(jī)名。
$_SERVER['REMOTE_PORT'] #用戶連接到服務(wù)器時(shí)所使用的端口谁鳍。
$_SERVER['SCRIPT_FILENAME'] #當(dāng)前執(zhí)行腳本的絕對(duì)路徑名癞季。
$_SERVER['SERVER_ADMIN'] #管理員信息
$_SERVER['SERVER_PORT'] #服務(wù)器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服務(wù)器版本和虛擬主機(jī)名的字符串劫瞳。
$_SERVER['PATH_TRANSLATED'] #當(dāng)前腳本所在文件系統(tǒng)(不是文檔根目錄)的基本路徑。
$_SERVER['SCRIPT_NAME'] #包含當(dāng)前腳本的路徑绷柒。這在頁(yè)面需要指向自己時(shí)非常有用柠新。
$_SERVER['REQUEST_URI'] #訪問(wèn)此頁(yè)面所需的 URI。例如辉巡,“/index.html”。
$_SERVER['PHP_AUTH_USER'] #當(dāng) PHP 運(yùn)行在 Apache 模塊方式下蕊退,并且正在使用 HTTP 認(rèn)證功能郊楣,這個(gè)變量便是用戶輸入的用戶名。
$_SERVER['PHP_AUTH_PW'] #當(dāng) PHP 運(yùn)行在 Apache 模塊方式下瓤荔,并且正在使用 HTTP 認(rèn)證功能净蚤,這個(gè)變量便是用戶輸入的密碼。
$_SERVER['AUTH_TYPE'] #當(dāng) PHP 運(yùn)行在 Apache 模塊方式下输硝,并且正在使用 HTTP 認(rèn)證功能今瀑,這個(gè)變量便是認(rèn)證的類型。