函数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位数字?
答案 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];
}
}