2014-10-13 1 views
0

: 내 개발 시스템에서왜 php DOM이 요소를 기계간에 다르게 처리합니까? 이 코드

<?php 
    $s = '<h1>Header</h1>'; 
    $dom = new DOMDocument(); 
    $dom->loadHTML($s, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 
    var_dump($dom->documentElement->childNodes->item(0)); 
?> 

var_dumpDOMText 객체를 내뿜으며, 아직 내 생산 기계에는 DOMElement 객체를 반환합니다. 가 DOMDocument::loadHTML 방법은 이후 두 번째 ($options) 인수를 승인 : 아마 다른 PHP 버전과 함께 할 수있는 뭔가있어

생산 서버가 libxml 2.7.8

데브 기계와 php 5.4.33를 실행은 libxml 2.8.0

+0

두 시스템에 동일한 버전의 libxml 및 php가 설치되어 있습니까? –

+0

아니요, 질문에 버전을 추가하겠습니다. 죄송합니다 – danbroooks

답변

1

php 5.4.4를 실행 PHP 5.4, the changelog에 표시 :

5.4.0 DOMDocument : : loadHTML 옵션 매개 변수를 추가했습니다.
DOMDocument :: loadHTMLFile 추가 된 옵션 매개 변수입니다.

변경은

on the DOMDocument::loadHTML doc pages 나열되어 업데이트 : 일부 파고 후, 나는 LIBXML_HTML_NODEFDTD 일정에 관한 모순 된 정보를 많이 발견

. 문서에 따르면,> libxml 2.7.7에서 사용할 수 있지만, 다른 소스는 이와 모순됩니다. 이 상수를 수동으로 정의하는 일부 프로젝트를 발견했으며이 상수는 인 libxml 2.7.8에서만 사용 가능하다는 내용의 an answer here을 발견했습니다.
두 환경의 차이점을 설명 할 수 있습니다. An open-source project on github은 필요한 경우 상수를 정의하여이 문제를 해결합니다.

defined('LIBXML_HTML_NODEFDTD') || define ('LIBXML_HTML_NODEFDTD', 4); 
+0

- 내 서버에, saveHTML로() 당신은하지만 정확 두 시스템은 PHP 5.4 – danbroooks

+0

을 실행하고, 내 질문에 버전을 추가 그것은 분명히 옵션 인수를 무시하므로,'

헤더

'을 뱉어. .. – danbroooks

+0

@danbroooks : 두 가지 버그 보고서와 libxml changelogs를 살펴 보겠습니다. 당신이 만나는 것처럼 보이는 행동과 비슷한 행동을하는 사람들이 있습니다 ... xpaths를 사용하는 것이 일반적인 해결 방법입니다. –

관련 문제