前言

公司拿到的团购网站,其中后台是ThinkPHP2写的。

问题

使用过程中,发现一个问题:

在删除`runtime`缓存目录下的`~runtime.php`和`~app.php`两个文件之后,虽然该目录下仍然会再次生成,但是到后台会发现提示“Xml编译出错,缓存生成失败,请刷新页面。”。

原因

经过调试发现,原因在于\site\admin\ThinkPHP\Lib\Think\Template\TagLib.class.php文件110simplexml_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代替,如果有发现根本原因的,欢迎提出来。


青叶
1.5k 声望112 粉丝

一个phper