为什么我的 PHP SOAP 连接失败并显示'SOAP-ERROR:正在解析 WSDL:无法从 [URL] 加载:无法加载外部实体 [URL]”?

Mary-Kate Olsen
发布: 2024-11-02 21:56:03
原创
683 人浏览过

Why does my PHP SOAP connection fail with

SOAP PHP 解析 WSDL 错误:无法加载外部实体

尝试使用 PHP 建立 SOAP 连接时,您可能会遇到以下错误“SOAP-错误:正在解析 WSDL:无法从 [URL] 加载:无法加载外部实体 [URL]”。此错误表明 SOAP 客户端无法访问客户端构造函数中引用的 WSDL 文件。

故障排除步骤:

  1. 确保 WSDL文件可用且可访问: 验证客户端构造函数 URL 中指定的 WSDL 文件是否存在于指定路径并且可由 SOAP 客户端访问。
  2. 禁用 SSL 验证(安全问题): 如果使用 PHP 5.6.5 或更高版本并建立 SOAP 1.2 连接,向客户端构造函数添加 SSL 参数可能会解决该问题:
<code class="php">$opts = array(
    'ssl' => array(
        'ciphers' => 'RC4-SHA',
        'verify_peer' => false,
        'verify_peer_name' => false
    )
);

$params = array(
    'encoding' => 'UTF-8',
    'verifypeer' => false,
    'verifyhost' => false,
    'soap_version' => SOAP_1_2,
    'trace' => 1,
    'exceptions' => 1,
    'connection_timeout' => 180,
    'stream_context' => stream_context_create($opts)
);

$wsdlUrl = $url . '?WSDL';
$oSoapClient = new SoapClient($wsdlUrl, $params);</code>
登录后复制

注意:禁用 SSL 验证存在安全风险,不应在生产环境中使用。

  1. 验证 WSDL 文件格式:确保 WSDL 文件是符合以下标准的有效 XML 文档WSDL 规范。
  2. 检查网络连接:验证 SOAP 客户端是否可以通过网络访问托管 WSDL 文件的服务器。
  3. 考虑使用 WSDL 文件缓存: 在 PHP 中启用 WSDL 文件缓存可以防止重复下载并提高性能:
<code class="php">ini_set("soap.wsdl_cache_enabled", "1");
ini_set("soap.wsdl_cache_ttl", "86400"); // 24 hours</code>
登录后复制

以上是为什么我的 PHP SOAP 连接失败并显示'SOAP-ERROR:正在解析 WSDL:无法从 [URL] 加载:无法加载外部实体 [URL]”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板