这段代码怎么打破PHP4?

时间:2011-01-14 21:16:42

标签: php

此代码是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.'")])');
        }
}

3 个答案:

答案 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()调用。