更新到PHP 7后,CodeIgniter CI_Exceptions :: show_exception错误

时间:2016-05-02 12:43:43

标签: php codeigniter codeigniter-3 php-7

我使用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

2 个答案:

答案 0 :(得分:9)

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

  

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

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

  

实现注册的异常处理程序的代码   set_exception_handler()使用Exception的类型声明   抛出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之外的任何内容都可以解决您的问题。

答案 1 :(得分:0)

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

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

public function show_exception(Exception $exception)

收件人

public function show_exception($exception)