SOAP-ERROR:解析WSDL:无法加载(PHP 5.6证书检查)

时间:2015-09-26 18:00:15

标签: php ssl soap wsdl

我一直在争论以下错误的时间比我想承认的还要长。我发现的解决方案与实际问题无关。

PHP致命错误:SOAP-ERROR:解析WSDL:无法从“https://x.x.x.x/iControl/iControlPortal.cgi?WSDL=LocalLB.Class”加载:无法加载外部实体“https://x.x.x.x/iControl/iControlPortal.cgi?WSDL=LocalLB.Class

我的prod环境是CentOS 6,它与PHP 5.3一起打包,自2014年8月起一直是EOL。根据我的理解CentOS backports安全修复程序,我仍然想用更新的版本进行一些测试,还有一些其他功能不可用在5.3我可以利用。

我使用PHP 5.6构建了一个新的DEV环境,所有这些环境似乎都在工作,直到我尝试了SOAP调用并得到了上面的消息。经过大量搜索后,我终于发现在PHP 5.6默认情况下启用SSL证书检查。在我的DEV环境中,它完全被包含,应用程序需要SSL。我没有有效的证书。我没有在我的PROD环境中测试过具有有效证书的环境。

为了解决这个问题,我补充道:

'stream_context'=>stream_context_create
(
    array
    (
        'ssl'=>array
        (
            'verify_peer'=>false, 
            'verify_peer_name'=>false
        )
    )
)

这里将它放在代码中。这有点乱,只是把它扔在一起进行测试。

<?php

$device_ip = "x.x.x.x";
$user = "username";
$pw = "password";

$location = "https://" . $device_ip . "/iControl/iControlPortal.cgi?";
$wsdl_class = "https://" . $device_ip . "/iControl/iControlPortal.cgi?WSDL=LocalLB.Class";
$soap_class = new SoapClient($wsdl_class, array('location'=>$location, 'login'=>$user, 'password'=>$pw, 'stream_context'=>stream_context_create(array('ssl'=>array('verify_peer'=>false, 'verify_peer_name'=>false)))));

$response = $soap_class->get_string_class(array("SomeName"));
var_dump($response);

?>

虽然我能找到没有有效证书的解决方法。有没有办法导入自签名证书,以便我不会在DEV环境中使用该变通方法?

0 个答案:

没有答案