Как получить значение последнего эффективного адреса, после вызова PHP функции file_get_contents()?
Бывают такие ситуации, когда программисту необходимо узнать значение последнего URL адреса, с которого ваш скрипт загрузил какой-то файл, находящийся на удаленном сервере, после одного или нескольких редикретов.
Если вы получаете файл с использованием функций cURL, то проблем не возникает, и значение последнего эффективного адреса после череды директоров можно получить с помощью функции curl_getinfo(). Например, так:
$last_effective_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
Но как же быть, в случае использования функции file_get_contents()? Ответ, на самом деле, не столь очевиден, как кажется. В PHP предусмотрена встроенная переменная $http_response_header, которая, аналогично результату вызова функции get_headers(), содержит HTTP хэйдеры серверного ответа, в виде обычного строкового массива.
Именно эту переменную я и использую для получения последнего эффективного адреса после редиректов, таким вот нехитрым способом:
// получаем контент файла, находящемуся по адресу, заданному в переменной $url $content = file_get_contents($url); // проходимся по массиву $http_response_header в поисках последнего адреса редиректа foreach ($http_response_header as $line) { if (preg_match('/^Location: (.*?)$/i', $line, $matches)) { $last_effective_url = $matches[1]; } }
После выполнения вышеприведенного кода, переменная $last_effective_url
будет содержать тот самый последний эффективный URL адрес, который, в случае использования cURL, можно получить с помощью вызова функции curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)
.
Пользуйтесь.