Есть ли способ замаскировать «фатальную ошибку» в REST API и вместо этого выдать удобное сообщение об ошибке? - PullRequest
0 голосов
/ 10 июля 2019

Я работаю над REST API, который я могу использовать в своих текущих и будущих проектах для Компании. Я не новичок в PHP, но мои знания об этом также не так много.

Поэтому в настоящее время я пытаюсь смоделировать возможную ошибку как при вызове неверного запроса, так и несуществующей функции. Я пробовал несколько фрагментов, таких как здесь , здесь , здесь и здесь - но ни один из них не работал для меня. Он по-прежнему генерирует общую ошибку, которая показывает всю трассировку стека, часть запроса, где произошла ошибка, номер файла и строки, где произошла ошибка. Я знаю и прочитал, что фатальные ошибки не должны быть обнаружены никаким блоком try/catch даже с Throwable Exceptions, но я бы все равно не выбрасывал такую ​​информацию, которая могла бы привести к возможной уязвимости безопасности.

Ниже приведен пример сообщения о фатальной ошибке, с которым я столкнулся, что блок 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:\xampp\htdocs\my-api\app\services\v1\test\test_1_route.service.php:29
Stack trace:
#0 [internal function]: PDOStatement-&gt;execute()
#1 [internal function]: Phalcon\Db\Adapter\Pdo-&gt;executePrepared(Object(PDOStatement), Array, Array)
#2 [internal function]: Phalcon\Db\Adapter\Pdo-&gt;query('SELECT VERSIONs...', NULL, NULL)
#3 [internal function]: Phalcon\Db\Adapter-&gt;fetchOne('SELECT VERSIONs...', 4, NULL)
#4 C:\xampp\htdocs\my-api\app\services\v1\test\test_1_route.service.php(29):
Phalcon\Db\Adapter-&gt;fetchColumn('SELECT VERSIONs...')
#5 C:\xampp\htdocs\my-api\app\routes\v1\test\test_1_route.php(57):
myAPI\App\Services\v1\Test\Test1RouteService-&gt;GetDbVersion()
#6 [internal function]: Closure-&gt;myAPI\App\Routes\v1\Test\{closure}()
#7 C:\xampp\htdocs\my-api\index.php(55): Phalcon\Mvc\Micro-&gt;handle()
#8 {main}
thrown in <b>C:\xampp\htdocs\my-api\app\services\v1\test\test_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:\xampp\htdocs\my-api\app\services\v1\test\test_1_route.service.php:29
Stack trace:
#0 [internal function]: PDOStatement->execute()
#1 [internal function]: Phalcon\Db\Adapter\Pdo->executePrepared(Object(PDOStatement), Array, Array)
#2 [internal function]: Phalcon\Db\Adapter\Pdo->query('SELECT VERSIONs...', NULL, NULL)
#3 [internal function]: Phalcon\Db\Adapter->fetchOne('SELECT VERSIONs...', 4, NULL)
#4 C:\xampp\htdocs\my-api\app\services\v1\test\test_1_route.service.php(29): Phalcon\Db\Adapter->fetchColumn('SELECT VERSIONs...')
#5 C:\xampp\htdocs\my-api\app\routes\v1\test\test_1_route.php(57): myAPI\App\Services\v1\Test\Test1RouteService->GetDbVersion()
#6 [internal function]: Closure->myAPI\App\Routes\v1\Test\{closure}()
#7 C:\xampp\htdocs\my-api\index.php(55): Phalcon\Mvc\Micro->handle()
#8 {main}
  thrown<br>Line#29<br>File#C:\xampp\htdocs\my-api\app\services\v1\test\test_1_route.service.php<br>

Если это поможет, я использую PhalconPHP (3.4.3) на PHP (7.3.0), поскольку он предоставляет мне все, что мне нужно, чтобы начать работать над API, с тем небольшим количеством знаний, которые у меня есть.

1 Ответ

1 голос
/ 10 июля 2019

Фатальные ошибки в php 7.x - это не Exceptions, но они являются экземплярами Throwable.

Вместо перехвата Exception вы можете перехватить Throwable и вернуть сообщение об ошибке.

...