Wednesday, March 26, 2008

Install PHP Extension untuk Zend Debugger

Biasanya kalo gue nge-debug PHP-code yang gue tulis, gue pasti kalo gak pake fungsi print_f() ya pake echo. Tapi sejak pake Zend Studio for Eclipse gue ngerasa sudah saatnya gue cobain pake Zend Debugger. Itung-itung biar kelihatan lebih professional, dan tentunya disiplin diri sedikit. Dan juga gue cukup kenal dengan Debugger Panel-nya Eclipse waktu memprogram aplikasi Java.

Hal lain yang tentunya gue kesengsem banget pengen cobain, ya... PHPUnit-nya jek. Mantep banget kan tuh, gak perlu repot-repot lagi Unit-Testing di browser. Bisa lebih semangat ber-Test Driven Development ria. Bikin test filenya atau jalanin testnya juga tidak sulit, tinggal ceklak-ceklik beres.

Tapi! Tidak disangka-sangka, baru klik Run > Debug as > PHP Script lah langsung error Call to undefined function mysql_connect(). Ternyata tidak semua PHP Extension merupakan bawaannya Zend Debugger. Beberapa kudu install sendiri. Setelah ubek-ubek google coba ini itu. Akhirnya nyala juga. Nah supaya yang lain gak punya masalah juga seperti gue, gue pengen bagi-bagi pengalaman gue install PHP-Extension buat Zend Debugger.

Referensi gue waktu cari-cari di google saat itu bisa dilihat disini, disini, disini dan disini. Dari 4 sumber itu, sebenarnya semuanya tidak membuahkan hasil, tapi setidaknya sudah menunjukkan jalan, musti utak-atik dimana. Yang terakhir adalah forum dari Zend sendiri. Dan gue sempet posting saking desperate-nya. Tapi sampai gue ketemu sendiri titik masalahnya dimana, tidak ada yang response pertanyaan gue.

Sebelum gue mulai, mungkin ada baiknya kalau kalian tahu bahwa ada 2 macam Zend Debugger. Yang satu untuk IDE, kita bilangnya Client Debugger, dan yang satu lagi untuk Web Server, atau kita bilangnya Server Debugger. Yang akan gue bahas kali ini sebenarnya tentang Client Debugger, tapi Server Debugger bakal gue singgung juga sedikit.

Contoh yang gue pakai buat Tutorial ini semuanya menggunakan Zend Studio, tapi gue yakin PDT juga sama saja. Jadi tunggu apalagi, download PDT All in one package disini. Distribusi ini sudah dilengkapi dengan Zend Debugger Client.

Untuk mencoba paket yang sudah ada Server Debuggernya, ada baiknya kalian install Zend Core. Tidak usah takut, meskipun trial, Zend Core tidak akan expired, karena untuk Zend Core, Zend menjual support, bukan softwarenya.

So gue langsung ajah, gue gak akan ngebahas installnya, karena ini bukan tutorial untuk install software tapi untuk install PHP Extension di Zend Client Debugger.

Bikin PHP Project baru, lalu buat satu php file, kita beri nama index.php. Dengan file ini kita coba untuk membuka koneksi ke mysql. Gue anggap kalian semua sudah install mysql server, dan punya test database. So kita tulis script untuk connect ke mysql di index.php yang kita buat tadi:
<?php

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Not connected : ' . mysql_error());
}

// connect to database
$db_selected = mysql_select_db('database', $link);
if (!$db_selected) {
    die ('Can\'t use foo : ' . mysql_error());
}

?>
So sekarang coba Run > Run As > PHP Script. Hasilnya pasti bakal kayak gini:
Fatal error:  Call to undefined function mysql_connect() in K:\root\test\index.php on line 3 


Ok untuk lebih yakin bahwa Zend Debugger tidak di install MySQL extension, mari kita coba bikin phpinfo(). Kita ganti script di index.php yang tadi dengan phpinfo(). Lalu coba lagi Run > Run as > PHP Script. Sekarang kalian bisa lihat halaman phpinfo, dan kalau kalian cari disitu, tidak akan ketemu informasi tentang mysql. Ada beberapa extension juga yang tidak ada disitu. Dan dalam kesempatan ini kita akan coba install extension tersebut.

Dari tutorial-tutorial referensi gue diatas, semuanya kasih tahu bahwa gue harus buka plugin Zend Debugger untuk eclipse. Tergantung installasi plugin tersebut dapat ditemukan di
[install_dir]\plugins\org.zend.php.debug.debugger.[operating_system]_5.2.12.v20071210\resources\

Di dalam situ ada 2 direktori, yang satu php4 yang satu php5. Buka yang php5 isinya kira-kira begini:

Kalau kalian buka php.ini nya pakai text editor, isinya cuma ini:
zend_extension_ts=.\ZendDebugger.dll

Mulai dari sini, menurut referensi gue, gue bisa ambil kesimpulan ada 2 kemungkinan:
  1. Menggunakan Zend Server Debugger extension
  2. Mengcopy extension file ke plugin directory
Gue sekarang mau coba bahas 2 kemungkinan itu dan masalah-masalah yang sempat gue hadapi saat itu.

Menggunakan Zend Server Debugger extension
Karena server kita sudah disetting semuanya untuk koneksi ke mysql, extension yang diperlukan juga sudah di install, apalagi disana juga sudah diinstall ZendDebugger. Kenapa juga tidak dipakai juga untuk Client Debugging.

Untuk menggunakan Zend Server Debugger extension, caranya mudah saja. Di Eclipse, buka Window > Preferences... > PHP > PHP Executables. Disana klick Add. Terus isi kira-kira seperti ini. Ingat ini settingan gue. Address path kalian bisa lain.

Setelah klickt Finish, set default setting yang loe tadi bikin, kira-kira seperti ini:

Sekarang coba lagi Run as > PHP Script index.php-nya. Kali ini pasti berhasil. Beberapa dari kalian pasti ada yang mengalami keluarnya pop-up ini:

Ini disebabkan karena Plugin zend debugger Eclipse dibuat untuk php versi 5.2.5 dan Zend Core memiliki php versi 5.2.4. Apabila diantara kalian Web servernya menggunakan versi yang sama dengan Eclipse Zend Debugger, maka pop-up warning tersebut tidak akan muncul.

Cara ini sebenarnya sangat tidak disarankan, karena bisa menimbulkan "hal-hal yang tidak diinginkan" lebih jelasnya apa gue sendiri saat ini tidak tahu, tapi yang pasti Zend tidak akan extra membuat 2 Debugger apabila toh semuanya sama saja.

Maka dari itu sangat disarankan cara yang kedua.

Mengcopy extension file ke plugin directory
Copy directory ext dari directory php - untuk zend core ada di [install_dir]/lib/phpext - ke Zend Debugger Plugin. copy juga libmysql.dll dan lib .dll yang lainnya yang dibutuhkan. Kira-kira akhirnya seperti ini:
INGAT: Perhatikan versi data yang ada di directory ext, bandingkan dengan angka yang tertera di php5ts.dll (PHP Interpreter). Pada contoh gambar diatas php5ts.dll memiliki versi 5.2.5.5. Apabila extension library yang ada di directory ext tidak memiliki versi yang sama, maka dijamin tidak akan berhasil. Informasi ini tidak dihimbau di referensi yang gue baca. Dan sempat bikin gue bingung waktu itu, kenapa kok tidak nyala-nyala extension-nya. Selanjutnya tinggal menyesuaikan php.ini yang ada di plugin. Gue kasih contoh bagaimana konfigurasi php.ini gue.
zend_extension_ts=.\ZendDebugger.dll
extension_dir=".\ext"
extension=php_soap.dll
extension=php_sockets.dll
extension=php_mysql.dll
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_zip.dll
extension=php_xsl.dll
extension=php_xmlrpc.dll
extension=php_mhash.dll
extension=php_mcrypt.dll
extension=php_mbstring.dll
extension=php_calendar.dll
extension=php_bz2.dll
extension=php_bcmath.dll
extension=php_curl.dll
extension=php_exif.dll
extension=php_ftp.dll
extension=php_gd.dll
extension=php_fdf.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_imap.dll
extension=php_ldap.dll
extension=php_mime_magic.dll
extension=php_ming.dll
extension=php_mysqli.dll
extension=php_openssl.dll
extension=php_pdo_odbc.dll
extension=php_pdo_sqlite.dll
extension=php_pgsql.dll
extension=php_sqlite.dll
extension=php_tidy.dll

Beberapa orang mungkin lebih sedikit, beberapa lebih banyak, tapi yang penting cuma 3 yang diatas:
  • Address Path dari zend_extension_ts
  • Address Path dari extension_dir
  • extension apa yang mau di install
Setelah semua selesai. Silahkan dicoba lagi run index.php scriptnya dan check phpinfo() apakah kali ini extension tersebut terinstall dengan benar. Menurut gue sih mestinya sekarang sudah jalan. Selamat mencoba.

3 comments:

Rudi said...

mas tanya donk, kalo mau bikinscript textbox otomatis terisi kalo suatu combox (dipilih) di klik. tapi bikinya pake kode php bukan pake ajax, bisa nggak sih ya? tolong bantu ya mas. rudi

sandalian said...

Mumpung sedang membahas Zend Studio fo Eclipse, saya mo nanya nih. Kayaknya ZS for Eclipse gak ada fitur line wrapping untuk baris yang panjang ya?

Saya ubek-ubek gak ketemu :(

Arthur Purnama said...

kayaknya gak ada deh itu.. ada yang bikin projectnya di google code, tapi ga dilanjutin.. ga banyak yang pake kayaknya.. kenapa gak di indent ajah sendiri yang rapi mas? ^^