CodeIgniter merupakan framework PHP yang kuat dengan footprint yang sangat kecil, dibuat untuk pengembang yang membutuhkan toolkit sederhana dan elegan untuk membuat aplikasi web berfitur lengkap sehingga sampai saat ini pun baik di pemerintah maupun perusahaan swasta masih banyak yang menggunakannya. Namun apakah codeigniter 3 kompatibel dengan PHP versi terbaru yang saat ini ada pada versi PHP 8?
Hari ini saya menginstal PHP 8 dan mencobanya dengan proyek CodeIgniter 3. CI 3 berjalan dengan sukses dengan PHP 8.0 tanpa perubahan apapun itu dan bekerja dengan sangat baik pada awalnya sebelum saya menemukan 2 masalah :
1) saya memiliki Atribut controller class yang tidak dapat dibaca. Atribut menawarkan kemampuan untuk menambahkan informasi metadata terstruktur yang dapat dibaca mesin pada deklarasi dalam kode: Kelas, metode, fungsi, parameter, properti, dan konstanta kelas dapat menjadi target atribut.
2) Ini Lebih serius - Flashdata dalam CI 3 tidak berfungsi atau tidak bisa hilang setelah di refresh atau di redirect. Sebagai contoh saya menampilkan flasdata "Perubahan Anda telah disimpan", flashdata itu tetap ada di setiap pemuatan halaman setelahnya. Untuk kasus ini bisa kita ubah script dalam library session , karena flashdata bagian dari session maka kita bisa melihat scriptnya di \system\libraries\Session\Session.php Lines 418 to 423:
// Hacky, but 'old' will (implicitly) always be less than time() ;)
// DO NOT move this above the 'new' check!
elseif ($value < $current_time)
{
unset($_SESSION[$key], $_SESSION['__ci_vars'][$key]);
}
// DO NOT move this above the 'new' check!
elseif ($value < $current_time)
{
unset($_SESSION[$key], $_SESSION['__ci_vars'][$key]);
}
Logikanya adalah mengizinkan variabel "sementara" untuk menyimpan waktu kedaluwarsa ketika mereka kedaluwarsa dan pesan flash segera kedaluwarsa dan menghindari pemeriksaan ganda. Dalam PHP versi 7.4 dan Di sebelumnya "Old" == <Numeric> akan sama dengan True dan "Old" < nilai numerik apa pun masing-masing akan sama dengan true, dalam PHP 8 perilaku ini sekarang telah diubah. PHP8 Mengubah perilaku dalam membandingkan string dengan angka. https://wiki.php.net/rfc/string_to_number_comparison untuk itu kita bisa ubah logikanya menjadi seperti ini :
// Hacky, but 'old' will (implicitly) always be less than time() ;)
// DO NOT move this above the 'new' check!
elseif ($value === 'old' || $value < $current_time)
{
unset($_SESSION[$key], $_SESSION['__ci_vars'][$key]);
}
// DO NOT move this above the 'new' check!
elseif ($value === 'old' || $value < $current_time)
{
unset($_SESSION[$key], $_SESSION['__ci_vars'][$key]);
}
Alhamdulillah sangat membantu mas
ReplyDeleteMantap sekali, terimakasih..
ReplyDeleteTerimakasih mas.... sangat2 membantu
ReplyDeleteMakasih mas, saya udah bolak balik ngetik codingnya.. Ternyata ini toh masalahnya
ReplyDeleteterima kasih mas, semoga ilmu nya bermanfaat juga buat yang lain, sekali lagi terima kasih mas, muanttapp
ReplyDeletePostingan ini berasal dari https://forum.codeigniter.com/thread-78091.html
ReplyDeleteJeleknya php....
ReplyDelete