在文件a.php中引入文件b.php,并在a.php中执行b.php中的一个函数c。此时c抛出异常,而在a中无法捕获。环境:nginx,php-fpm。
nginx直接502
不好意思。一下贴出代码和错误:
a.php中代码
nginx 错误日志
此时在b中的pdo抛出了异常,这里是捕捉不到的,但是如果我在b.php文件的代码中直接catch(一下是b.php的代码):
另外,php-fpm没有任何错误日志。
在文件a.php中引入文件b.php,并在a.php中执行b.php中的一个函数c。此时c抛出异常,而在a中无法捕获。环境:nginx,php-fpm。
nginx直接502
不好意思。一下贴出代码和错误:
a.php中代码
nginx 错误日志
此时在b中的pdo抛出了异常,这里是捕捉不到的,但是如果我在b.php文件的代码中直接catch(一下是b.php的代码):
另外,php-fpm没有任何错误日志。
Exception异常和Error错误都需要捕获
try {
echo asdfasdf('1'); //未定义的函数
throw new Exception('asdasd');
} catch (Exception $e) {
echo $e->getMessage();
} catch (Error $e) {
echo $e->getMessage();
}
光捕获异常肯定不行的
php 7以上版本可以用Throwable
try {
echo 'php7';
} catch(Throwable $e){
throw new Exception('异常');
}
15 回答8.4k 阅读
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.4k 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
能贴代码就不要贴图啊!!!!!!!
要做啥说明你可以用注释啊!!!!!
从你的问题我给你几个建议:
catch(Error $e)
同时捕获错误,如果是报错的话,不用Error是捕获不到的,Exception只能捕获异常。以上三点,切记切记。
更新一下回答:
从你代码可见,你在用
这里的
Exception
类不知道是你自己定义的还是框架里的,不管这两种情况是输入哪一种,假设你b.php
中pdo所抛出的异常不是继承你a所定义的这个异常类,你在a中肯定无法捕获到。所以你可以用
\Exception
试一下,为PHP中所有异常类的基类。另外,我把
catch(Error $e)
加大一点,你用这个:
catch(Error $e)
试一下看看到底程序有没有错啊。
另外:
能贴代码就不要贴图啊!!!!!!!