【问题标题】:I can't catch php exceptions using try....catch我无法使用 try....catch 捕获 php 异常
【发布时间】:2011-09-08 11:33:50
【问题描述】:

我遇到了 PHP 异常问题。即使我尝试执行此代码:

try {
    $some->knownMethodWithError();
} catch(Zend_Exception $exp){
    echo 'Error!: ' . $exp->getMessage();
}

我的 apache/php 服务网页总是显示 500 错误。我的意思是,

echo 'Error!: ' . $exp->getMessage();

永远不会被执行。我已经用重定向而不是那个回声进行了测试,但它不起作用。是否有一些 php.ini 指令会导致这种行为,或者可能是其他原因?

这发生在我基于 Zend 框架的项目中。

【问题讨论】:

  • 没有导致异常不被抛出/捕获的指令,但可能有另一个问题导致 500。检查错误日志。

标签: zend-framework exception php


【解决方案1】:

500 错误不是 PHP 异常,它发生在代码级别之上。 500 错误表示 PHP 尝试解析您的脚本时出现错误(可能)。可能你的代码有语法错误。

【讨论】:

  • 好的,这可能是一个很好的理由,但我检查了代码,没有语法错误。
  • 好的,我使用了导致该错误的第三方 Soap 库。每当生成此错误时,它都会杀死我的应用程序。
【解决方案2】:

此外,您的代码只会捕获 Zend_Exception。 如果您有自定义异常,可能 catch(Exception $e) 将有更多机会捕获所有异常

也许您可以运行带有完整日志的脚本。在服务器上更改你的php.ini就行了:

error_reporting=E_ALL | E_STRICT

或者最好在带有调试器的 IDE 环境中运行它。

【讨论】:

  • 要捕获所有异常,请尝试 Exception $e 就像 lenzai 说的那样
  • 嗯,事实上这不仅发生在 Zend_Exception 上,而且发生在任何 Exception 上。例如,如果我使用 SoapClient 的 __soapCall 函数,并且由于某种原因它引发了 SoapFault 异常,我无法捕获它。我已经检查了该代码,并且没有 sintax 错误。即使我使用那个 try...catch 块,至少在 Firebug 中,响应有一个 500 错误代码。
猜你喜欢
  • 2014-03-22
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 2015-06-21
  • 2011-05-27
相关资源
最近更新 更多