php 中getall,PHP getallheaders无法获取自定义头(headers)的问题
客戶端請(qǐng)求會(huì)攜帶自定義請(qǐng)求頭
我是這樣子獲取的
$header_info=getallheaders();
一開始在本地使用這個(gè)方法(本地phpstudy集成環(huán)境),沒問題,但是當(dāng)我把項(xiàng)目放到了自己的服務(wù)器上(lnmp環(huán)境)的時(shí)候就出現(xiàn)了,找不到該方法的問題。非常奇怪,查看php手冊(cè)發(fā)現(xiàn)getallheaders這個(gè)函數(shù)只支持apache服務(wù)器。于是找到兼容的方法:
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);
實(shí)際上這個(gè)方法就是找到$_SERVER變量中以HTTP_開頭的屬性,對(duì)屬性做一個(gè)字符串替換這樣。$_SERVER變量中的HTTP_USER_ID實(shí)際就是上面自定義的User-Id:
php中$_SERVER變量
關(guān)于自定義Http頭, 需要注意頭的命名規(guī)范,不能用下劃線命名 ,否則在nginx服務(wù)器下讀取不到,在查找命名規(guī)范的時(shí)候,有提到自定義屬性用X-開頭這個(gè)問題。后來查閱了一些資料,發(fā)現(xiàn)后來的http協(xié)議不建議這樣去做。
總結(jié)
以上是生活随笔為你收集整理的php 中getall,PHP getallheaders无法获取自定义头(headers)的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中ip授权系统,PHP授权验证系统
- 下一篇: php5.6.14,PHP 5.5.30