PHP調用wsdl接口實例化SoapClient拋出異常


異常:Message:SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://*****?wsdl' : failed to load external entity "http://****?wsdl"。
 
本地調用接口正常,放到服務器上以后,出現了500錯誤。try{}cache(){}:
 
     try{
          $client=new SoapClient($wsdl);
        }catch(Exception $e){
          echo 'Message:'.$e->getMessage();
       }
拋出異常:Message:SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://*****?wsdl' : failed to load external entity "http://****?wsdl"。
   首先確認,服務器PHP環境配置和本地一樣。也百度了很多解決辦法,都沒起作用,請教了接口的開發者.NET 工程師。發給一張截圖:

 

   解決辦法:$client=new SoapClient($wsdl);這句代碼前添加libxml_disable_entity_loader(false); 問題就這樣解決了。
查libxml_disable_entity_loader()作用:  Disable the ability to load external entities(禁用加載外部實體的能力)。
SoapClient在我的代碼里面確實是外部的實體,我不禁用加載外部實體的能力,就可以實例化SoapClient。問題也就自然而然的解決了。

PHP調用Web services接口實例:

    $url='http://****?wsdl';

    $client = new SoapClient($url);
    $param = array("param1"=>$param1,"param2"=>$param2);

   方法1:
     $p = $client->__soapCall('functionname',array("parameters"=>$param));        
     $arr= json_decode($p->functionnameResult,true);    

  方法2:

    $ret2 = $client->functionname($param);  
    $actjson=$ret2->functionnameResult;
    $arr=json_decode($actjson,true);

   return $arr;

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM