Comment puis-je échapper gracieusement une condition d'erreur?
-
16-10-2019 - |
Question
Mon plug-in est le gel de l'exécution de la page au point où il appelle les fonctions ci-dessous.
J'ai deux problèmes ...
1) Comment puis-je recoder la fonction de sorte que s'il y a une erreur, le plug-in ne s'arrête pas la page de chargement, mais plutôt, renvoie un message d'erreur?
2) Comment puis-je des commentaires que l'erreur pourrait être? Son gel juste, mais pas sortir l'erreur.
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.'")])');
}
}
Voici ma tentative de changer la 2ème fonction avec prise d'essai, mais je reçois une erreur fatale sur un plugin activation ...
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";
}
}
La solution
Cette ligne est erroné:
$xPath = new DOMXPath(@$dom);
Devrait être ceci:
$xPath = new DOMXPath($dom);
Autres conseils
Pour le débogage vous pouvez également utiliser la syntaxe suivante au lieu de try / catch:
if (!$x) {
throw new Exception('Division by zero.');
}
else return 1/$x;
ou utilisez le bon vieux var_dump ($ x); qui vous dit souvent assez pour vous y aller à nouveau.