
codeigniter 3は、現在のPHPバージョンからPHP 8への移行に対応しているのでしょうか?
この日、私はPHP 8をインストールし、CodeIgniter3アプリを作成してみました。
ほぼほぼCI 3は、PHP 8.0に対応し問題なく動くのですが、PHP 8.0には対応していない問題が発生しました。
1)CI 3のフラッシュデータは、更新時やリダイレクト利用時に成功や失敗とアラートを表示させたりし、ベージ遷移時にはそのアラートは表示されず消えるのが本来の利用方法です。がPHP8の環境下だとページを遷移してもアラートは表示され消える事がない事象が発生しました。これはPHP8の環境下だと発生する問題です。
いつくかのサイトを巡回し解読できましたので記載しておきます。
※今回はCi3のsystemファイル(コアファイル)を修正しますので、自己判断にてご利用して下さい。
system\libraries\SessionSession.php 418行目から423行目まで。
// Hacky, but 'old' will (implicitly) always be less than time() ;)
// 「new」チェックの上に移動させないでください。
elseif ($value < $current_time)
{
unset($_SESSION[$key], $_SESSION['__ci_vars'][$key]);
}
この記載部分
本来の時間とフラッシュの時間を比較して、その時間とフラッシュの時間が一致しているかどうかを確認しています。
PHP バージョン 7.4 以降では、"Old" == <Numeric> が True となり、"Old" < 数値ではないが変更可能なもの> が True となりますが、PHP 8 では 文字列を文字列に変換する際に問題が発生します。
https://wiki.php.net/rfc/string_to_number_comparison
そのため、以下のような方法で修正
// Hacky, but 'old' will (implicitly) always be less than time() ;)
// 「new」チェックの上に移動させないでください。
elseif ($value === 'old' || $value < $current_time)
{
unset($_SESSION[$key], $_SESSION['__ci_vars'][$key]);
]
※今回はCi3のsystemファイル(コアファイル)を修正しますので、自己判断にてご利用して下さい。