Получение ошибки

225
15 ноября 2017, 01:51

Какую конструкцию мне необходимо реализовать, если я вызываю

file_get_contents($target)

где target - url страницы, а сервер присылает ошибку 404. Мне при условии появления ошибки 404 по этому адресу необходимо выполнить

file_get_contents($target)

для другого адреса через if/else.

Answer 1

Официальная документация говорит, что функция 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);
Answer 2

Функция 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);
}
READ ALSO
Как защитить CRON скрипты

Как защитить CRON скрипты

Ребята нужно сделать что бы только CronJob мог использовать файлы в папке CRON, больше никто, как осуществить?

178
Переопределение имени глобальной переменной

Переопределение имени глобальной переменной

Почему оно работает? Слышал об предварительном объявлении, но это явно другой случайИли в чистом виде UB?

226
Управление процессами C++ Linux

Управление процессами C++ Linux

Пытаюсь написать программу ,которая управляет некоторым количеством процессов и следит за ними,а конкретно,если убиваем процесс,то возобновляем...

279