【问题标题】:CodeIgniter CI_Exceptions::show_exception error after updating to PHP 7更新到 PHP 7 后 CodeIgniter CI_Exceptions::show_exception 错误
【发布时间】:2016-08-27 05:42:10
【问题描述】:

我使用的是 CodeIgniter 3.0.0 和 PHP 5.6。

昨天我更新到 PHP 7 并开始出现以下错误:-

Uncaught TypeError: Argument 1 passed to CI_Exceptions::show_exception() must be
 an instance of Exception, instance of Error given, called in /my/file/path/app/system/core/Common.php on line 658 and defined in /my/file/path/hgx_portal/app/system/core/Exceptions.php:190
Stack trace:
#0 /my/file/path/hgx_portal/app/system/core/Common.php(658): CI_Exceptions->show_exception(Object
(Error))
#1 [internal function]: _exception_handler(Object(Error))
#2 {main}
  thrown in /my/file/path/hgx_portal/app/system/core/Exceptions.phpon line 190

【问题讨论】:

  • 升级到 Codeigniter 3.06。如果您仍然遇到错误,请在 codeigniter.com 论坛上发帖。
  • 实际上我无法升级到 CI 3.06。我想我将不得不回滚到 PHP 5.6
  • CI 3.0 已有一年多的历史,因此鼓励您在有能力时进行升级。
  • 好的,感谢您的建议。我会这样做

标签: php codeigniter codeigniter-3 php-7


【解决方案1】:

这是 CodeIgniter 3.0.0 中的一个已知问题,请参阅下面的 github 问题 herechangelog

修复了一个错误 (#4137) - :doc:Error Handling <general/errors> 在 PHP 7 下新的错误异常中断。

这是因为在 PHP 7 中 set_exception_handler() changed behavior

实现注册的异常处理程序的代码 使用 Exception 类型声明的 set_exception_handler() 将 抛出 Error 对象时导致致命错误。

如果处理程序需要同时在 PHP 5 和 7 上工作,您应该删除 处理程序的类型声明,而正在执行的代码 迁移到仅在 PHP 7 上工作可以简单地替换 Exception 类型声明改为 Throwable。

<?php
// PHP 5 era code that will break.
function handler(Exception $e) { ... }
set_exception_handler('handler');

// PHP 5 and 7 compatible.
function handler($e) { ... }

// PHP 7 only.
function handler(Throwable $e) { ... }
?>

升级到 3.0.2 之后的任何版本都可以解决您的问题。

【讨论】:

  • 您为什么要链接到已关闭的问题?
  • 对不起,我还应该指出该问题仅在 3.0.2 中得到解决,正如上面的问题明确指出他们正在运行 3.0.0。
  • 还有 CI 3.00 在第一个 PHP 7 alpha 发布前几个月发布的小细节。
【解决方案2】:

此错误是由 PHP 7 引起的(在 set_exception_handler 函数中抛出 Error 而不是 Exception

如果您无法升级 CodeIgniter 系统文件夹,您可以在190 行更改文件system/core/Exceptions.php

public function show_exception(Exception $exception)

public function show_exception($exception)

【讨论】:

    猜你喜欢
    • 2017-10-06
    • 2016-08-28
    • 2019-01-25
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2015-12-17
    • 1970-01-01
    相关资源
    最近更新 更多