【问题标题】:How to handle and work with fatal Errors如何处理和处理致命错误
【发布时间】:2016-10-25 13:58:05
【问题描述】:

我正在针对一个一直运行良好的设备运行一个 php 脚本,直到最近一个特殊情况导致了致命错误。

$soapClient = new SoapClient("/var/www/blah/someWSDL.wsdl", array('trace'=>true, 'exceptions'=>true,'location'=>"https://hostName:8443/axl",'login' => "userName",'password'=> "password"));

$response = $soapClient->getLine(array("routePartitionName"=>"PT-INHOUSE", "pattern"=>"$row[callingPartyNumber]"));
echo "<TR><TD class='body'>" .  $response->return->line->description . "</TD><TD class='body'>" 

因此,这将适用于 $response 产生输出的任何情况。但是,在某些情况下它不会(非常罕见)。在这些情况下,会生成它;

Fatal error: Uncaught SoapFault exception: [soapenv:Server] Item not valid: 

在阅读这个问题时,听起来我应该做的是“捕捉”错误。如果发生致命错误,我想绕过回显 $response->return->line->description 并将此输出替换为“未找到”之类的文本。这是否可能与 if 语句有关,例如“如果发生致命错误,则输出此”?根据我的阅读,这不是推荐的东西。任何帮助表示赞赏。

【问题讨论】:

  • 没有普遍有效的答案。理想情况下,您应该确定抛出 SoapFaul 的原因:是您这边的逻辑错误还是您无法控制的运行时问题。
  • 嗨,Alvaro,这不是逻辑错误。我知道为什么会发生错误,而且不管你信不信,它是完全正常的。我正在从数据库生成报告,然后使用数据库中的对象在另一个数据库中搜索。但是,作为正常业务过程,第二个数据库中的对象可能不再存在。
  • 然后您应该捕获异常并确保您的代码正常恢复。

标签: php


【解决方案1】:

一般来说,您应该通过检查引发错误的条件来避免错误,并避免这些。如果您无法避免错误,请使用以下构造:

try {
    // code that produces errors
} catch (Exception $e) {
    echo $e -> getMessage ();
    echo "Nothing found.";
}

更多信息:http://www.w3schools.com/php/php_exception.asp

【讨论】:

  • 我建议不要仅仅为了打印它们而捕获异常。没有明显的好处,你只是失去了相关的功能——例如,你不能有一个站点范围的错误处理程序来正确记录或报告它。
  • 这是一个很好的观点,但总的来说,这就是解决方案。横向实施是最好的结果。此外,检查错误类型并正确处理是必要的。
  • 我明白你在说什么。一些上下文。该脚本首先转到 MySQL 数据库并搜索进行最远距离呼叫的扩展列表。但是,数据库不包含拨打电话的用户的姓名。查询的第二部分从第一个数据库中获取扩展名,并检查第二个数据库中的用户名。但是,正如我发现的那样,扩展实际上可能会从第二个数据库中删除,因为用户离开或扩展已停用。第一个 db 输出的数据仍然非常重要,但我无法进行第二个查询。
  • 这听起来像是一个糟糕的架构,但我知道有时你无法绕过它。为此,我建议首先通过使用 COUNT 查询来检查第二个数据库是否有任何条目。如果有,请运行您的正常查询。我希望我没听错。
  • 然后,使用我的答案中提供的代码。将echo-line 包裹在 try 块中,并在 catch 块中(仅在错误时调用)echo "Nothing found.";
猜你喜欢
  • 2011-09-18
  • 2011-04-19
  • 2013-05-02
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 2013-08-13
相关资源
最近更新 更多