Как можно корректно обработать ошибку и продолжить выполнение?

14 янв. 2011 г., 22:25:25
Просмотры: 325
Голосов: 1

Мой плагин замораживает выполнение страницы в точке вызова указанных ниже функций.

У меня две проблемы...

1) Как можно переписать функцию так, чтобы при возникновении ошибки плагин не останавливал загрузку страницы, а возвращал сообщение об ошибке?

2) Как можно получить информацию о возможной ошибке? Сейчас выполнение просто замирает без вывода ошибки.

function rseo_get_seo($check, $post){
 //возвращаем false;
    switch ($check)
    {
    case "h1": return rseo_doTheParse('h1', $post);
    case "h2": return rseo_doTheParse('h2', $post);
    case "h3": return rseo_doTheParse('h3', $post);
    case "img-alt": return rseo_doTheParse('img-alt', $post);
    }
}

function rseo_doTheParse($heading, $post)
{
    $content = $post->post_content;
    if($content=="") return false;
    $keyword = trim(strtolower(rseo_getKeyword($post)));
    @$dom = new DOMDocument;
    @$dom->loadHTML(strtolower($post->post_content));
    $xPath = new DOMXPath(@$dom);
    switch ($heading)
        {
        case "img-alt": return $xPath->evaluate('boolean(//img[contains(@alt, "'.$keyword.'")])');
        default: return $xPath->evaluate('boolean(/html/body//'.$heading.'[contains(.,"'.$keyword.'")])');
        }
}

Вот моя попытка изменить вторую функцию с try catch, но я получаю фатальную ошибку при активации плагина...

function rseo_doTheParse($heading, $post){
try { //Я получаю FATAL ошибку здесь. unexpected '{'
    $content = $post->post_content;
    if($content=="") return false;
    $keyword = trim(strtolower(rseo_getKeyword($post)));
    @$dom = new DOMDocument;
    @$dom->loadHTML(strtolower($post->post_content));
    $xPath = new DOMXPath(@$dom);
    switch ($heading)
        {
        case "img-alt": return $xPath->evaluate('boolean(//img[contains(@alt, "'.$keyword.'")])');
        default: return $xPath->evaluate('boolean(/html/body//'.$heading.'[contains(.,"'.$keyword.'")])');
        }
    }
    catch (Exception $e)
    {
        echo 'Поймано исключение: ',  $e->getMessage(), "\n";
    }
}
2
Комментарии

попробуй убрать символ @ перед $dom

onetrickpony onetrickpony
14 янв. 2011 г. 23:20:57

Конструкция try/catch работает только в php 5+. Какая версия у тебя?

MathSmath MathSmath
15 янв. 2011 г. 00:54:39
Все ответы на вопрос 2
0

Для отладки вы также можете использовать следующий синтаксис вместо try/catch:

if (!$x) {
   throw new Exception('Деление на ноль.');
}
else return 1/$x;

или использовать старый добрый var_dump($x); который часто дает достаточно информации, чтобы продолжить работу.

28 янв. 2011 г. 15:15:50
0

Эта строка неправильная:

$xPath = new DOMXPath(@$dom);

Должно быть так:

$xPath = new DOMXPath($dom);
28 февр. 2011 г. 03:01:34