php 中getall,PHP getallheaders无法获取自定义头(headers)的问题
客戶端請求會攜帶自定義請求頭
我是這樣子獲取的
$header_info=getallheaders();
一開始在本地使用這個方法(本地phpstudy集成環境),沒問題,但是當我把項目放到了自己的服務器上(lnmp環境)的時候就出現了,找不到該方法的問題。非常奇怪,查看php手冊發現getallheaders這個函數只支持apache服務器。于是找到兼容的方法:
if (!function_exists('getallheaders')) {
function getallheaders() {
$headers = array();
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) == 'HTTP_') {
$headers[str_replace(' ', '-',
ucwords(strtolower(str_replace('_', ' ',substr($name, 5)))))] = $value;
}
}
return $headers;
}
}
$header_info=getallheaders();
var_dump($header_info);
實際上這個方法就是找到$_SERVER變量中以HTTP_開頭的屬性,對屬性做一個字符串替換這樣。$_SERVER變量中的HTTP_USER_ID實際就是上面自定義的User-Id:
php中$_SERVER變量
關于自定義Http頭, 需要注意頭的命名規范,不能用下劃線命名 ,否則在nginx服務器下讀取不到,在查找命名規范的時候,有提到自定義屬性用X-開頭這個問題。后來查閱了一些資料,發現后來的http協議不建議這樣去做。
總結
以上是生活随笔為你收集整理的php 中getall,PHP getallheaders无法获取自定义头(headers)的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中ip授权系统,PHP授权验证系统
- 下一篇: php5.6.14,PHP 5.5.30