You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP运行报错Call to a member function saveXML() on bool怎么解决

报错原因

PHP Fatal error: Uncaught Error: Call to a member function saveXML() on bool on line 23.

该报错核心原因是$xml变量为布尔值,并非预期的SimpleXMLElement对象,因此无法调用saveXML()成员方法。

代码遗漏的处理逻辑

当前代码仅校验了curl请求的返回结果是否合法,完全没有处理XML解析环节的异常场景:

  • simplexml_load_string()函数在遇到内容格式非法、不符合XML规范的字符串时,会返回false,代码未对该函数的返回结果做合法性校验,直接调用成员方法就会触发报错
  • 现有try-catch逻辑无法捕获该类错误,因为simplexml_load_string()默认抛出的是PHP警告,不属于Exception异常范畴,写了异常捕获也不会生效
修复方案

可参考以下调整后的代码:

<?php 

ini_set('display_errors', 'On');
error_reporting(E_ALL);
// 开启XML内部错误捕获,避免直接抛出警告
libxml_use_internal_errors(true);

$url = "https://urltofeed.com";
$timeout = 1800;

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);

try {
    $response = curl_exec($curl);
    curl_close($curl);

    // 校验curl请求结果
    if ($response !== false) {
        $xml = simplexml_load_string($response);
        // 新增XML解析结果校验
        if ($xml !== false) {
            $xml->saveXML("feed.xml");
        } else {
            // 这里可以自定义XML解析失败的处理逻辑,比如打印错误信息
            $errors = libxml_get_errors();
            foreach ($errors as $error) {
                // 处理错误日志逻辑
            }
            libxml_clear_errors();
        }
    } else {
        // curl请求失败的处理逻辑
    }
} catch (Exception $ex) {
    // 全局异常处理
    if (gettype($curl) == 'resource') {
        curl_close($curl);
    }
}

echo 'Download XML done';

?>

内容的提问来源于stack exchange,提问作者JGeer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:09:01