从stream_get_meta_data数组中获取标头状态代码

时间:2016-08-02 09:14:57

标签: php regex http stream http-headers

函数stream_get_meta_data以如下数组的形式返回标题:

Array
(
[timed_out] => 
[blocked] => 1
[eof] => 
[wrapper_data] => Array
    (
        [0] => HTTP/1.1 200 OK

我可以使用$meta['wrapper_data'][0]获取状态,但是我如何从HTTP/1.1 200 OK获取HTTP/1.1的值来获取状态代码?是使用正则表达式来获取代码的唯一方法吗?如果绝对是的话,正则表达式如何得到一个仅以1,2,3,4,5开头的3位数字?

2 个答案:

答案 0 :(得分:1)

使用explode()似乎是个好主意,因为标准的响应格式总是这样。

但你也可以用一个简单的正则表达式来提取它:

/[12345]\d\d/

答案 1 :(得分:0)

由于默认情况下HTTP包装器遵循重定向,并且会将多个HTTP响应附加到wrapper_data数组,因此您既需要更严格的正则表达式,也不会触发所有类型的标头,并且需要遍历所有行。并且我建议不要忽略以6-9开头的状态码,因为无法知道HTTP将来可能如何发展。试试这个:

$result = array();
foreach ($responsemeta['wrapper_data'] as $headerline) {
    if (preg_match('/^HTTP\/(\d+\.\d+)\s+(\d+)\s*(.+)?$/', $headerline, $result)) {
        $http_version = $result[1];
        $http_statuscode = $result[2];
        $http_statusstring = $result[3];
    }
}