Как получить значение последнего эффективного адреса, после вызова PHP функции file_get_contents()?

301

Бывают такие ситуации, когда программисту необходимо узнать значение последнего 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).

Пользуйтесь.

Liked Liked
No Comments