有什么方法可以在 REST API 上屏蔽"Fatal Error"并给出用户友好的错误消息?



我正在开发一个REST API,我可以在公司当前和未来的项目中使用它。我对PHP并不陌生,但我对它的了解也不多。

因此,目前,我正在尝试模拟调用无效查询或不存在的函数时可能出现的错误。我已经尝试了几个片段,例如这里,这里,这里和这里 - 但没有一个对我有用。它仍然会引发一个一般错误,显示整个堆栈跟踪、发生错误的查询部分、遇到错误的文件和行号。我知道并且我已经读到,即使有Throwable Exceptions,也不应该被任何try/catch块捕获,但我仍然宁愿不抛出可能导致可能的安全漏洞的信息。

以下是我遇到的致命错误消息的示例,try/catch块无法记录:

<br />
<b>Fatal error</b>: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION
test_api_db.VERSIONs does not exist in C:xampphtdocsmy-apiappservicesv1testtest_1_route.service.php:29
Stack trace:
#0 [internal function]: PDOStatement-&gt;execute()
#1 [internal function]: PhalconDbAdapterPdo-&gt;executePrepared(Object(PDOStatement), Array, Array)
#2 [internal function]: PhalconDbAdapterPdo-&gt;query('SELECT VERSIONs...', NULL, NULL)
#3 [internal function]: PhalconDbAdapter-&gt;fetchOne('SELECT VERSIONs...', 4, NULL)
#4 C:xampphtdocsmy-apiappservicesv1testtest_1_route.service.php(29):
PhalconDbAdapter-&gt;fetchColumn('SELECT VERSIONs...')
#5 C:xampphtdocsmy-apiapproutesv1testtest_1_route.php(57):
myAPIAppServicesv1TestTest1RouteService-&gt;GetDbVersion()
#6 [internal function]: Closure-&gt;myAPIAppRoutesv1Test{closure}()
#7 C:xampphtdocsmy-apiindex.php(55): PhalconMvcMicro-&gt;handle()
#8 {main}
thrown in <b>C:xampphtdocsmy-apiappservicesv1testtest_1_route.service.php</b    on line <b>29</b><br />
Error#Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION test_api_db.VERSIONs does not exist in C:xampphtdocsmy-apiappservicesv1testtest_1_route.service.php:29
Stack trace:
#0 [internal function]: PDOStatement->execute()
#1 [internal function]: PhalconDbAdapterPdo->executePrepared(Object(PDOStatement), Array, Array)
#2 [internal function]: PhalconDbAdapterPdo->query('SELECT VERSIONs...', NULL, NULL)
#3 [internal function]: PhalconDbAdapter->fetchOne('SELECT VERSIONs...', 4, NULL)
#4 C:xampphtdocsmy-apiappservicesv1testtest_1_route.service.php(29): PhalconDbAdapter->fetchColumn('SELECT VERSIONs...')
#5 C:xampphtdocsmy-apiapproutesv1testtest_1_route.php(57): myAPIAppServicesv1TestTest1RouteService->GetDbVersion()
#6 [internal function]: Closure->myAPIAppRoutesv1Test{closure}()
#7 C:xampphtdocsmy-apiindex.php(55): PhalconMvcMicro->handle()
#8 {main}
thrown<br>Line#29<br>File#C:xampphtdocsmy-apiappservicesv1testtest_1_route.service.php<br>

如果有帮助,我将在PHP(7.3.0)上使用PhalconPHP(3.4.3),因为它为我提供了用我所拥有的很少的知识开始处理API所需的所有东西。

php 7.x 中的致命错误并不Exceptions,但它们是Throwable的实例。

您可以捕获Throwable并返回错误消息,而不是捕获Exception

最新更新