ThinkPHP2 Xml编译出错,缓存生成失败,请刷新页面 问题
前言
公司拿到的团购网站,其中后台是ThinkPHP2
写的。
问题
使用过程中,发现一个问题:
在删除`runtime`缓存目录下的`~runtime.php`和`~app.php`两个文件之后,虽然该目录下仍然会再次生成,但是到后台会发现提示“Xml编译出错,缓存生成失败,请刷新页面。”。
原因
经过调试发现,原因在于\site\admin\ThinkPHP\Lib\Think\Template\TagLib.class.php
文件110
行simplexml_load_file()
方法读不到xml文件数据,进而无法将xml转为对象,所以报错。
解决
注释该行,采用SimpleXMLElement
获取,源码如下:
$file = file_get_contents($this->xml);
$xml_result = new SimpleXMLElement($file);
//$xml_result = simplexml_load_file($this->xml);
if($xml_result)
{
$array = (array)($xml_result);
}
else
{
header("Content-Type:text/html; charset=utf-8");
echo "Xml编译出错,缓存生成失败,请刷新页面。";exit;
}
备注
之前曾经检查过simplexml_load_file()
函数是否被禁用等,均为发现问题。最终无奈,只能以SimpleXMLElement
代替,如果有发现根本原因的,欢迎提出来。