prod 环境中未捕获 500 错误
500 errors are not caught in prod environment
我在 symfony 5.3.10 应用程序中遇到了一个奇怪的问题,我无法解决这个问题。
如果我触发 500 错误,像这样:
/**
* @Route("/", name="pvr_index", methods={"GET"})
*/
public function index(): Response
{
echo $a;
未定义 $a
的地方,在开发环境中我得到一个很好的错误页面。
我希望在产品中我会得到一个 不太好 错误页面,它只是告诉我我有一个 500 错误。直到前一段时间,某些东西 发生了变化,但我不知道是什么。
现在我没有得到任何错误,甚至在 symfony 服务器控制台中也没有,并且脚本执行将像什么都没发生一样继续进行。
我试过的:
在 try/catch:
中添加假定的异常
try {
echo $a;
}
catch (\Exception $e)
{
dump($e);
die();
}
没有任何反应,没有触发捕获。
创建异常侦听器:
在 services.yaml
我有:
exception_listener:
class: App\Event\ExceptionListener
tags:
- { name: kernel.event_listener, event: kernel.exception }
在 ExceptionListener.php
我有:
class ExceptionListener
{
public function __construct(Environment $engine) {
$this->engine = $engine;
}
public function onKernelException(ExceptionEvent $event)
{
dd($event->getThrowable()->getMessage());
}
}
仍然没有任何反应,没有触发侦听器。
在开发环境中一切正常,问题只出现在生产环境中。
查看 phpinfo();
页面,我看到启用了错误报告,所以我认为问题出在 symfony 配置上。
我正在使用 php 7.4 并且无法真正访问 php.ini 文件
这不是 Symfony 错误(也不是 PHP 错误)。
在 PHP 7.4 上,尝试输出未定义的变量只会引发 通知,而不是致命错误(代码 500)。除非您将服务器配置为记录或输出通知,否则通知会被引擎默默地吞没,您会得到类似的内容:
Notice: Undefined variable: a in file xxx.php line Y
A try
/catch
不会为您做任何事情,因为 不会抛出任何异常供您捕获 。
Even on PHP 8 or 8.1,这只会引发 警告,例如:
Warning: Undefined variable $a
在版本<8和>=8下可以看到结果here。
我在 symfony 5.3.10 应用程序中遇到了一个奇怪的问题,我无法解决这个问题。
如果我触发 500 错误,像这样:
/**
* @Route("/", name="pvr_index", methods={"GET"})
*/
public function index(): Response
{
echo $a;
未定义 $a
的地方,在开发环境中我得到一个很好的错误页面。
我希望在产品中我会得到一个 不太好 错误页面,它只是告诉我我有一个 500 错误。直到前一段时间,某些东西 发生了变化,但我不知道是什么。
现在我没有得到任何错误,甚至在 symfony 服务器控制台中也没有,并且脚本执行将像什么都没发生一样继续进行。
我试过的:
在 try/catch:
中添加假定的异常try {
echo $a;
}
catch (\Exception $e)
{
dump($e);
die();
}
没有任何反应,没有触发捕获。
创建异常侦听器:
在 services.yaml
我有:
exception_listener:
class: App\Event\ExceptionListener
tags:
- { name: kernel.event_listener, event: kernel.exception }
在 ExceptionListener.php
我有:
class ExceptionListener
{
public function __construct(Environment $engine) {
$this->engine = $engine;
}
public function onKernelException(ExceptionEvent $event)
{
dd($event->getThrowable()->getMessage());
}
}
仍然没有任何反应,没有触发侦听器。
在开发环境中一切正常,问题只出现在生产环境中。
查看 phpinfo();
页面,我看到启用了错误报告,所以我认为问题出在 symfony 配置上。
我正在使用 php 7.4 并且无法真正访问 php.ini 文件
这不是 Symfony 错误(也不是 PHP 错误)。
在 PHP 7.4 上,尝试输出未定义的变量只会引发 通知,而不是致命错误(代码 500)。除非您将服务器配置为记录或输出通知,否则通知会被引擎默默地吞没,您会得到类似的内容:
Notice: Undefined variable: a in file xxx.php line Y
A try
/catch
不会为您做任何事情,因为 不会抛出任何异常供您捕获 。
Even on PHP 8 or 8.1,这只会引发 警告,例如:
Warning: Undefined variable $a
在版本<8和>=8下可以看到结果here。