web-dev-qa-db-ja.com

PHP 7に更新した後のCodeIgniterCI_Exceptions :: show_exceptionエラー

私はCodeIgniter3.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
5
Jatin Dhoot

これはCodeIgniter3.0.0の既知の問題です。以下のgithubの問題 ここ および 変更ログ を参照してください。

バグを修正しました(#4137)-:doc:Error Handling <general/errors> PHP 7の下での新しいエラー例外の中断。

これは、set_exception_handler() 動作の変更 in PHP 7。

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以降にアップグレードすると、問題が修正されます。

9
Garry Welding

このエラーは、PHP 7(set_exception_handler関数でErrorの代わりにExceptionをスローします)が原因で発生します。

CodeIgniterシステムフォルダーをアップグレードできない場合は、system/core/Exceptions.php行のファイル190を変更するだけです。

public function show_exception(Exception $exception)

public function show_exception($exception)
3
Silvio Delgado