it-swarm.com.de

Wie kann ich einer Fehlerbedingung ordnungsgemäß entkommen?

Mein Plugin friert die Ausführung der Seite an der Stelle ein, an der es die folgenden Funktionen aufruft.

Ich habe zwei Probleme ...

1) Wie kann ich die Funktion neu codieren, damit das Plugin im Fehlerfall die Seite nicht anhält, sondern eine Fehlermeldung zurückgibt?

2) Wie kann ich Rückmeldung geben, was der Fehler sein könnte? Es friert nur ein, gibt aber den Fehler nicht aus.

function rseo_get_seo($check, $post){
 //return 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.'")])');
        }
}

Hier ist mein Versuch, die 2. Funktion mit try catch zu ändern, aber beim Aktivieren des Plugins wird ein schwerwiegender Fehler angezeigt ...

function rseo_doTheParse($heading, $post){
try { //I get a FATAL error here. 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 'Exception caught: ',  $e->getMessage(), "\n";
    }
}
1
Scott B

Diese Zeile ist falsch:

$xPath = new DOMXPath(@$dom);

Sollte das sein:

$xPath = new DOMXPath($dom);
1
Otto

Zum Debuggen können Sie anstelle von try/catch auch die folgende Syntax verwenden:

if (!$x) {
   throw new Exception('Division by zero.');
}
else return 1/$x;

oder benutze den guten alten var_dump ($ x); das sagt dir oft genug, um dich wieder zum Laufen zu bringen.

1
blago