Какую конструкцию мне необходимо реализовать, если я вызываю
file_get_contents($target)
где target - url страницы, а сервер присылает ошибку 404. Мне при условии появления ошибки 404 по этому адресу необходимо выполнить
file_get_contents($target)
для другого адреса через if/else.
Официальная документация говорит, что функция file_get_contents
Функция возвращает прочтенные данные или FALSE в случае возникновения ошибки.
Код ошибки можно узнать проанализировав массив $http_response_header после вызова функции. Этот массив содержит все заголовки, пришедшие от сервера
Таким образом код у Вас должен быть таким
function getResponseCode($headers) {
.....
}
$content = file_get_contents($target1);
if (
$content === false && // === вместо ==, чтобы отличить '' от false
getResponseCode($http_response_header) === 404
)
$content = file_get_contents($target2);
Функция get_headers() возвращает массив, в первом элементе которого содержится код ответа сервера. Я написал пример получения этого кода и последующих действий, в зависимости от полученного кода:
// Первая ссылка
$target = 'http://www.example.com';
// Если ошибка, перезаписать ссылку в $target
get_status($target) ?: $target = 'http://вторая ссылка';
// Получить контент
$content = file_get_contents($target);
var_dump($content);
function get_status($url) {
preg_match('~\d{3}~', get_headers($url)[0], $http);
return ($http[0] < 400);
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей