我有这段代码:
$doc = new DOMDocument();
$doc->validateOnParse = true;
$doc->formatOutput = true;
$doc->loadHTMLFile($file);
$raw = $doc->saveHTML();
当我执行var_dump($raw)
时,它会显示string(1) " "
。有些事情显然是错误的。
var_dump($doc)
输出
object(DOMDocument)#5228 (35) {
["recover"]=>
bool(false)
["documentURI"]=>
NULL
["strictErrorChecking"]=>
bool(true)
["xmlStandalone"]=>
bool(true)
["standalone"]=>
bool(true)
["attributes"]=>
NULL
["nodeValue"]=>
NULL
["resolveExternals"]=>
bool(false)
["childNodes"]=>
string(22) "(object value omitted)"
["previousSibling"]=>
NULL
["nodeName"]=>
string(9) "#document"
["xmlVersion"]=>
string(3) "1.0"
["lastChild"]=>
NULL
["nodeType"]=>
int(9)
["formatOutput"]=>
bool(true)
["firstChild"]=>
NULL
["parentNode"]=>
NULL
["ownerDocument"]=>
NULL
["config"]=>
NULL
["prefix"]=>
string(0) ""
["implementation"]=>
string(22) "(object value omitted)"
["preserveWhiteSpace"]=>
bool(true)
["documentElement"]=>
NULL
["namespaceURI"]=>
NULL
["baseURI"]=>
NULL
["substituteEntities"]=>
bool(false)
["textContent"]=>
string(0) ""
["nextSibling"]=>
NULL
["doctype"]=>
NULL
["validateOnParse"]=>
bool(true)
["version"]=>
string(3) "1.0"
["actualEncoding"]=>
NULL
["encoding"]=>
NULL
["localName"]=>
NULL
["xmlEncoding"]=>
NULL
}
可能是什么问题?
#Update:
错误是loadHTMLFile()
。它返回一个FALSE。但为什么?该文件的路径是正确的。
如果我改为:
$doc->loadHTML(file_get_contents($file));
它运作得很好。这是HHVM的错误吗?
答案 0 :(得分:1)
HHVM(自版本3.3起)默认阻止所有外部资源。这是php.ini
选项,可以再次启用它们:
hhvm.libxml.ext_entity_whitelist = file
您可以使用逗号分隔列表提供多个流包装器:
hhvm.libxml.ext_entity_whitelist = file,http