Memproses Error PHP

Ada berbagai macam hal yang bisa menyebabkan sebuah program PHP error, beberapa diantaranya yaitu:

  • Kapasitas hard disk tidak mencukupi
  • User memasukkan value yang salah di web form
  • File atau database yang ingin diakses tidak ditemukan
  • Tidak ada ijin untuk menulis di file

Beberapa jenis error di atas dinamakan sebagai run-time error karena terjadi saat script sedang berjalan.

Tutorial ini akan membahas bagaimana cara memproses run-time error.

Tingkat error

Saat terjadi error biasanya PHP memberikan sebuah pesan error. Pesan error yang diberikan oleh PHP terbagi menjadi 16 tingkat atau jenis error.

Setiap tingkat error diwakilkan oleh angka dan nama error. Lihat table di bawah ini:

Nama Value Penjelasan
E_ERROR 1 Fatal run-time error = Error menyebabkan script yang sedang berjalan berhenti.
E_WARNING 2 Run-time warning = Error tidak menyebabkan script berhenti (program terus berjalan walaupun ada error). Sebagian besar error masuk ke dalam jenis error ini.
E_PARSE 4 Compile-time parse error = Parse error seharusnya hanya disebabkan oleh parser (error pada parser).
E_NOTICE 8 Run-time notice = Script menemukan sesuatu yang mungkin adalah error dan mungkin juga bukan error karena sesuatu tersebut juga kadang ditemukan saat script berjalan secara normal.
E_CORE_ERROR 16 Fatal error yang terjadi saat PHP mulai dinyalakan. E_CORE_ERROR hampir sama seperti E_ERROR, perbedaannya adalah E_CORE_ERROR disebabkan oleh core PHP.
E_CORE_WARNING 32 Non-fatal error yang terjadi saat PHP mulai dinyalakan. E_CORE_WARNING hampir sama seperti E_WARNING, perbedaannya adalah E_CORE_ERROR disebabkan oleh core PHP.
E_COMPILE_ERROR 64 Fatal error yang terjadi saat code sedang diubah menjadi bahasa yang bisa dimengerti oleh mesin untuk dieksekusi (compile). E_COMPILE_ERROR hampir sama seperti E_ERROR, perbedaannya adalah E_COMPILE_ERROR disebabkan oleh bahasa script Zend.
E_COMPILE_WARNING 128 Non-fatal error yang terjadi saat code sedang diubah menjadi bahasa yang bisa dimengerti oleh mesin untuk dieksekusi (compile). E_COMPILE_WARNING hampir sama seperti E_WARNING, perbedaannya adalah E_COMPILE_WARNING disebabkan oleh bahasa script zend.
E_USER_ERROR 256 Fatal error yang diaktifkan oleh user. E_USER_ERROR hampir sama seperti E_ERROR, perbedaannya adalah E_USER_ERROR disebabkan oleh code PHP trigger_error() function.
E_USER_WARNING 512 Non-fatal error yang diaktifkan oleh user. E_USER_WARNING hampir sama seperti E_WARNING, perbedaannya adalah E_USER_WARNING disebabkan oleh code PHP trigger_error() function.
E_USER_NOTICE 1024 Run-time notice yang diaktifkan oleh user. E_USER_NOTICE hampir sama seperti E_NOTICE, perbedaannya adalah E_USER_NOTICE disebabkan oleh code PHP trigger_error() function.
E_STRICT 2048 Bukan error tetapi bisa muncul jika PHP menemukan code yang akan memunculkan masalah.
E_RECOVERABLE_ERROR 4096 Fatal error yang masih bisa ditangani. Jika error tidak ditangani menggunakan set_error_handler() function maka error akan dianggap seperti E_ERROR yang menyebabkan program berhenti.
E_DEPRECATED 8192 Pesan yang memberitahukan bahwa code tidak akan bisa digunakan pada versi PHP yang akan datang.
E_USER_DEPRECATED 16384 Warning message yang diaktifkan oleh user. E_USER_DEPRECATED hampir sama seperti E_DEPRECATED, perbedaannya adalah E_USER_DEPRECATED disebabkan oleh code PHP trigger_error() function.
E_ALL 32767 Error untuk semua tingkat (E_STRICT tidak termasuk sebelum PHP 5.4.0).

Memproses error dengan baik sangatlah penting saat membuat web dan aplikasi. Error yang terjadi saat user menggunakan sebuah program berbasis PHP bisa membuat user menganggap bahwa program yang kita buat tidak professional dan selain itu adalah munculnya masalah keamanan karena adanya error.

Ada beberapa cara untuk memproses error, diantaranya yaitu:

  1. Menggunakan die() function
  2. Menggunakan function buatan
  3. Mengaktifkan proses error

Menggunakan die() function

Code die() function berguna untuk memunculkan pesan error kemudian menghentikan code yang sedang berjalan.

Sebagai contoh kita akan menggunakan code fopen() function untuk membuka sebuah file:

Code PHP 1:

<?php
$file=fopen("simpan.txt","r");
?>

Jika fopen() function tidak berhasil menemukan file yang ingin dicari maka fopen() function akan menghasilkan pesan error seperti di bawah ini:

Hasil code PHP 1:

Warning: fopen(simpan.txt): failed to open stream: No such file or directory in C:\folder\tes.php on line 2

Untuk mencegah user mendapatkan pesan error standar seperti di atas kita akan memodifikasi code fopen() function. Lihat code berikut ini:

Code PHP 2:

<?php
if(!file_exists("simpan.txt")) {
    die("File tidak ditemukan");
} else {
    $file=fopen("simpan.txt","r");
};
?>

Code [!] adalah logical operator tidak.

Code file_exists() function berguna untuk mencari sebuah file di dalam folder.

Pada code di atas, sebelum fopen() function dijalankan maka if else statement akan memeriksa apakah file yang ingin dibuka ada atau tidak. Jika file yang ingin dibuka tidak ditemukan maka akan muncul pesan [File tidak ditemukan] dan script akan berhenti dijalankan.

Menggunakan die() function merupakan salah satu cara sederhana untuk menghentikan sebuah program saat terjadi error. Tetapi ada saatnya cara seperti ini tidak cocok digunakan.

Menggunakan function buatan

Alternatif lainnya dalam memproses error adalah dengan membuat sebuah function yang bisa digunakan untuk memproses error.

Function buatan ini memberikan kemampuan lebih banyak bila dibandingkan dengan die() function, diantaranya yaitu:

  • Memberikan kemampuan untuk melakukan apapun dengan error yang terjadi.
  • Menampilkan pesan error yang telah dimodifikasi.
  • Menyimpan data error di dalam file atau database atau mengirimkannya melalui email.
  • Memperbaiki error yang terjadi.
  • Memberhentikan script yang sedang berjalan atau tidak melakukan apapun jika ada error.

Function buatan untuk error bisa mengikuti format seperti berikut ini:

Syntax

error_function(error_level, error_message, error_file, error_line, error_context)

Parameter

Parameter Penjelasan
error_level
  • Tingkat error (Lihat table tingkat error di bawah).
  • Parameter ini wajib ada.
error_message
  • Ringkasan error.
  • Parameter ini wajib ada.
error_file
  • Nama file yang merupakan tempat terjadinya error.
  • Parameter ini pilihan.
error_line
  • Nomor baris yang merupakan tempat terjadinya error.
  • Parameter ini pilihan.
error_context
  • Array yang berisi semua variabel dan value yang sedang digunakan saat terjadinya error.
  • Parameter ini pilihan.

Pertama kita akan membuat error function yang akan memproses error seperti berikut ini:

Code PHP 3:

<?php
function error_function($error_level, $error_message) {
    echo "Error: [$error_level] $error_message";
};
?>

Saat terjadi error maka function di atas akan dijalankan. Function di atas berguna untuk memberikan pesan error yang sudah dimodifikasi.

Pesan error yang ditampilkan hanya memuat dua informasi error yaitu tingkat error dan ringkasan error. Selain itu, masih ada pesan bahwa script berhenti.

Function buatan di atas tidak secara otomatis dijalankan bila terjadi error karena PHP tidak mengetahui bahwa function buatan tersebut dibuat untuk memproses error.

Supaya PHP mengetahui bahwa function buatan di atas dibuat untuk memproses error maka kita harus menggunakan set_error_handler() function. Cukup masukkan nama function buatan ke dalam set_error_handler() function.

Code PHP 4:

<?php
// Buat error function
function error_function($error_level, $error_message) {
    echo "Error: [$error_level] $error_message";
};

// Menentukan error function
set_error_handler("error_function");

// Aktifkan error
echo $tes;
?>

Berikut ini adalah hasil running dari code di atas:

Hasil code PHP 4:

Error: [8] Undefined variable: tes

Berikut ini adalah function buatan yang digunakan untuk log error:

Code PHP 5:

<?php
function pembagian($angka, $pembagi) {
    return($angka / $pembagi);
};

function error_function($error_level, $error_message, $error_file, $error_line, $error_context) {
    $pesan = date("Y-m-d H:i:s - ");
    $pesan .= "Error: [" . $error_level ."], " . "$error_message in $error_file on line $error_line, ";
    $pesan .= "Variables:" . print_r($error_context, true) . "\r\n";
    error_log($pesan, 3, "error_log_file.txt");
    die("There was a problem, please try again.");
};

// Menentukan error function
set_error_handler("error_function");

// Memanggil function
echo pembagian(10, 0);
?>

Code error_log() function berguna untuk mengirimkan data error ke sebuah file atau email.

Dengan code di atas maka semua data error akan disimpan dalam sebuah file log.

Berikut ini adalah contoh data error yang disimpan dalam file log error:

Hasil code PHP 5:

2015-11-08 02:11:50 – Error: [2], Division by zero in C:\folder\error_log_file.txt on line 3, Variables:Array
(
[angka] => 10
[pembagi] => 0
)

Mengaktifkan proses error

Biasanya PHP mengaktifkan proses error (memberhentikan program dan memberikan pesan error) setelah error terjadi. Namun kita sebagai user juga bisa membuat proses error tersebut terjadi lebih awal sebelum error terjadi atau pada saat PHP menemukan adanya indikasi bahwa error akan terjadi.

Dengan cara ini kita bisa membuat program yang lebih baik karena program tersebut bisa mendeteksi bahwa akan adanya error dan memperbaiki error tersebut sebelum menjadi error yang lebih bermasalah.

Untuk mengaktifkan sebuah proses error kita bisa menggunakan code trigger_error() function.

Syntax

trigger_error(pesan, tingkat_error);

Code trigger_error() function bisa memberikan pesan error yang telah dimodifikasi dan juga bisa menampilkan tingkat error. Tingkat error yang ditampilkan bukan berdasarkan error yang terjadi namun ditentukan oleh user. Tingkat error tidak hanya ditampilkan melainkan juga menentukan proses error yang akan dilakukan oleh PHP.

Parameter pesan diisi pesan error yang akan ditampilkan dan parameter tingkat_error berisi tingkat error yang telah ditentukan oleh user.

Ada empat tingkat error yang bisa digunakan oleh trigger_error() function, yaitu:

  1. E_USER_ERROR = Fatal error yang diaktifkan oleh user. E_USER_ERROR hampir sama seperti E_ERROR.
  2. E_USER_WARNING = Non-fatal error yang diaktifkan oleh user. E_USER_WARNING hampir sama seperti E_WARNING.
  3. E_USER_NOTICE Run-time notice yang diaktifkan oleh user. E_USER_NOTICE hampir sama seperti E_NOTICE.
  4. E_USER_DEPRECATED Warning message yang diaktifkan oleh user. E_USER_DEPRECATED hampir sama seperti E_DEPRECATED.

Misalkan saja tingkat error E_USER_ERROR digunakan maka program akan berhenti dan pesan error akan ditampilkan. Sedangkan jika E_USER_WARNING yang digunakan maka program tidak akan berhenti, hanya pesan error yang ditampilkan.

Perhatikan contoh berikut ini:

Code PHP 6:

<?php
function pembagian($angka, $pembagi) {
    return($angka / $pembagi);
};

// Memanggil function
echo pembagian(10, 0);
?>

Pada code di atas kita membuat sebuah function yang berguna untuk menghitung operasi pembagian matematika.

Berdasarkan ilmu matematika dalam pembagian, variabel $pembagi tidak boleh sama dengan angka 0. Pada code di atas kita membagi angka 10 dengan angka 0 yang menyebabkan error dan muncul pesan seperti di bawah ini:

Hasil code PHP 6:

Warning: Division by zero in C:\folder\tes.php on line 3

Pada code di atas, proses error diaktifkan setelah pembagian() function selesai dijalankan.

Berikut ini kita akan memodifikasi code di atas sehingga proses error akan diaktifkan sebelum error terjadi:

Code PHP 7:

<?php
function pembagian($angka, $pembagi) {
    if($pembagi == 0){
        trigger_error("Pembagi tidak boleh 0", E_USER_WARNING);
        return false;
    } else {
        return($angka / $pembagi);
    };
};

// Memanggil function
echo pembagian(10, 0);
?>

Hasil code PHP 7:

Warning: Pembagi tidak boleh 0 in C:\folder\error.php on line 4

Code if else statement di atas berguna untuk memeriksa apakah variabel $pembagi berisi angka 0 atau tidak. Pada code if else statement:

  • Jika $pembagi adalah angka 0 maka code trigger_error() function akan dijalankan.
  • Jika $pembagi bukan angka 0 maka operasi pembagian akan dijalankan.

Code trigger_error() function akan mengaktifkan proses error dengan memberikan pesan error dan tingkat error. Pada code di atas, tingkat error yang digunakan adalah E_USER_WARNING yang artinya adalah program tidak akan berhenti, hanya pesan error yang ditampilkan.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>