函数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
爆炸是个坏主意?使用regexp获取代码的唯一方法是什么?如果绝对是,regexp如何获得仅以1,2,3,4,5开头的3位数字?
使用explode()
似乎是个好主意,因为标准情况下响应的格式总是这样。
但是您也可以使用一个简单的正则表达式来提取:
/[12345]dd/
由于HTTP包装器默认遵循重定向,并且会将多个HTTP响应附加到wrapper_data数组中,所以您都需要一个更严格的regexp,它不会在所有类型的头上触发,并遍历所有行。我建议不要忽略从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];
}
}