查看: 621|回复: 0

[PHP实例] ThinkPHP2 Xml编译出错,缓存生成失败,请刷新页面 问题

发表于 2017-10-29 08:31:37
太阳http代理AD
前言

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

问题

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

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

经过调试发现,原因在于\site\admin\ThinkPHP\Lib\Think\Template\TagLib.class.php文件110行simplexml_load_file()方法读不到xml文件数据,进而无法将xml转为对象,所以报错。

解决

注释该行,采用SimpleXMLElement获取,源码如下:

  1. $file = file_get_contents($this->xml);
  2. $xml_result = new SimpleXMLElement($file);
  3. //$xml_result = simplexml_load_file($this->xml);
  4. if($xml_result)
  5. {
  6. $array = (array)($xml_result);
  7. }
  8. else
  9. {
  10. header("Content-Type:text/html; charset=utf-8");
  11. echo "Xml编译出错,缓存生成失败,请刷新页面。";exit;
  12. }
复制代码
备注

之前曾经检查过simplexml_load_file()函数是否被禁用等,均为发现问题。最终无奈,只能以SimpleXMLElement代替,如果有发现根本原因的,欢迎提出来。



太阳http代理AD
回复

使用道具 举报