此代码是wordpress插件的一部分。页面在第二个函数中的某处断开,并在此时停止页面的输出。
我已经确定问题是PHP4的可能性。所以我猜它的DOMDocument调用,如果PHP4不支持。
如果是这样,我如何测试兼容性并优雅地退出而不使用try / catch并且不冻结页面?
function rseo_get_seo($check, $post){
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){
//code breaks somewhere in here and freezes output of page. How can I error check this without try/catch?
$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.'")])');
}
}
答案 0 :(得分:1)
启用error_reporting()将有助于诊断问题的原因。
要测试DOM函数是否可用,请使用以下命令包装受影响的代码部分:
if (class_exists("DOMDocument")) {
答案 1 :(得分:0)
DOMDocument
类仅适用于PHP5。您可以通过执行以下操作来测试您是否可以使用该类:
if(class_exists('DOMDocument')) {
//DOMDocument exists, run DOM code (PHP5)
} else {
//DOMDocument doesn't exists, do alternative code (PHP4)
}
另外,请查看DOM XML(PHP4),了解编写备用代码的方法。以下是手册的链接:PHP: DOM XML (PHP 4)
答案 2 :(得分:0)
它的版本4.4.9,显然包含DOMDocument类,因此这不是一个可靠的测试。它可能不完全支持DOMDocument,但它仍然传递了if(class_exists('DOMDocument'))测试。
if(class_exists('DOMDocument')) returns true!
在这种情况下,更好的测试似乎是
If(PHP_VERSION < 5) {return false;} else {//proceed}
所以,我仍然不确定PHP 4.4.9中的内容是什么,也许是它的loadXML()调用。