Penanganan Error Sederhana mengunakan function die()
Function die([string $message]) berfungsi untuk menghentikan eksekusi baris kode berikutnya dan memberi output parameter optional $message. Contoh:
- <?php
- //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:
- <?php
- //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
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. |
tabel selengkapnya bisa dilihat di http://www.php.net/manual/en/errorfunc.constants.php. Contoh penggunaan error_reporting().
- <?php
- //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);
- ?>
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.
- <?php
- 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() [<a
href='function.mysql-connect'>function.mysql-connect</a>]:
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.
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)
Parameter | Deskripsi |
error_level | level error |
error_message | Pesan error yang terjadi |
error_file | Optional. Nama file tempat terjadi error |
error_line | Optional. Nomor baris kode tempat terjadi error |
error_context | Optional. Array yang berisi semua variable dan valuenya yang menyebabkan terjadinya error |
Contoh:
- <?php
- 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. Parameter $handler diisi dengan string nama function Custom Error Handler. File "error.php" bisa seperti berikut.
- <?php
- session_start();
- ?>
- <html>
- <head>
- <title>Error</title>
- </head>
- <body>
- <h1>Error</h1>
- <p>Maaf kami tidak bisa memproses request anda.</p>
- <p>Pesan Error: <?php echo $_SESSION['error_msg'];?></p>
- </body>
- </html>
Mengenerate 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 = "<strong>hurup tebal</strong>";
- 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 = "<strong>hurup tebal</strong>";
- if(preg_match('/<(.+)>/', $input)){
- trigger_error("anda tidak boleh memasukkan html tag", E_USER_WARNING);
- }
0 komentar:
Posting Komentar