tutorial pengembangan web terbaru
 

PHP Penanganan kesalahan


Default error handling di PHP sangat sederhana. Pesan kesalahan dengan nama file, nomor baris dan pesan yang menjelaskan kesalahan tersebut dikirim ke browser.


PHP Penanganan Kesalahan

Ketika membuat script dan aplikasi web, penanganan kesalahan adalah bagian penting. Jika kode Anda tidak memiliki kesalahan kode pengecekan, program anda mungkin terlihat sangat tidak profesional dan Anda mungkin terbuka untuk risiko keamanan.

Tutorial ini berisi beberapa kesalahan yang paling umum memeriksa metode dalam PHP.

Kami akan menunjukkan metode penanganan kesalahan yang berbeda:

  • Simple " die() " pernyataan
  • kesalahan kustom dan pemicu kesalahan
  • pelaporan kesalahan

Dasar Penanganan Kesalahan: Menggunakan die() function

Contoh pertama menunjukkan sebuah script sederhana yang membuka file teks:

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

Jika file tidak ada Anda mungkin mendapatkan error seperti ini:

Warning : fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2

Untuk mencegah pengguna dari mendapatkan pesan kesalahan seperti di atas, kita menguji apakah file tersebut ada sebelum kita mencoba untuk mengaksesnya:

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

Sekarang jika file tidak ada Anda mendapatkan error seperti ini:

File not found

Kode di atas adalah lebih efisien daripada kode sebelumnya, karena menggunakan mekanisme penanganan kesalahan yang sederhana untuk menghentikan script setelah kesalahan.

Namun, hanya menghentikan script tidak selalu cara yang tepat untuk pergi. Mari kita lihat fungsi PHP alternatif untuk kesalahan penanganan.


Membuat Kesalahan Handler Kustom

Membuat handler kesalahan kustom cukup sederhana. Kami hanya membuat fungsi khusus yang dapat dipanggil ketika terjadi kesalahan di PHP.

Fungsi ini harus mampu menangani minimal dua parameter (tingkat kesalahan dan pesan kesalahan) tapi dapat menerima hingga lima parameter (optionally: file, line-number, and the error context) :

Sintaksis

error_function(error_level,error_message,
error_file,error_line,error_context)
Parameter Deskripsi
error_level Wajib. Menentukan tingkat laporan kesalahan untuk kesalahan yang ditetapkan pengguna. Harus angka nilai. Lihat tabel di bawah untuk kemungkinan tingkat laporan kesalahan
error_message Wajib. Menentukan pesan kesalahan untuk kesalahan yang ditetapkan pengguna
error_file Pilihan. Menentukan nama file di mana kesalahan terjadi
error_line Pilihan. Menentukan nomor baris di mana kesalahan terjadi
error_context Pilihan. Menentukan array yang berisi setiap variabel, dan nilai-nilai mereka, digunakan ketika terjadi kesalahan

Kesalahan tingkat Report

tingkat laporan kesalahan ini adalah jenis yang berbeda dari kesalahan kesalahan handler yang ditetapkan pengguna dapat digunakan untuk:

Nilai Konstan Deskripsi
2 E_WARNING Non-fatal kesalahan run-time. Pelaksanaan script tidak dihentikan
8 E_NOTICE pemberitahuan run-time. Script menemukan sesuatu yang mungkin kesalahan, tetapi juga bisa terjadi saat menjalankan script biasanya
256 E_USER_ERROR Fatal user-generated error. Ini seperti E_ERROR ditetapkan oleh programmer menggunakan fungsi PHP trigger_error()
512 E_USER_WARNING Non-fatal peringatan user-generated. Ini seperti E_WARNING ditetapkan oleh programmer menggunakan fungsi PHP trigger_error()
1024 E_USER_NOTICE Pengguna dihasilkan pemberitahuan. Ini seperti E_NOTICE ditetapkan oleh programmer menggunakan fungsi PHP trigger_error()
4096 E_RECOVERABLE_ERROR kesalahan fatal catchable. Ini seperti E_ERROR tapi bisa ditangkap oleh pegangan ditetapkan pengguna (see also set_error_handler() )
8191 E_ALL Semua kesalahan dan peringatan (E_STRICT became a part of E_ALL in PHP 5.4)

Sekarang mari kita membuat fungsi untuk menangani error:

function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

Kode di atas adalah fungsi penanganan kesalahan sederhana. Ketika dipicu, mendapat tingkat kesalahan dan pesan kesalahan. Kemudian output tingkat kesalahan dan pesan dan berakhir script.

Sekarang kita telah menciptakan fungsi penanganan kesalahan kita perlu memutuskan kapan harus dipicu.


Set Kesalahan Handler

Default error handler untuk PHP adalah dibangun dalam kesalahan handler. Kami akan membuat fungsi di atas default error handler selama script.

Hal ini dimungkinkan untuk mengubah penangan kesalahan untuk mengajukan hanya beberapa kesalahan, cara itu script dapat menangani kesalahan yang berbeda dengan cara yang berbeda. Namun, dalam contoh ini kita akan menggunakan penangan kesalahan kebiasaan kami untuk semua kesalahan:

set_error_handler("customError");

Karena kita ingin fungsi kustom kami untuk menangani semua kesalahan, set_error_handler() hanya dibutuhkan satu parameter, parameter kedua dapat ditambahkan untuk menentukan tingkat kesalahan.

Contoh

Pengujian penangan kesalahan dengan mencoba untuk variabel output yang tidak ada:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>

Output dari kode di atas harus sesuatu seperti ini:

Error: [8] Undefined variable: test

Memicu Kesalahan

Dalam naskah di mana pengguna dapat memasukkan data yang berguna untuk memicu kesalahan ketika input ilegal terjadi. Dalam PHP, hal ini dilakukan oleh trigger_error() fungsi.

Contoh

Dalam contoh ini kesalahan terjadi jika "test" variabel lebih besar dari "1" :

<?php
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below");
}
?>

Output dari kode di atas harus sesuatu seperti ini:

Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6

Kesalahan bisa dipicu mana saja yang Anda inginkan dalam naskah, dan dengan menambahkan parameter kedua, Anda dapat menentukan apa tingkat kesalahan dipicu.

Kemungkinan jenis kesalahan:

  • E_USER_ERROR - Fatal user-generated run-time error. Kesalahan yang tidak dapat pulih dari. Pelaksanaan script dihentikan
  • E_USER_WARNING - Non-fatal user-generated run-time peringatan. Pelaksanaan script tidak dihentikan
  • E_USER_NOTICE - default. run-time pemberitahuan pengguna yang dihasilkan. Script menemukan sesuatu yang mungkin kesalahan, tetapi juga bisa terjadi saat menjalankan script biasanya

Contoh

Dalam contoh ini merupakan E_USER_WARNING terjadi jika "test" variabel lebih besar dari "1" . Jika E_USER_WARNING terjadi kita akan menggunakan penangan error kebiasaan kami dan mengakhiri script:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

Output dari kode di atas harus sesuatu seperti ini:

Error: [512] Value must be 1 or below
Ending Script

Sekarang kita telah belajar untuk membuat kesalahan kita sendiri dan bagaimana memicu mereka, mari kita lihat di error logging.


kesalahan Logging

Secara default, PHP mengirim log error untuk sistem logging server atau file, tergantung pada bagaimana konfigurasi error_log diatur dalam file php.ini. Dengan menggunakan error_log() berfungsi Anda dapat mengirim error log ke file atau tujuan jarak jauh yang ditentukan.

Mengirim pesan kesalahan untuk diri sendiri melalui e-mail dapat menjadi cara yang baik untuk mendapatkan diberitahu kesalahan tertentu.

Kirim Pesan Kesalahan oleh E-Mail

Dalam contoh di bawah ini kami akan mengirim e-mail dengan pesan kesalahan dan mengakhiri script, jika kesalahan tertentu terjadi:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Webmaster has been notified";
  error_log("Error: [$errno] $errstr",1,
  "[email protected]","From: [email protected]");
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

Output dari kode di atas harus sesuatu seperti ini:

Error: [512] Value must be 1 or below
Webmaster has been notified

Dan surat yang diterima dari kode di atas terlihat seperti ini:

Error: [512] Value must be 1 or below

Ini tidak boleh digunakan dengan semua kesalahan. kesalahan biasa harus login server menggunakan sistem default PHP logging.