Как создать обработчик ошибок в php, который перенаправляет пользователя, если возникает конкретная ошибка? - PullRequest
0 голосов
/ 11 декабря 2018

Я запускаю какой-то общий код php / mysql, который постоянно работает нормально, затем я запускаю html dom parser (http://simplehtmldom.sourceforge.net/),, затем я ХОЧУ перенаправить на страницу ошибки ЕСЛИ И ТОЛЬКО ЕСЛИ сdom-парсер, но если нет, продолжите с дополнительным скриптом php / mysql, который также в настоящее время работает нормально. Вот как выглядит мой код:

//First do some php/mysql operations here - these are all working fine

$html = file_get_html($website);

foreach($html->find('a[href!=#]') as $element) {
    Do several things here
}

//Then finish up with some additional php/mysql operations here - these are all working fine

В большинстве случаев он работает отлично, но оВ 10% случаев, в зависимости от веб-сайта, который назначен переменной $ website, я получаю предупреждение, а затем фатальную ошибку. Например, когда я помещаю «https://www.liftedlandscape.com/” в переменную $ website:

Предупреждение: file_get_contents (https://www.liftedlandscape.com/): не удалось открыть поток: сбой HTTP-запроса! HTTP / 1.0 400 Неправильный запрос в /home/test/test.test.com/simple_html_dom.php в строке 75

Неустранимая ошибка: вызов функции-члена find () для логического значения в /home/test/test.com/login/create_application.php в строке 148

Я в порядке сошибка происходит каждый раз иотя;Я просто хочу создать обработчик ошибок, который соответствующим образом реагирует на случаи ошибок.Я хочу убедиться, что код php / mysql перед парсером dom всегда запускается.Затем запустите анализатор dom, затем запустите оставшуюся часть сценария, если функции синтаксического анализатора dom работают правильно, но если есть ошибки, описанные выше с анализатором dom, перенаправьте пользователей на страницу с ошибкой.

У меня естьпробовал многочисленные итерации безуспешно.Вот моя последняя попытка:

function errorHandler($errno, $errstr) {
  echo "Error: [$errno] $errstr";
  header('Location: 
https://test.com/login/display/error_message.php');

}

//First do some other php/mysql operations here 

$html = file_get_html($website);

foreach($html->find('a[href!=#]') as $element) {
    Do several things here
}

//Then finish up with some additional php/mysql operations here

Клянусь, это действительно сработало один раз, но потом не сработало.Он только возвращает те же ошибки, перечисленные выше, без перенаправления пользователя.Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 11 декабря 2018

Не отправляйте вывод через "эхо" или подобное, потому что вы не можете перенаправить ПОСЛЕ того, как вы уже начали отправлять страницу.

file_get_contents вернет false, когда не сможет завершить запрос, поэтому убедитесь, что вы проверили это, прежде чем пытаться использовать возвращаемую переменную и предполагаете, что у вас действительно есть html для работы.

ДополнительноВы должны выйти после перенаправления, чтобы предотвратить обработку остальной части кода.

$html = file_get_html($website);
if($html === false) {
  header('Location: https://test.com/login/display/error_message.php');
  exit;
}

// You can now work with $html string from here onwards.
...