php异常无法捕捉?

发布于 2022-09-07 11:30:09 字数 514 浏览 61 评论 0

在文件a.php中引入文件b.php,并在a.php中执行b.php中的一个函数c。此时c抛出异常,而在a中无法捕获。环境:nginx,php-fpm。
nginx直接502

不好意思。一下贴出代码和错误:
a.php中代码

clipboard.png

nginx 错误日志

clipboard.png

此时在b中的pdo抛出了异常,这里是捕捉不到的,但是如果我在b.php文件的代码中直接catch(一下是b.php的代码):

clipboard.png
另外,php-fpm没有任何错误日志。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

错々过的事 2022-09-14 11:30:09

能贴代码就不要贴图啊!!!!!!!

要做啥说明你可以用注释啊!!!!!

从你的问题我给你几个建议:

  1. 看nginx的错误日志,nginx一般能给你一个很好的反馈。
  2. 再看php-fpm的错误日志记录,基本上能定位PHP的错误。
  3. 通常来说你这种是程序出错了,我建议你用catch(Error $e)同时捕获错误,如果是报错的话,不用Error是捕获不到的,Exception只能捕获异常。

以上三点,切记切记。


更新一下回答:

从你代码可见,你在用

try {
} catch(Exception $e) {
}

这里的Exception类不知道是你自己定义的还是框架里的,不管这两种情况是输入哪一种,假设你b.php中pdo所抛出的异常不是继承你a所定义的这个异常类,你在a中肯定无法捕获到。
所以你可以用\Exception试一下,为PHP中所有异常类的基类。
另外,我把

catch(Error $e)

加大一点,你用这个:

catch(Error $e)

试一下看看到底程序有没有错啊。
另外:

能贴代码就不要贴图啊!!!!!!!

旧情勿念 2022-09-14 11:30:09

说的是啥啊,图片都没有

噩梦成真你也成魔 2022-09-14 11:30:09

Exception异常和Error错误都需要捕获

try {
    echo asdfasdf('1'); //未定义的函数
    throw new Exception('asdasd');
} catch (Exception $e) {
    echo $e->getMessage();
} catch (Error $e) { 
    echo $e->getMessage();
}

光捕获异常肯定不行的

我不会写诗 2022-09-14 11:30:09

php 7以上版本可以用Throwable

try {
    echo 'php7';
} catch(Throwable $e){
    throw new Exception('异常');
}

官方文档

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文