oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
MENANGANI KESALAHAN
Pendahuluan Sebelum terlalu jauh mempelajari/menguasai pemrograman PHP. Pada kesempatan ini, Saya akan memperkenalkan berbagai cara menangani kesalahan, seperti mencegah kesalahan yang bertambah banyak, menghilangkan pesan kesalahan, dan juga cara mencari kesalahan. Suatu kesalahan seringkali menyebabkan browser menampilkan pesan kesalahan yang akan membingunkan pemakai. Jadi alangkah baiknya kalau kesalahan-kesalahan yang dibangkitkan oleh PHP tidak tertampil di browser dan sebagai penggantinya Anda bisa mengatur sendiri pesan yang hendak disampaikan ke pemakai. Pesan kesalahan yang diberikan oleh PHP terkadang mengandung path berkas atau nama tabel data yang seharusnya bersifat rahasia (tidak boleh diketahui oleh pemakai). Selain itu Anda juga dapat mengatur agar kalau sesuatu fungsi menghasilkan nilai False, maka pernyataan-pernyataan tertentu tidak dijalankan sehingga tidak menyebabkan kesalahan-kesalahan yang bersifat merambat.
Macam-macam Kesalahan Secara prinsip, kesalahan dapat dikelompokkan menjadi tiga macam, yaitu: 1. Kesalahan kaidah (sintax error), 2. Kesalahan semantik, dan 3. Kesalahan nalar.
Kesalahan Kaidah Kesalahan kaidah disebabkan oleh adanya kesalahan dalam menuliskan kaidah perintah. Sebagai contoh, skrip berikut akan membuat PHP menampilkan kesalahan sebagaimana diperlihatkan Gambar 1.
Serdiwansyah Nur Aisyah
[email protected]
1
oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
Gambar 1 Kesalahan karena salah kaidah
Penulisan: $x = ($x + 6 * 7; Menimbulkan kesalahan, karena tanda (semestingan ditutup dengan tanda). Misalnya: $x = ($x + 6) * 7; Kesalahan seperti itu terdeteksi sewaktu proses pengompilasian (diketahui oleh parser). Note PHP4 sampai PHP versi terbaru akan membuat seluruh kode diperiksa oleh parser terlebih dulu sebelum dijalankan. Prosesnya disebut dengan parsing atau kompilasi. Itulah sebabnya kesalahan kaidah juga disebut kesalahan kompilasi.
Penyebab utama kesalahan kaidah biasanya berupa salah satu dari hal berikut ini: Serdiwansyah Nur Aisyah
[email protected]
2
oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
Salah ketik. Misalnya print ditulis menjadi prin.
Konstruksi tidak lengkap. Misalnya kurang tanda } sebagaimana pada contoh skrip salah2.php.
Kurang tanda titik koma di akhir suatu pernyataan. Contoh: print(“Pemrograman”) print(“PHP”); Tampak bahwa print pertama tidak diakhiri dengan titik koma.
Suatu literal string belum diakhiri dengan tanda petik ganda (“). Contoh: print(“PHP); Yang benar adalah: print(“PHP”);
Kesalahan kaidah harus segera dibetulkan supaya kode bisa dijalankan.
Kesalahan Semantik Kesalahan semantik biasanya juga disebut kesalahan sewaktu eksekusi (runtime error). Kesalahan ini berlangsung ketika kode dijalankan. Sebagaimana contoh, perhatikan skrip berikut:
Serdiwansyah Nur Aisyah
[email protected]
3
oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
Secara kaidah, tidak ada yang salah. Namun, jiika Anda memanggil skrip di atas maka akan terjadi kesalahan seperti berikut:
Gambar 2 Kesalahan hasil skrip salah2.php
Kesalahan di atas tak akan terjadi seandainya berkas takada terdapat pada direktori kerja. Tampak bahwa kesalahan pada baris 6 terjadi karena kesalahan pada baris sebelumnya (baris 5). Untuk mengatasi kesalahan merambat seperti itu, Anda bisa menuliskan kode seperti berikut:
Bila Anda mencoba memanggil skrip di atas, Anda akan menjumpai kesalahan yang lebih sedikit dibandingkan dengan contoh sebelumnya.
Serdiwansyah Nur Aisyah
[email protected]
4
oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
Gambar 3 Efek pencegahan kesalahan yang merambat
Agar pesan seperti diatas juga tidak muncul, Anda bisa melakukan penanganan dengan memeriksa berkas takada terlebih dulu, sebagaimana diperlihatkan pada skrip berikut:
Serdiwansyah Nur Aisyah
[email protected]
5
oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
Gambar 4 Pesan kesalahan PHP tidak tertampil
Alternatif lain yaitu dengan menambahkan @ di depan fopen seperti pada skrip berikut:
Tanda @ digunakan untuk menghilangkan pesan yan dihasilkan oleh fopen kalau terjadi suatu kesalahan. Secara lengkap, pernyataan: $fp = @fopen("takada", "r") or die("Berkas takada tidak ditemukan"); dimaksudkan untuk membuka berkas takada. Sekiranya berhasil dibuka, fungsi fopen akan meletakkan pointer ke variabel fp. Namun, kalau fopen gagal membuka berkas takada, maka die akan dijalankan dan skrip berakhir.
Kesalahan Nalar Serdiwansyah Nur Aisyah
[email protected]
6
oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
Kesalahan Nalar merupakan jenis kesalahan yang kadangkala sulit untuk mencari penyebabnya. Kesalahan ini tidak menimbulkan pesan kesalahan, tetapi memberikan hasil yang keliru. Sebagai contoh, Anda bermaksud meghitung pembayaran yang dipotong sebesar 10% terhadap total pembelian. Kode yang Anda tuliskan misalnya sebagai berikut:
Jika Anda panggil skrip di atas, Anda akan memperoleh hasilnya, walau salah. Penyebab kesalahan di atas adalah karena logika perhitungan pembayaran tidak benar. Seharusnya pernyataan: $pembayaran = $pembelian - 10 * $pembelian; ditulis menjadi $pembayaran = $pembelian – 10/100 * $pembelian; Atau $pembayaran = $pembelian – 0.1 * $pembelian; Pada program yang kompleks, kesalahan seperti ini terkadang sulit untuk dideteksi. Untuk mencari penyebab kesalahan seperti itu, biasanya dilakukan dengan menambahkan pernyataan print. Misalnya terdapat skrip seperti berikut:
Serdiwansyah Nur Aisyah
[email protected]
7
oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
Bila diketahui bahwa hasil akhir (gaji bersih) salah, maka Anda bisa menelusuri penyebab kesalahan dengan menambahkan beberapa print. Sebagai contoh, Anda bisa menambahkan sejumlah print pada posisi tertentu seperti berikut:
Seperti pada gambar di atas, pada baris skrip 8 dan 12 merupakan pernyataan-pernyataan print yang ditambahkan.
Serdiwansyah Nur Aisyah
[email protected]
8
oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
Pesan Kesalahan PHP Kalau Anda memperhatikan, pesan kesalahan PHP mempunyai pola seperi berikut: Level kesalahan: pesan_kesalahan nama_berkas baris_kesalahan Level kesalahan menyatakan tingkat kesalahan. Beberapa di antara level pesan kesalahan berupa: Parse error, menyatakan kesalahan kaidah. Pada PHP3, kesalahan kaidah bisa terjadi setelah pernyataan-pernyataan yang benar dieksekusi. Pada PHP4, bila ada kesalahan sintaks, tak satupun pernyataan akan dijalankan. Fatal Error, disebabkan kesalahan semantik yang menyebabkan PHP segera menghentikan eksekusi program. Warning, akan membat kesalahan ditampilkan, tetapi pengeksekusian akan tetap dilakukan. Notice Pesan-pesan kesalahan sesungguhnya dapat diatur agar tidak tampil. Hal ini dapat dikerjakan dengan menggunakan fungsi error_reporting yang mempunyai format pemanggilan sebagai berikut: error_reporting([level]); bila level kesalahan tidak disebutkan, fungsi ini memberikan nilai balik berupa bilangan bulat yang menyatakan level-level kesalahan yang akan ditampikan sekiranya kesalahan terjadi. Adapun argument fungsi ini dapat berupa nilai level pesan kesalahan yang akan ditampilkan sekiranya kesalahan tersebut terjadi. Tabel 1 memperlihatkan nilai pesan kesalahan berserta nama konstantanya. Tabel 1 Level kesalahan
Level Kesalahan 1 2 4 8
Konstanta E_ERROR E_WARNING E_PARSER E_NOTICE
Kesalahan Fatal error Warning Parse error Notice
Note Beberapa kemungkinan nilai untuk mengatur error_reporting dapat dilihat pada PHP manual.
Untuk mematikan semua penampilan pesan kesalahan, Anda bisa memanggil: Serdiwansyah Nur Aisyah
[email protected]
9
oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
error_reporting(0); untuk menghidupkan penampilan semua kesalahan, gunakan: error_reporting(E_ALL); Untuk menampilkan pesan kesalahan yang tergolong sebagai parser error dan warning, Anda bisa memanggil: error_reporting(E_PARSER | E_WARNING); Skrip berikut merupakan pengembangan dari skrip1.php.
Bila skrip dipanggil akan diperoleh hasil kosong. Tak ada peringatan yang ditampilkan (bandingkan dengan hasil pada gambar 1).
Gambar 5 Seluruh pesan kesalahan tidak tertampil
Serdiwansyah Nur Aisyah
[email protected]
10
oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
Note
Pada proses pembuatan skrip, sebaiknya Anda jangan mematikan fasilitas pelaporan kesalahan karena akan menyulitkan Anda sendiri dalam melakukan pencarian kesalahan. Bila Anda ingin mengatur level pesan kesalahan yang akan tertampil untuk semua skrip, Anda bisa mengaturnya melalui direktif error_reporting php.ini
Serdiwansyah Nur Aisyah
[email protected]
11
oneitcommunity.wordpress.com Copyright © 2012 ONE IT Community
Referensi Beberapa buku yang saya pakai sebagai referensi dalam membuat tutorial pembelajaran ini adalah: Kadir, Abdul, Dasar Pemrograman Web Dinamis Menggunakan PHP, Penerbiat Andi, Yogyakarta, 2002
Serdiwansyah Nur Aisyah
[email protected]
12