我想在yii2项目中使用SoapClient。但我需要使用try-catch管理错误。但那不起作用!
yii2代码示例:
class SiteController extends Controller
{
public function actionIndex()
{
try{
new \SoapClient('a',['cache_wsdl' => WSDL_CACHE_MEMORY]);
}catch(\SoapFault $e){
echo '***************';
}
}
}
yii框架输出:
PHP致命错误 - yii \ base \ ErrorException SOAP-ERROR:解析WSDL: 无法从'a'加载:无法加载外部实体“a”
但是在test.php(没有yii框架)中:
try{
new SoapClient('a',['cache_wsdl' => WSDL_CACHE_MEMORY]);
}catch(SoapFault $e){
echo '***************';
}
输出
***************
为什么抓住SoapFault无法正常工作? 但是在单个php脚本中工作和打印的星星。
答案 0 :(得分:1)
当我在谷歌上搜索同样的问题时帮助我的解决方案:
try {
$wsdl = 'http://test.com/test/ws/Landing/?wsdl';
simplexml_load_file($wsdl);
$short_link = new \SoapClient($wsdl, $options);
} catch (\Throwable $e) {
var_dump($e);
}
来源:https://github.com/yiisoft/yii2/issues/11772#issuecomment-413887276
如果需要进行授权,可以使用 curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, "{$login}:{$password}");
curl_setopt($ch, CURLOPT_SSLCERT, $cert_path);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: text/xml; charset=utf-8"]);
$result = curl_exec($ch);
curl_close($ch);
答案 1 :(得分:-1)
你应该添加
define('YII_ENABLE_ERROR_HANDLER', false);
它对我有用