PHP 使用simplexml_load_file() 获取XML 返回为false 的问题并解决

PHP对XML文件进行读写操作的方法一共有四种,分别是:

字符串方式直接读写、  

file_put_contents($file$str);//写入XML文件

$con file_get_contents($file); //读取XML

DOMDocument读写、

XMLWrite写和XMLReader读、

SimpleXML读写.

-----------------------------------------------------------------------------------

主要说最简单的

simplexml_load_file() 读取XML 返回 object

情况是, 我本地使用 simplexml_load_file('test.xml') 读取正常, 

但是在服务器上使用时, 返回为 false .并且使用 try...catch() 无法捕捉到错误信息. try里面运行成功了.

但是返回依然是false.

搜索一番后,发现, SimpleXML 模块,  有些云服务器, 比如腾讯云, (我这个是金山云 ),可能被腾讯云服务禁用了

 

结果方法:

$file = '../game_conf/Questionnaire.xml';

if(file_exists($file)) {
    //将XML中的数据,读取到数组对象中
    $xml_object=simplexml_load_file($file); //在部分服务器上, 因函数被禁用而无效, 返回false , try catch都无法捕捉
    if ($xml_object == false) {
        //换一种方式读取
        $con = file_get_contents($file);//把文件内容以字符串读出来

        $xml= str_replace('GB2312','UTF-8',$con);//simplexml_load_string解析xml返回false,排查之后发现是encoding='gb2312'
        $xml_object = simplexml_load_string($xml);

//        var_dump($xml_object);
    }


} else {
    echo '配置文件为空';
}

var_dump($xml_object);


die();


$xml_json=json_encode($xml_object);//对象转成json
$xml_arr=json_decode($xml_json,true);//json再转成数组

if(empty($xml_arr)) exit('配置文件为空');

 echo "
";
 var_dump($xml_arr);
 die();

这样就能成功读取了.

 

 

 

 

你可能感兴趣的:(php,php,xml)