【发布时间】:2017-12-02 01:17:05
【问题描述】:
我想在生产环境中完全禁用错误报告,因为我们有一些非常旧的代码仍然需要修复,但现在可以正常工作(是的,我也不喜欢它)。我们无法在几天内解决所有问题,因此我们需要像往常一样抑制警告和异常。
真正的问题是它已经在一个简单的惰性 bug 上抛出异常(因为没有定义 var)
if(!$var) {
// do whatever
}
试过
APP_DEBUG=false
APP_LOG_LEVEL=紧急情况
display_errors(false);
set_error_handler(null);
set_exception_handler(null);
但它仍然显示ErrorException
未定义变量:script_name_vars_def
编辑:代码是这样工作的
web.php
Route::any('/someroute', 'somecontroller@controllerFunc');
somecontroller.php
public controllerFunc() {
ob_start();
require '/old_index.php';
$html = ob_get_clean();
return response($html);
}
这样我们就可以使用 Laravel 路由,而不必立即重写旧代码。
我知道我可以很容易地修复这个警告,但是这些错误还有很多很多,我们现在需要使用 Laravel 路由。稍后解决问题。
想法
- 在
$dontReport中使用一些通配符。 - 在正确的位置使用
@抑制 - 可以http://php.net/manual/en/scream.examples-simple.php
编辑以说明中间件在哪些步骤之后不起作用
1) 创建中间件
php artisan make:middleware SuppressExceptions
2) 写出来
SuppressExceptions.php
public function handle($request, Closure $next)
{
error_reporting(0);
return $next($request);
}
3) 注册
laravel/app/Http/Kernel.php
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\SuppressExceptions::class,
],
【问题讨论】:
-
你试过
APP_DEBUG=false吗? -
是的,我的问题打错了,抱歉。我再次启用它来复制和粘贴警告:)
-
好吧,如果你设置 APP_DEBUG=false 并且它仍然显示包含所有信息的错误页面,请考虑清除缓存。如果发生错误,则无法抑制错误页面,除非您使用 try/catch 覆盖所有功能并可能重定向
-
不,那么它只显示
Whoops, looks like something went wrong. -
很抱歉,直到星期一我才能访问代码 :)
标签: php laravel laravel-5 laravel-5.3 laravel-5.4