在講header之前, 先來一個小插曲, 講講我是何時開始注意到header的:
最早的當(dāng)然是設(shè)置字符集了,
header("Content-type: text/html; charset=utf-8")
, 不過, 很遺憾, 此header非彼header, 而是現(xiàn)在火熱的Restful Api
帶來的信息傳遞頭, 什么, 還有header傳遞信息, 雖然早有耳聞, 可是, 我一直使用的是傳統(tǒng)web
的 大GET & POST
, 可是, 由于項目的推進, 不得不接觸這些東西了, 于是乎, 我goobaidugle
了一番, 發(fā)現(xiàn), 這東西還挺有意思的, 于是乎, 就開始了我的header
之旅
原來傳遞方式不僅僅是 GET & POST
快速求救谷度娘歌
, 發(fā)現(xiàn)了傳遞陣營的另外一些小伙伴 PUT
, POST
, DELETE
, UPDATE
......(具體請自行腦補, 不在今天的討論主體中)
遺憾的發(fā)現(xiàn)這些請求方式, 我們不能用傳統(tǒng)的 $_
方式獲取了, 而是有了下邊這個變量, 存儲著傳遞的頭信息:
$http_response_header
沒錯, 他看上去像個普通的變量, 實則, 一點都不普通, 他的作用非常的大, 比如:
<?php
file_get_contents('https://www.baidu.com');
print_r($http_response_header);
# 輸出結(jié)果
Array(
[0] => 'Content: text info',
[1] => 'Code: 200',
[2] => 'Error-Message: text invalid'
...... // 更多結(jié)果
);
經(jīng)過這么的處理, 我們所要獲取的信息, 都在這個結(jié)果中了, 于是乎, 要來愜意的獲取我們想要的信息了, 然后處理數(shù)據(jù), 完事 ~~~
可是, 可是, 可是......
這樣真的就完事了么???
我們怎么拿到這個Code: 200
?
用 $http_response_header[1]
么?
這樣真的合理么?
(預(yù)知是否合理, 切看下邊分解)
$http_response_header 超神處理
這名字雖然叫的離譜, 但是, 卻不例題, 因為處理方式確實對得起這個名字!!!
正如上邊的疑問, 這樣處理顯然有不合理之處, 因為, 我換一個鏈接, 他的返回有事不同的, 這可讓我頭疼了, 他的索引前綴不固定, 讓我這強迫癥可如何是好, 于是乎, 有了一個超神解決方案, 相信聰明的童鞋已經(jīng)知道了, 那就是:
分解值到對應(yīng)的數(shù)組鍵值對
這個名字, 看上去怪怪的, 但是他實在啊, 想知道有多實在, 請看詳情:
<?php
function parseHeaders( $headers )
{
$head = array();
foreach( $headers as $k=>$v )
{
$t = explode( ':', $v, 2 );
if( isset( $t[1] ) )
$head[ trim($t[0]) ] = trim( $t[1] );
else
{
$head[] = $v;
if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) )
$head['reponse_code'] = intval($out[1]);
}
}
return $head;
}
啥, 我褲Z都脫了, 你就給我看個函數(shù) (-_-)....
我只想說, 別急, 且看我把他分解了來看看, 就跟看美女似的, 如果衣服一件件滑落, 是不是更好看, 咳咳, 扯遠(yuǎn)了......
這個函數(shù), 能夠把 $http_response_header
里邊的值, 拆分成如下樣子:
<?php
print_r( parseHeaders( $http_response_header ) );
Array(
['Content'] => 'Content',
['Code'] => 200,
['Error-Message'] => 'text invalid'
... // more param, (秀下英文)更多的參數(shù)
);
這個樣子, 夠風(fēng)騷
吧, 沒錯, 鍵值對唯一確認(rèn)...
這下好了, 終于可以愜意的為所欲為
了, 咳咳, 我是指, 可以隨心所欲的拿到我們想要拿到的參數(shù)了......
要拿到這個Code: 200
:
just do like this :
$respons = parseHeaders( $http_response_header );
echo $respons['Code'];
完美收工~~~