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.