В итоге я использовал функцию stream_get_meta_data () для получения заголовков HTTP.
Вот как я это реализовал:
function get_headers_with_stream_context($url, $context, $assoc = 0) {
$fp = fopen($url, 'r', null, $context);
$metaData = stream_get_meta_data($fp);
fclose($fp);
$headerLines = $metaData['wrapper_data'];
if(!$assoc) return $headerLines;
$headers = array();
foreach($headerLines as $line) {
if(strpos($line, 'HTTP') === 0) {
$headers[0] = $line;
continue;
}
list($key, $value) = explode(': ', $line);
$headers[$key] = $value;
}
return $headers;
}
Называется вот так,
$context = stream_context_create(array('http' => array('method' => 'HEAD')));
$headers = get_headers_with_stream_context($url, $context, 1);
он дает вам то, что вам нужно, оставляя стандартный stream_context без изменений.
Обратите внимание, что эта функция не будет работать, если передано что-либо, кроме URL-адреса http.
Похоже, запрос функции для дополнительного аргумента для get_headers (), но средство отслеживания ошибок не работает, когда я пишу это, поэтому я не могу проверить другие решения там.