2

このスニペットを実行しています:

foreach($config as $wsInfo){
  try{
    $soapClient = new SoapClient($wsInfo['url'], 
                                 array('encoding'=>'ISO-8859-1'));

    //  Some more code that I commented out.

  }
  catch(Exception $e){
    echo "EXCEPTION: \n" . $e->getMessage();
    // log it, etc.
  }
}

プログラムを実行すると、Web サービスの URL から認証エラーが返されます (開発のこの時点では問題ありません)。

私が注目している異常な動作は、私がこれを期待していた間、次のことです。

$ php scan.php -p=/ -c=config.yml
EXCEPTION: 
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://webservices.myserver.com/api.asmx?WSDL' : failed to load external entity "http://webservices.myserver.com/api.asmx?WSDL"
EXCEPTION: 
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://webservices.myserver.com/api.asmx?WSDL' : failed to load external entity "http://webservices.myserver.com/api.asmx?WSDL"

それは私にこれを与えています:

$ php scan.php -p=/ -c=config.yml
PHP Fatal error:  SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://webservices.myserver.com/api.asmx?WSDL' : failed to load external entity "http://webservices.myserver.com/api.asmx?WSDL"
 in /home/me/project/DFPushSOAP.php on line 34
EXCEPTION: 
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://webservices.myserver.com/api.asmx?WSDL' : failed to load external entity "http://webservices.myserver.com/api.asmx?WSDL"
PHP Fatal error:  SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://webservices.myserver.com/api.asmx?WSDL' : failed to load external entity "http://webservices.myserver.com/api.asmx?WSDL"
 in /home/me/project/DFPushSOAP.php on line 34
EXCEPTION: 
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://webservices.myserver.com/api.asmx?WSDL' : failed to load external entity "http://webservices.myserver.com/api.asmx?WSDL"

「PHP致命的エラー」がプログラムを強制終了しないのはなぜですか? そして、try/catch ブロックをエスケープしているのはなぜですか?

どうすればこれを回避できますか?

4

2 に答える 2

3

私は同じ問題を抱えていて、https://bugs.php.net/bug.php?id=47584で解決策を見つけました。

最初にexceptions、SoapClient に強制的に例外をスローさせるオプションを設定する必要があります。

    $soapClient = new SoapClient($wsInfo['url'], array('encoding'=>'ISO-8859-1'
                                                       'exceptions' => true ));

私の場合、xdebug は、キャッチ可能な例外ではなく致命的なエラーを生成することを強制していました。したがって、SoapClient の作成のために xdebug を無効にする必要があります。

    if(function_exists('xdebug_disable')){ xdebug_disable(); };
    $soapClient = new SoapClient($wsInfo['url'], array('encoding'=>'ISO-8859-1'
                                                       'exceptions' => true ));
    if(function_exists('xdebug_enable')){ xdebug_enable(); };

これがあなたを助けることを願っています^^

于 2013-03-26T08:54:48.230 に答える