DOMDocument->loadHTMLFile() I/O 警告:无法加载外部实体,仅在被 ajax 调用时失败



我有一个函数,它创建我创建的表单模板的新实例(不使用模板引擎(,并根据传递给它的对象填充各种数据。当页面加载时,我使用这个函数为现有对象创建表单,但我在界面中也有一个按钮,它向一个单独的脚本发出ajax请求,该脚本创建一个新对象,然后调用该函数为对象创建一个表单,作为对ajax的响应发送。

错误为:

Warning: DOMDocument::loadHTMLFile(): I/O warning : failed to load external entity &quot;templates/form_edit_event.html&quot; in C:wamp64www<private>src<private>componentscomponent_edit_event.php on line 12

它引用的代码:

11    $eventDom = new DOMDocument();
12    $eventDom->loadHTMLFile('templates/form_edit_event.html');

不过,当第一次加载页面时,我的脚本和loadHTMLFile函数可以很好地为已经存在的对象创建表单。只有当我使用按钮尝试创建新的I/O时,才会出现I/O错误。它的确切文本如下,尽管我模糊了一些不重要的目录名:

它加载的文件是纯html,甚至不是页眉/页脚等,只是<form>contents</form>。我不知道为什么它有时会失败。

从ajax调用的整个脚本(减去一些不必要的使用/包含(是这样的,component_edit_event.php是上面提到的创建表单的脚本:

include_once __DIR__ . '..componentscomponent_edit_event.php';
$tourneyId = $_POST['tourneyId'];
/** @var DimTournament $tourney */
$tourney = DimTournament::findById($tourneyId);
$newEvent = new DimEvent($tourney);
echo createEventForm($newEvent)->saveHTML();

我认为我不需要包含任何其他代码,但如果需要的话,我绝对可以。

$eventDom->loadHTMLFile('templates/form_edit_event.html');中的相对路径交换为绝对路径解决了此问题。引发错误的脚本与运行正常的脚本位于不同的目录中。

我将制作一个带有某种$srcRoot变量的配置文件,以便在路径名中保留一些伪相对性的外观。

最新更新