2011-01-14 4 views
2

이 코드는 워드 프레스 플러그인의 일부입니다. 페이지는 두 번째 기능의 어딘가에서 깨지고 그 지점에서 페이지 출력을 중단합니다.이 코드는 PHP4를 어떻게 나눕니까?

나는이 문제가 PHP4라고 판단했다. PHP4에서 지원하지 않는다면 DOMDocument 호출을 추측하고 있습니다.

그렇다면 호환성을 테스트하고 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

함수 호출 앞에있는'@'을 제거하고 오류보고를 활성화하여 오류를 확인하십시오. –

+1

잠깐, 나는'case'가 항상'break'를 필요로한다고 생각했다. 그렇지 않으면 적절한'case' 아래의 모든 경우를 실행할 것이다. – Ben

+1

호스트가 PHP 4에서 PHP 5로 전환 할 수있는 옵션을 제공합니까? – BoltClock

답변

0

DOMDocument 클래스가 포함 된 버전 4.4.9이므로 안정적인 테스트가 아니 었습니다. DOMDocument를 완전히 지원하지는 못하지만 if (class_exists ('DOMDocument')) 테스트를 통과합니다.

if(class_exists('DOMDocument')) returns true! 

이 경우에 더 나은 테스트,

If(PHP_VERSION < 5) {return false;} else {//proceed} 

그래서, 나는 여전히 아마 그것 loadXML() 호출 PHP 4.4.9에서 깨고 무엇 확실하지 않다 것으로 보인다.

1

error_reporting()을 켜면 문제의 원인을 진단하는 데 도움이됩니다.

if (class_exists("DOMDocument")) { 
1

DOMDocument 클래스는 PHP5 만 할 수 있습니다 : DOM 기능이 영향을받는 코드 부분을 래핑하는 다음 사용 가능한 상태 인 경우

테스트합니다.

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)

+0

사실 나는 이것이 PHP4 인 것을 알고 있습니다. 그러나이 코드는 수표가있는 경우에도 여전히 손상되고 있습니다. 그 함수의 최상위에 false를 반환하면, –

+0

DOMDocument 클래스를 지원하는 버전 4.4.9가 깨지지 않고 진행되므로 신뢰할 수있는 테스트가 아니 었습니다. if (PHP_VERSION <5)가 훨씬 좋습니다. 나는 4.4.9가 DOMDocument를 진정으로 지원한다면 왜 깨지는 지 아직도 알지 못한다. 그러나 그 수업은 분명히 거기에있다. –

+0

@Scott B 잘못된 것입니다. PHP 매뉴얼에서 직접 : "DOM 확장을 사용하면 PHP 5를 사용하여 DOM API를 통해 XML 문서를 조작 할 수 있습니다. PHP 4의 경우 DOM XML을 사용하십시오." http://us3.php.net/manual/en/intro.dom.php –

관련 문제