【问题标题】:Yii2 - fatal error , try-catch not workingYii2 - 致命错误,try-catch 不起作用
【发布时间】:2016-06-17 16:01:54
【问题描述】:

我想在 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: Parsing WSDL: 无法从“a”加载:无法加载外部实体“a”

但在 test.php(没有 yii 框架)中:

try{
    new SoapClient('a',['cache_wsdl' =>  WSDL_CACHE_MEMORY]);
}catch(SoapFault $e){
    echo '***************';
}

输出

***************

为什么捕获 SoapFault 不起作用? 但在单个 php 脚本中可以工作并打印星星。

【问题讨论】:

  • try catch 不会捕获致命的。你遇到了什么错误? (注意,除非是致命的,但你不要说。)
  • 似乎这是一个可捕获的致命错误,因为单个 php 脚本中的 try-catch 有效,但在 yii2 框架中无效。可捕获和不可捕获有什么区别?
  • 如果我记得的话,可捕获的意味着致命事件是您可以使用自定义错误处理程序捕获的,不可捕获的只是杀死该进程,然后不管您做什么。
  • 是的,这是可以捕捉的。为什么在 yii 中不起作用?
  • 不知道,你仍然没有向我们展示实际的错误。

标签: php yii2 try-catch


【解决方案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);

【讨论】:

    【解决方案2】:

    你应该添加

    define('YII_ENABLE_ERROR_HANDLER', false);
    

    对我有用

    【讨论】:

    猜你喜欢
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多