Senin, 09 Mei 2011

ERROR HANDLING

ERROR HANDLING

1. Abstraksi

Error Handling adalah salah satu penanganan kesalahan (error) pada berbagai macam keadaan dalam pemrograman. Dengan adanya error handling ini maka setiap ada kesalahan , maka eksekusi program tidak akan dihentikan secara tiba-tiba, tetapi akan diteruskan ke baris program yang terdapat script penanganan kesalahan.

Dengan adanya Error Handling ini maka program akan semakin user friendly bagi penggunanya, dan akan mengatasi kesulitan bagi para programmer apabila ingin mendefinisikan suatu kejadian yang tidak diinginkan dieksekusi.

2. Pendahuluan

Pada saat membuat sebuah aplikasi web, penanganan error (error handling) merupakan hal yang sangat penting. Penanganan error yang standar di PHP sangat sederhana. Error dikirim ke browser berisi pesan error, nama file, baris kode ke berapa tempat terjadinya error. Tanpa penanganan error yang baik, tentunya pada saat terjadi error, error akan tampil di browser dan dilihat oleh semua pengguna. Hal ini bisa menimbulkan ancaman terhadap keamanan website. PHP telah menyediakan function function untuk penanganan error seperti dijelaskan di Error Handling and Logging.

3. Pembahasan

3.1 Penanganan Error Sederhana mengunakan function die()

Function die ( [string $message] ) berfungsi untuk menghentikan eksekusi baris kode berikutnya dan memberi output parameter optional $message. Contoh:

tanpa error handling

$connection = mysql_connect("localhost", "user", "password");

mysql_select_db("test");

$result = mysql_query("select * from nama_table");

while($row = mysql_fetch_array($result)){

echo $row['nama_field'];

}


Tanpa error handling seperti kode php diatas, pada saat tidak bisa melakukan koneksi ke database mysql, maka akan muncul pesan error seperti ini:

mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (2) in /home/ellyxc/public_html/tutorial/error/die.php on line 3

Warning: mysql_select_db() [function.mysql-select-db]: Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (2) in /home/ellyxc/public_html/tutorial/error/die.php on line 4

Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in /home/ellyxc/public_html/tutorial/error/die.php on line 4

Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (2) in /home/ellyxc/public_html/tutorial/error/die.php on line 5

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/ellyxc/public_html/tutorial/error/die.php on line 5

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/ellyxc/public_html/tutorial/error/die.php on line 6

Tentu saja pengguna akan bingung melihat error di atas, dengan function die(), pesan error bisa diminimalisir seperti:


//dengan error handling

$connection = mysql_connect("localhost", "user", "password")

or die('Tidak bisa melalukan koneksi ke database');

mysql_select_db("test");

$result = mysql_query("select * from nama_table");

while($row = mysql_fetch_array($result)){

echo $row['nama_field'];

}


Pada saat tidak bisa melakukan koneksi ke database, kode di atas akan memberi output seperti ini

Tidak bisa melalukan koneksi ke database

3.2 Setting Error Reporting Level

PHP memberi kemampuan untuk menentukan error error apa saja yang ditampilkan menggunakan function error_reporting( [int $level ] ). Parameter $level bisa diisi dengan nilai nilai berikut:

Nilai

Konstanta

Deskripsi

1

E_ERROR

Fatal run-time errors. Error yang tidak bisa dihandel, seperti masalah alokasi memori. Eksekusi skrip berhenti.

2

E_WARNING

Run-time warnings (non-fatal errors). Eksekusi Skrip tidak berhenti.

4

E_PARSE

Compile-time parse errors. Error yang terjadi karena kesalahan penulisan kode php.

8

E_NOTICE

Run-time notices. Error yang mengindikasikan bahwa skrip bisa menimbulkan error yang lain.

256

E_USER_ERROR

Pesan error yang digenerate oleh user. Seperti E_ERROR, tapi digenerate menggunakan function trigger_error().

512

E_USER_WARNING

Pesan error yang digenerate oleh user. Seperti E_WARNING, tapi digenerate menggunakan function trigger_error().

1024

E_USER_NOTICE

Pesan error yang digenerate oleh user. Seperti E_NOTICE, tapi digenerate menggunakan function trigger_error().

2048

E_STRICT

Error yang memberikan sugesti perubahan pada kode Anda untuk memastikan interoperabilitas terbaik dan kompatibilitas kode php Anda.

30719

E_ALL

Menampilkan semua error kecuali E_STRICT.

Contoh penggunaan error_reporting() :


//menampilkan semua error

error_reporting(E_ALL);

//menampilkan semua error termasuk E_STRICT

error_reporting(E_ALL|E_STRICT);

//tidak menampilkan error

error_reporting(0);

3.3 Tidak Menampilkan Error

Dari pada menampilkan error yang tidak dimengerti oleh pengguna, terkadang lebih baik tidak menampilkan error sama sekali, tetapi hanya mencatat error yang terjadi ke dalam sebuah file. Untuk itu bisa gunakan kode di bawah.


error_reporting(E_ALL);

ini_set('display_errors', 'Off');

ini_set('log_errors', 'On');

ini_set('error_log', 'logs/error.log');

$connection = mysql_connect("localhost", "user", "password");

mysql_select_db("test");

$result = mysql_query("select * from nama_table");

while($row = mysql_fetch_array($result)){

echo $row['nama_field'];

}


Untuk tidak menampilkan error digunakan function ini_set ('display_errors', 'Off'); (baris ke-3). Di baris ke-5 untuk menyimpan error yang terjadi ke dalam file "logs/error.log". Pada saat terjadi error, file "logs/error.log" akan berisi data seperti ini :

[21-Nov-2010 11:57:56] PHP Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/var/run/mysql/mysql.sock' (2) in /home/ellyxc/public_html/tutorial/error/die.php on line 6

[21-Nov-2010 11:57:56] PHP Stack trace:

[21-Nov-2010 11:57:56] PHP 1. {main}() /home/ellyxc/public_html/tutorial/error/die.php:0

[21-Nov-2010 11:57:56] PHP 2. mysql_connect() /home/ellyxc/public_html/tutorial/error/die.php:6

Mengambil pilihan untuk tidak menampilkan error bisa membingungkan pengguna. Cara yang lebih baik adalah dengan membawa user ke halaman tertentu, untuk memberi tahu pengguna bahwa sedang terjadi error.


3.4 Membuat Custom Error Handler

Selain menyediakan penanganan error standar, PHP juga memberikan kemampuan untuk membuat sebuah function yang bertugas untuk menangani error yang terjadi yang disebut dengan Custom Error Handler. Sebuah Custom Error Handler memiliki format seperti ini

// error_funciton($error_level,$error_message, $error_file,$error_line,$error_context)

Contoh:

function customError($errorLevel,$errorMsg){

@session_start();

$_SESSION['error_msg'] = $errorMsg;

header("Location: error.php");

exit;

}

set_error_handler("customError");

error_reporting(E_ALL);

$connection = mysql_connect("localhost", "user", "password");

mysql_select_db("test");

$result = mysql_query("select * from nama_table");

while($row = mysql_fetch_array($result)){

echo $row['nama_field'];

}

Baris 2-7 merupakan contoh Custom Error Handler, pesan error disimpan ke dalam sebuah session, dan pengguna dibawa ke halaman "error.php" pada saat terjadi error. Di baris 8 digunakan function set_error_handler($handler); untuk menentukan Custom Error Handler yang digunakan pada saat terjadi error.


3.5 Men-generate atau Men-trigger Error

PHP memberikan kemampuan untuk mengenerate custom error message menggunakan function trigger_error(). Function ini bisa digunakan misalnya pada saat pengguna memasukkan karakter karakter ilegal, seperti memasukkan tag html. Contoh:

$input = "hurup tebal";

if(preg_match('/<(.+)>/', $input)){

trigger_error("anda tidak boleh memasukkan html tag");

}

Menggunakan trigger_error bersama Custom Error Handler

function customError($errorLevel,$errorMsg){

@session_start();

$_SESSION['error_msg'] = $errorMsg;

header("Location: error.php");

exit;

}

set_error_handler("customError", E_USER_WARNING);

$input = "hurup tebal";

if(preg_match('/<(.+)>/', $input)){

trigger_error("anda tidak boleh memasukkan html tag", E_USER_WARNING);

}

3.6 Mengirim Email Saat Terjadi Error

Bagi para programmer atau webmaster, mendapatkan email saat terjadi error sangat membantu untuk mengambil tindakan yang cepat dan bila diperlukan untuk memperbaiki kode yang ada. Untuk itu bisa menggunakan kode seperti:

function customError($errorLevel,$errorMsg){

echo "Error: [$errorLevel] $errstr
";

echo "Admin terlah diberi tahu";

error_log("Error: [$errorLevel] $errorMsg",1,

"admin@example.com","From: error@example.com");

}

set_error_handler("customError", E_USER_WARNING);

$input = "hurup tebal";

if(preg_match('/<(.+)>/', $input)){

trigger_error("anda tidak boleh memasukkan html tag", E_USER_WARNING);

}

4. Penutup

4.1 Kesimpulan

Error Handling sangat lah dibutuhkan oleh setiap program agar setiap terjadi kesalahan memiliki suatu penanganan khusus sehingga program tersebut menjadi user friendly, karena eksekusi program tidak akan dihentikan apabila terjadi suatu kesalahan melainkan eksekusi program akan diteruskan ke blok program error handling tersebut.

4.2 Saran

Bagi setiap programmer sebaiknya mempertimbangkan suatu blok error handling sebelum mulai membuat program. Karena hal ini sangat vital bagi proses eksekusi program tersebut. Jika programmer melupakan error handling maka dapat dipastikan bahwa program yang diciptakan tidak akan berjalan dengan sempurna, atau dengan kata lain program tersebut kurang dapat dijalankan dengan sempurna

Demikian lah pembahasan saya mengenai Error Handling dalam rangka menyelesaikan tugas Interaksi Manusia & Komputer (IMK) jurusan Sistem Komputer Universitas Gunadarma. Diharapkan pembahasan yang sedikit ini dapat dijadikan suatu pembelajaran dan bermanfaat bagi yang membacanya.

Sumber :

http://searchsoftwarequality.techtarget.com/definition/error-handling

http://www.php.net/manual/en/errorfunc.constants.php

http://www.w3schools.com/php/php_error.asp