Saturday, May 05, 2012

selembar kode eksplorasi

assalamu'alaykum

kembali punya ide, tapi kali ini tentang koding. sebenernya sih ga mau dan ga biasa posting yg beginian, tapi karena ga ada ide lain gapapa jugalah ya, siapa tau ada yg butuh nanti, termasuk saya juga :). jadi maaf klo bahasanya agak berantakan haha.

jadi selama sebulan terakhir saya mencoba beberapa framework PHP untuk coba dikoneksikan dengan DBMS yg "agak ga populer" di kalangan praktisi, yaitu oracle. setelah berhasil terkoneksi, saya coba performanya dengan membuat CRUD standar. lingkungan yg saya pakai yaitu windows 7, oracle 11g express (11.2.0), xampplite 1.7.3, code igniter 2.1.0, yii 1.1.10, dan zend 1.11.11 (minimal). berikut langkah-langkah dan hasil ujinya:

1. Instalasi Oracle 11g Express
yg belum punya software-nya, bisa di-download di situs oracle, besarnya sekitar 312 mb. tapi harus punya akun oracle dulu sih. daftar aja, gratis kok. lakukan instalasi seperti biasa, yg penting adalah isi password untuk akun SYSTEM (admin DB) dan jangan sampai lupa :)

2. Konfigurasi Apache HTTP Server
buka file php.ini (biasanya ada di folder "tempat_instalasi/php"), uncomment (hapus karakter ';') pada baris "extension=php_oci8.dll" (untuk ci dan zend) atau pada baris "extension=php_pdo_oci.dll" (untuk yii), untuk mengaktifkan library php oracle connection interface. save php.ini, jalankan (atau restart) apache. jika tidak terjadi error "oci missing" dsb, maka konfigurasi sukses. jika error, maka ada masalah dengan instalasi oracle atau konfigurasi apache-nya

3. Manajemen DB Oracle
kelola DB dengan memakai aplikasi bawaan instalasi oracle, sql*plus. aplikasi ini console-based, jadi kalau mau yg lebih ber-"UI" bisa menggunakan sqldeveloper, bisa di-download di situs oracle juga. oracle juga mempunyai aplikasi bawaan yg web-based yaitu application express (bisa diakses lewat browser di localhost:8080/apex). application express berguna untuk monitoring, maintenance, user management, workspacing, dan wizard untuk membuat aplikasi berbasis DB oracle. di oracle 10g, pengelolaan DB dapat dilakukan juga disini. tapi di oracle 11g tidak bisa, atau saya yg kurang eksplorasi :)

4. Code Igniter
nah sekarang sudah masuk ke tiap framework. untuk ci, ternyata mudah konfigurasinya. di file konfigurasi DB ("application/config/database.php") cukup bagian ini saja yg diganti:

$db['default']['hostname'] = ''; //kosongkan saja
$db['default']['username'] = 'SYSTEM'; //user
$db['default']['password'] = 'oracle'; //password
$db['default']['database'] = ''; //kosongkan saja
$db['default']['dbdriver'] = 'oci8'; //nama driver untuk oracle

setelah itu, buat CRUD standarnya. catatan untuk ci, nama tabel dan kolom yg diambil harus memakai huruf kapital, walau DB yg dibuat tidak memakai huruf kapital (behavior oracle). jika keluar error "$rowcount not defined" dsb, berarti tidak ada masalah dengan koneksi dan fetch datanya. ternyata ini adalah masalah (bug) pada file driver untuk koneksi PHP ke DB oracle. solusinya, ganti kata "$rowcount" menjadi "$this->num_rows" pada file "system/database/drivers/oci8/oci8_result.php". seharusnya sudah tidak error lagi :). untuk versi ci 2.1.0 ternyata terdapat lumayan banyak masalah (sumber: bugtracker ci), jadi jika tidak ingin mengambil resiko, silakan memakai ci 2.0.3, karena lebih stabil (setelah saya coba, langsung bisa dan tidak terjadi error seperti sebelumnya)

5. Yii
untuk yii, konfigurasi DB ("namafolderaplikasi/protected/config/main.php") seperti ini:

 'db'=>array(
     'connectionString' => "oci:dbname=XE;charset=UTF8",
     'username' => 'SYSTEM',
     'password' => 'oracle',
 ),

tetapi ketika mengakses gii untuk membuat kelas model dari DB dengan model generator-nya, maximum execution time of 60 seconds exceeded. jadi ganti dulu di php.ini variabel "max_execution_time" menjadi lebih besar. memang berat resource sekali oracle ini :)

6. Zend
untuk zend, agak sulit untuk meletakkan konfigurasi DB di "namafolderaplikasi/application/configs/application.ini", juga untuk generate kelas model dari DB. jadi saya langsung mencoba di controller, yaitu seperti ini:

 $db = Zend_Db::factory('oracle', array(
       'username' => 'SYSTEM',
       'password' => 'oracleplus',
       'dbname'   => '//localhost/XE'
 ));

jangan lupa, pengaksesan kolom memakai huruf kapital

7. Performa
sebenernya saya ga pakai metode atau aplikasi tes sih, cuma melihat dari sisi waktu load-time aja. dari ketiga framework itu, CI paling cepat, disusul zend, dan yg terakhir yii. perkiraan saya, mungkin karena yii memakai kelas model dan yii memakai PDO (PHP data object) untuk akses koneksinya

oke segitu dulu racauan dari saya, semoga membantu bagi yg mau coba-coba framework PHP dengan oracle

wassalamu'alaykum