php 獲取head參數
在PHP中,獲取HTTP頭部(head
)參數可以通過不同的方式實現,下面為你詳細介紹幾種常見的方法。
1. 使用$_SERVER
超全局變量
$_SERVER
是PHP中的一個超全局變量,它包含了諸如頭信息、路徑、腳本位置等信息。許多HTTP頭部信息可以通過特定的 $_SERVER
鍵來獲取。通常,HTTP頭部信息會被轉換為 HTTP_
前綴加上頭部名稱,并且將頭部名稱中的 -
替換為 _
,同時全部轉換為大寫。
以下是一個示例代碼:
<?php
// 獲取特定的HTTP頭部信息
if (isset($_SERVER['HTTP_USER_AGENT'])) {$userAgent = $_SERVER['HTTP_USER_AGENT'];echo "User Agent: ". $userAgent. "<br>";
}if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {$acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE'];echo "Accept Language: ". $acceptLanguage. "<br>";
}// 遍歷所有HTTP頭部信息
foreach ($_SERVER as $key => $value) {if (strpos($key, 'HTTP_') === 0) {$headerName = str_replace('HTTP_', '', $key);$headerName = str_replace('_', '-', $headerName);$headerName = strtolower($headerName);echo $headerName. ": ". $value. "<br>";}
}
?>
代碼解釋:
- 首先,通過檢查
$_SERVER
數組中是否存在特定的鍵(如HTTP_USER_AGENT
和HTTP_ACCEPT_LANGUAGE
)來獲取對應的頭部信息。 - 然后,使用
foreach
循環遍歷$_SERVER
數組,篩選出以HTTP_
開頭的鍵,將其轉換為標準的頭部名稱格式并輸出。
2. 使用 getallheaders()
函數
getallheaders()
函數可以直接返回當前請求的所有HTTP頭部信息,返回值是一個關聯數組,數組的鍵是頭部名稱,值是對應的頭部值。
以下是示例代碼:
<?php
$headers = getallheaders();
if ($headers) {foreach ($headers as $name => $value) {echo $name. ": ". $value. "<br>";}
}
?>
代碼解釋:
- 調用
getallheaders()
函數獲取所有HTTP頭部信息,并將結果存儲在$headers
數組中。 - 使用
foreach
循環遍歷$headers
數組,輸出每個頭部的名稱和值。
注意事項:
getallheaders()
函數在某些服務器環境(如FastCGI)中可能不可用。在這種情況下,你可以使用$_SERVER
數組來獲取頭部信息。- 對于自定義的HTTP頭部,同樣可以使用上述方法獲取。例如,自定義頭部
X-Custom-Header
可以通過$_SERVER['HTTP_X_CUSTOM_HEADER']
或在getallheaders()
返回的數組中直接訪問。
補充
為什么無法獲取 Authorization 頭?
原因?:Apache 默認會過濾 Authorization 頭
修復?:在 .htaccess 中添加:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
頭名稱轉換規則:
$SERVER 中自定義頭會被轉換為 HTTP 前綴 + 大寫(如 X-Token → HTTP_X_TOKEN)
自動轉為大寫格式(如user-agent會變成HTTP_USER_AGENT)
連字符-會被轉換為下劃線_
?安全性?:
始終驗證頭部來源(如 X-Forwarded-For 可能被偽造)
?性能優化?:
避免在循環中頻繁調用 apache_request_headers()