С этим кодом:
<?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_dump
выплевывает DOMText
объект, но на моей производственной машине он возвращает DOMElement
объект.
Производственный сервер работает php 5.4.33
с libxml 2.7.8
Dev машина работает php 5.4.4
с libxml 2.8.0
Вероятно, это связано с различными версиями PHP:
DOMDocument::loadHTML
метод принял только секунду ($options
) аргумент начиная с PHP 5.4, он указан на журнал изменений:
5.4.0 DOMDocument :: loadHTML Добавлен параметр options.
DOMDocument :: loadHTMLFile Добавлен параметр параметров.
Изменения также перечислены на DOMDocument::loadHTML
страницы документа
Обновить:
После некоторых раскопок я нашел много противоречивой информации о LIBXML_HTML_NODEFDTD
постоянная. согласно документации, он доступен в> = libxml 2.7.7, тогда как другие источники противоречат этому. Я нашел несколько проектов, которые определяют эту константу вручную, и ответ здесь в котором говорится, что эта константа только доступно в libxml 2.7.8.
Это может объяснить разницу между вашими 2 средами. Проект с открытым исходным кодом на GitHub решает эту проблему, просто определяя константу, если необходимо:
defined('LIBXML_HTML_NODEFDTD') || define ('LIBXML_HTML_NODEFDTD', 4);
Других решений пока нет …