我最近重新打开了一个旧的(1 年)Symfony 项目,我在每个页面上都有一个错误(我不记得一年前有这个问题):
[exception] 500 | Internal Server Error | Symfony\Component\Config\Exception\FileLoaderLoadException
/var/www/[...]/wdt.xml
ContextErrorException: Notice: Undefined property: DOMDocument::$documentElement
如果我清除缓存,错误就会消失,但一旦我编辑并保存文件,错误就会再次出现。该项目使用的是 Symfony 2.8,我更新到 Symfony 3.2,但它并没有解决问题。
我认为问题与 wdt.xml 文件无关,我认为它可能与我的笔记本电脑配置有关。
我真的不知道从哪里开始调查,所以欢迎任何建议!
编辑 1:
我实际上在几天前创建的另一个项目中遇到了同样的问题。该项目不使用任何额外的包,我只创建了 5 个实体并生成了 MySQL 数据库。
编辑 2:
经过更多研究,我决定创建一个新的 Ubuntu VM 并测试一个新的 Symfony 项目,它运行良好,所以它一定与我笔记本电脑上的配置有关。
编辑 3:
经过更多测试,这是我添加 print_r($dom); 时得到的结果。在文件 XmlUtils.php (vendor/symfony/symfony/src/Symfony/Component/Config/Util/XmlUtils.php) 第 59 行:
Ubuntu VM(无错误):
DOMDocument Object ( [doctype] => [implementation] => (object value omitted) [documentElement] => (object value omitted) [actualEncoding] => [encoding] => [xmlEncoding] => [standalone] => 1 [xmlStandalone] => 1 [version] => 1.0 [xmlVersion] => 1.0 [strictErrorChecking] => 1 [documentURI] => /var/www/my_project/web/ [config] => [formatOutput] => [validateOnParse] => 1 [resolveExternals] => [preserveWhiteSpace] => 1 [recover] => [substituteEntities] => [nodeName] => #document [nodeValue] => [nodeType] => 9 [parentNode] => [childNodes] => (object value omitted) [firstChild] => (object value omitted) [lastChild] => (object value omitted) [previousSibling] => [attributes] => [ownerDocument] => [namespaceURI] => [prefix] => [localName] => [baseURI] => /var/www/my_project/web/ [textContent] => %kernel.charset% %kernel.default_locale% )
Ubuntu笔记本电脑(错误):
DOMDocument Object ( [validateOnParse] => 1 [nodeName] => #document [nodeValue] => [nodeType] => 9 [parentNode] => [childNodes] => (object value omitted) [firstChild] => (object value omitted) [lastChild] => (object value omitted) [previousSibling] => [attributes] => [ownerDocument] => [namespaceURI] => [prefix] => [localName] => [baseURI] => /var/www/lab/symfony/booklib/web/ [textContent] => %kernel.charset% %kernel.default_locale% )
我的笔记本电脑上似乎缺少一些信息...
所以基本上,函数 $dom->loadXML 在我的笔记本电脑环境和虚拟机内部不会返回相同的值......知道为什么吗?