DOMDocument->loadHTMLFile() I/O 警告:加载外部实体失败

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


错误是:


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

它引用的代码:


11    $eventDom = new DOMDocument();

12    $eventDom->loadHTMLFile('templates/form_edit_event.html');

但问题是,当页面首次加载时,我的脚本和 loadHTMLFile 函数可以很好地为已经存在的对象创建表单。仅当我使用该按钮尝试创建新按钮时,才会出现 I/O 错误。其确切文本如下,尽管我掩盖了一些不重要的目录名称:


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


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


include_once __DIR__ . '\..\components\component_edit_event.php';


$tourneyId = $_POST['tourneyId'];

/** @var DimTournament $tourney */

$tourney = DimTournament::findById($tourneyId);

$newEvent = new DimEvent($tourney);

echo createEventForm($newEvent)->saveHTML();

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


慕容3067478
浏览 71回答 1
1回答

叮当猫咪

将相对路径替换$eventDom->loadHTMLFile('templates/form_edit_event.html');为绝对路径解决了该问题。引发错误的脚本与工作正常的脚本位于不同的目录中。我将使用某种 $srcRoot 变量创建一个配置文件,以便在路径名中保留一些伪相对论的外观。
打开App,查看更多内容
随时随地看视频慕课网APP