禁止php 报错怎么做,php – 禁用Laravel错误处理程序

不是没有严重违反框架的原则(我会告诉你如何做下面的,如果你仍然有兴趣)。

有一些事情使得难以完成。很容易解决默认错误和异常处理程序

set_error_handler(null);

set_exception_handler(null);

但是这会给你带来两大障碍。

第一个是Laravel注册一个关机处理程序作为其引导的一部分,这个关闭功能将查找最后一个错误,如果是一个致命的错误,手动调用异常处理代码。有no easy way to un-register a shutdown function。

第二个是,主Laravel应用程序处理程序看起来像这样

#File: vendor/laravel/framework/src/Illuminate/Foundation/Application.php

public function handle(SymfonyRequest $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)

{

try

{

$this->refreshRequest($request = Request::createFromBase($request));

$this->boot();

return $this->dispatch($request);

}

catch (\Exception $e)

{

if ($this->runningUnitTests()) throw $e;

return $this['exception']->handleException($e);

}

}

那就是 – 如果应用程序代码抛出一个异常,Laravel在这里捕获它,并手动调用异常的handleException方法(触发标准的Laravel异常处理)。没有办法让PHP处理在您的应用程序中发生的致命异常,Laravel阻止了从未发生过的事情。

我告诉你如何做你想要的部分

所有这一切意味着我们需要用我们自己的Laravel应用程序来代替。在bootstrap / start.php中,有以下行

#File: bootstrap/start.php

$app = new Illuminate\Foundation\Application;

将其替换为以下内容

ini_set('display_errors','1');

class MyApplication extends Illuminate\Foundation\Application

{

function startExceptionHandling()

{

//do nothing

}

public function handle(Symfony\Component\HttpFoundation\Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)

{

$this->refreshRequest($request = Request::createFromBase($request));

$this->boot();

return $this->dispatch($request);

}

}

$app = new MyApplication;

我们正在做的第一件事是将PHP的显示错误ini设置为1.这样可以确保错误输出到浏览器。

接下来,我们正在定义一个扩展真实应用程序类的新应用程序类。

最后,我们用我们的类实例化的对象来替换真正的Laravel $ app对象。

在我们的应用程序类本身,我们空白startExceptionHandling。这样可以防止Laravel设置自定义异常,错误和关闭回调。我们还定义了从try / catch中删除应用程序启动/调度的句柄。这是该过程中最脆弱的部分,根据您的Laravel版本可能会有所不同。

最终警告

如果手柄方法在未来的版本Laravel中发生变化,这将会破裂。

如果自定义包依赖于添加自定义异常处理程序,它们可能会中断。

我建议远离这一切,除了临时调试技术之外。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值