Mengatasi Error CodeIgniter 3 di XAMPP PHP Modern: E_STRICT, SQLSRV, dan Session
7 Views

Saat menjalankan aplikasi berbasis CodeIgniter 3 (CI3) menggunakan XAMPP dengan versi PHP yang lebih baru, terkadang muncul berbagai error kompatibilitas. Beberapa di antaranya adalah konstanta E_STRICT yang deprecated, fungsi sqlsrv_connect() yang tidak ditemukan, serta kegagalan penyimpanan session.

Artikel ini membahas penyebab dan langkah perbaikannya berdasarkan contoh aplikasi CodeIgniter 3 yang berada di:

C:\xampp\htdocs\nama_project

Catatan: Sesuaikan lokasi folder dengan direktori aplikasi Anda sendiri.

1. Mengatasi E_STRICT Deprecated pada Exceptions.php

Pesan error

Deprecated: Constant E_STRICT is deprecated in
C:\xampp\htdocs\nama_project\system\core\Exceptions.php
on line 76

Penyebab

CodeIgniter 3 versi lama menggunakan konstanta E_STRICT sebagai salah satu kategori pelaporan error PHP. Pada PHP modern, penggunaan konstanta tersebut dapat memunculkan peringatan deprecated.

Langkah perbaikan

Buka file:

C:\xampp\htdocs\nama_project\system\core\Exceptions.php

Cari deklarasi array $levels yang berisi daftar kategori error PHP.

Kode sebelumnya:

public $levels = array(
    E_ERROR             => 'Error',
    E_WARNING           => 'Warning',
    E_PARSE             => 'Parsing Error',
    E_NOTICE            => 'Notice',
    E_CORE_ERROR        => 'Core Error',
    E_CORE_WARNING      => 'Core Warning',
    E_COMPILE_ERROR     => 'Compile Error',
    E_COMPILE_WARNING   => 'Compile Warning',
    E_USER_ERROR        => 'User Error',
    E_USER_WARNING      => 'User Warning',
    E_USER_NOTICE       => 'User Notice',
    E_STRICT            => 'Runtime Notice'
);

Hapus entri E_STRICT, sehingga menjadi:

public $levels = array(
    E_ERROR             => 'Error',
    E_WARNING           => 'Warning',
    E_PARSE             => 'Parsing Error',
    E_NOTICE            => 'Notice',
    E_CORE_ERROR        => 'Core Error',
    E_CORE_WARNING      => 'Core Warning',
    E_COMPILE_ERROR     => 'Compile Error',
    E_COMPILE_WARNING   => 'Compile Warning',
    E_USER_ERROR        => 'User Error',
    E_USER_WARNING      => 'User Warning',
    E_USER_NOTICE       => 'User Notice'
);

Simpan file dan lanjutkan pemeriksaan aplikasi.

Perubahan ini menghilangkan referensi E_STRICT dari array tersebut. Namun, jika ada penggunaan E_STRICT pada file lain, bagian tersebut perlu diperiksa secara terpisah.

2. Mengatasi Call to Undefined Function sqlsrv_connect()

Pesan error

An uncaught Exception was encountered

Type: Error
Message: Call to undefined function sqlsrv_connect()

Filename:
C:\xampp\htdocs\nama_project\system\database\drivers\sqlsrv\sqlsrv_driver.php

Line Number: 145

Penyebab

CodeIgniter mencoba menghubungkan aplikasi ke Microsoft SQL Server, tetapi PHP tidak mengenali fungsi sqlsrv_connect().

Fungsi tersebut disediakan oleh ekstensi Microsoft SQLSRV untuk PHP. Keberadaan driver database SQLSRV di dalam folder CodeIgniter saja tidak cukup; ekstensi PHP juga harus terpasang dan aktif.

Langkah 1: Periksa versi PHP

Buka Command Prompt Windows dan jalankan:

C:\xampp\php\php.exe -v

Kemudian periksa arsitektur dan Thread Safety:

C:\xampp\php\php.exe -i | findstr /I "Architecture Thread Safety Compiler"

Informasi ini diperlukan untuk memilih driver SQLSRV yang sesuai.

Langkah 2: Instal driver SQLSRV

Unduh driver dari dokumentasi resmi Microsoft:

Drivers for PHP for SQL Server atau Gdrive

Pastikan paket yang dipilih sesuai dengan:

  • Versi PHP yang digunakan.

  • Arsitektur PHP, yaitu 32-bit atau 64-bit.

  • Thread Safe (TS) atau Non-Thread Safe (NTS).

  • Versi Microsoft ODBC Driver yang diperlukan.

Salin file DLL SQLSRV yang sesuai ke folder ekstensi PHP XAMPP, biasanya:

C:\xampp\php\ext

Nama file DLL harus mengikuti versi PHP dan paket driver yang dipasang.

Langkah 3: Aktifkan ekstensi

Buka:

C:\xampp\php\php.ini

Tambahkan atau aktifkan konfigurasi sesuai nama DLL yang tersedia. Contohnya, untuk paket yang menyediakan nama ekstensi standar:

extension=php_sqlsrv_84_ts_x64.dll
extension=php_pdo_sqlsrv_84_ts_x64.dll

Jika paket yang digunakan menyediakan DLL dengan nama versi tertentu, gunakan nama DLL yang benar sesuai dokumentasi driver tersebut.

Pastikan juga Microsoft ODBC Driver telah terpasang jika diperlukan oleh versi SQLSRV yang digunakan.

Langkah 4: Verifikasi ekstensi

Jalankan:

C:\xampp\php\php.exe -m | findstr /I "sqlsrv"

Jika berhasil, ekstensi yang aktif akan ditampilkan, misalnya:

pdo_sqlsrv
sqlsrv

Perintah ini memeriksa PHP CLI. Untuk memastikan Apache juga menggunakan ekstensi yang sama, periksa konfigurasi PHP yang dimuat Apache melalui halaman phpinfo() lokal, lalu hapus halaman tersebut setelah selesai digunakan.

Setelah konfigurasi benar, restart Apache melalui XAMPP Control Panel.

3. Mengatasi session.sid_length Deprecated

Pesan error

A PHP Error was encountered

Severity: Deprecated

Message: ini_set(): session.sid_length INI setting is deprecated

Filename: Session/Session.php

Line Number: 424

Penyebab

CodeIgniter 3 lama mengatur panjang session ID menggunakan ini_set('session.sid_length', ...). Pada PHP 8.4 dan versi yang lebih baru, pengaturan ini sudah deprecated.

Langkah 1: Buka Session.php

Buka file:

C:\xampp\htdocs\nama_project\system\libraries\Session\Session.php

Cari fungsi:

protected function _configure_sid_length()

Di dalam fungsi tersebut, cari blok yang membaca session.sid_length dan melakukan pemanggilan ini_set().

Langkah 2: Sesuaikan kode

Pada blok else, gunakan kode berikut:

else
{
    $bits_per_character = (int) ini_get('session.sid_bits_per_character');
    $sid_length         = (int) ini_get('session.sid_length');

    if (($bits = $sid_length * $bits_per_character) < 160)
    {
        // Add enough characters to reach at least 160 bits.
        $sid_length += (int) ceil(
            (160 - $bits) / $bits_per_character
        );

        // Avoid the deprecated runtime setting on PHP 8.4+.
        if (PHP_VERSION_ID < 80400)
        {
            ini_set('session.sid_length', $sid_length);
        }
    }
}

Penting: Gunakan kondisi PHP_VERSION_ID < 80400 jika targetnya adalah PHP 8.4 ke atas. Peringatan deprecated ini berkaitan dengan perubahan pada PHP 8.4, bukan PHP 8.1 seperti yang kadang diasumsikan.

Jika versi PHP Anda lebih lama, periksa versi dan pesan error aktual sebelum mengubah kode.

Jangan menambahkan pemanggilan ini_set() menggunakan variabel $params['sid_length'] di fungsi tersebut jika variabel $params memang tidak didefinisikan di sana.

Perubahan ini ditujukan untuk menghindari pengaturan runtime yang deprecated. Tetap uji pembuatan session dan proses login setelah perubahan dilakukan.

4. Mengatasi mkdir(): Invalid Path

Pesan error

A PHP Error was encountered

Severity: Warning
Message: mkdir(): Invalid path

Filename: drivers/Session_files_driver.php

Line Number: 137

Pesan ini biasanya diikuti oleh:

session_start(): Failed to initialize storage module: user (path: )

Penyebab

CodeIgniter menggunakan driver session berbasis file, tetapi direktori penyimpanan session belum dikonfigurasi dengan benar atau tidak dapat digunakan.

Langkah 1: Periksa konfigurasi session

Buka:

C:\xampp\htdocs\nama_project\application\config\config.php

Cari konfigurasi:

$config['sess_driver'] = 'files';
$config['sess_save_path'] = NULL;

Ubah menjadi:

$config['sess_driver'] = 'files';
$config['sess_save_path'] = 'C:/xampp/tmp';

Dengan konfigurasi ini, CodeIgniter diarahkan untuk menyimpan file session pada direktori C:/xampp/tmp.

Pastikan konfigurasi tersebut tidak didefinisikan ulang oleh file konfigurasi lain.

Langkah 2: Buat folder penyimpanan

Buka Command Prompt dan jalankan:

if not exist C:\xampp\tmp mkdir C:\xampp\tmp

Pastikan folder benar-benar tersedia dan proses Apache memiliki izin untuk membaca serta menulis file di dalamnya.

Langkah 3: Restart Apache

Buka XAMPP Control Panel, kemudian:

  1. Klik Stop pada Apache.

  2. Klik Start kembali.

  3. Buka ulang aplikasi di browser.

  4. Uji login dan navigasi antarhalaman.

Jika pesan mkdir(): Invalid path masih muncul, periksa nilai akhir $config['sess_save_path'], izin direktori, dan konfigurasi session PHP.

5. Menyembunyikan peringatan deprecated sementara

Selama proses pengujian, peringatan deprecated dapat disembunyikan agar tidak mengganggu tampilan aplikasi.

Buka file index.php pada direktori utama proyek dan cari konfigurasi error_reporting().

Untuk lingkungan pengembangan, contoh konfigurasi sementara:

error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED);

Jangan membuat deklarasi baru secara sembarangan jika error_reporting() sudah diatur pada bagian lain. Sesuaikan deklarasi yang sudah ada.

Pengaturan ini hanya menyembunyikan kategori peringatan deprecated. Pengaturan tersebut tidak memperbaiki kode yang sudah usang dan tidak akan mengatasi error fatal seperti sqlsrv_connect() yang tidak ditemukan.

Pada lingkungan produksi, tetap aktifkan pencatatan error yang sesuai agar masalah aplikasi dapat didiagnosis.

6. Restart dan uji aplikasi

Setelah semua perubahan selesai, restart Apache melalui XAMPP Control Panel.

Lakukan pengujian berikut:

  • Halaman utama aplikasi dapat dibuka.
  • Tidak ada peringatan E_STRICT pada Exceptions.php.
  • Ekstensi SQLSRV aktif dan koneksi SQL Server berhasil.
  • Session dapat dibuat tanpa mkdir(): Invalid path.
  • Login, logout, dan navigasi antarhalaman berfungsi normal.
  • Log PHP dan CodeIgniter tidak menunjukkan error baru.

7. Saran untuk kompatibilitas jangka panjang

Perbaikan langsung pada file system CodeIgniter dapat membantu aplikasi lama berjalan, tetapi perubahan tersebut perlu dicatat karena bisa tertimpa saat framework diperbarui.

Untuk aplikasi produksi, lakukan langkah berikut:

  1. Catat versi PHP dan CodeIgniter yang digunakan.

  2. Periksa kompatibilitas versi tersebut terhadap dokumentasi resmi.

  3. Gunakan versi driver SQLSRV yang sesuai dengan PHP.

  4. Uji seluruh fungsi aplikasi di lingkungan pengujian sebelum menerapkan perubahan ke produksi.

  5. Pertimbangkan pembaruan ke CodeIgniter 3 versi terakhir yang tersedia, dengan tetap menguji kompatibilitas kode aplikasi.

Untuk aplikasi industri seperti AMR yang bergantung pada database SQL Server dan proses operasional, hindari perubahan besar langsung pada server produksi. Lakukan backup terlebih dahulu dan pastikan fungsi koneksi database, session, login, serta monitoring tetap berjalan.

Kesimpulan

Error CodeIgniter 3 pada XAMPP dengan PHP modern tidak selalu disebabkan oleh satu masalah. Peringatan deprecated pada E_STRICT dan session.sid_length berkaitan dengan kompatibilitas framework, sedangkan sqlsrv_connect() yang tidak ditemukan berkaitan dengan ekstensi PHP SQLSRV. Sementara itu, mkdir(): Invalid path menunjukkan masalah pada konfigurasi direktori session.

Dengan memeriksa versi PHP, mengaktifkan ekstensi database yang sesuai, memperbaiki konfigurasi session, dan menguji ulang aplikasi, masalah dapat ditangani secara bertahap tanpa perlu merombak seluruh struktur proyek.



Jika cara diatas masih belum berhasil coba anda gunakan folder modifikasi ini cari file CodeIgniter-3.4.5 Download dan sesuaikan dengan project anda

Komentar (0)

  • Belum ada komentar. Jadikan yang pertama!

Login untuk menulis komentar.