PHP Penanganan Kesalahan
Dalam PHP, default error handling sangat sederhana. Pesan kesalahan dikirim ke browser, pesan dengan nama file, nomor baris dan deskripsi pesan kesalahan.
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, tetapi juga membuka pintu untuk risiko keamanan.
Tutorial ini memperkenalkan beberapa yang paling penting dalam PHP metode deteksi kesalahan.
Kami akan menjelaskan metode penanganan kesalahan Anda yang berbeda:
- Sederhana "die ()" Pernyataan
- kesalahan kustom dan pemicu kesalahan
- error Reporting
Dasar Penanganan Kesalahan: Menggunakan die () fungsi
Contoh pertama menunjukkan sebuah script sederhana yang membuka file teks:
<?php $file=fopen("welcome.txt","r"); ?>
Jika file tidak ada, Anda akan mendapatkan error seperti ini:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /www/w3big/test/test.php on line 2
Untuk mencegah pengguna mendapatkan pesan kesalahan mirip dengan di atas, kami memeriksa file sebelum mengakses file ada:
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>
Sekarang, jika file tidak ada, Anda akan mendapatkan pesan kesalahan ini mirip dengan:
文件不存在
Dibandingkan dengan kode sebelumnya, kode di atas adalah lebih efisien, karena menggunakan mekanisme penanganan kesalahan sederhana untuk mengakhiri script setelah kesalahan.
Namun, hanya mengakhiri script tidak selalu dengan cara yang benar. Mari kita lihat fungsi PHP alternatif untuk menangani kesalahan.
Membuat Kesalahan Handler Kustom
Buat handler kesalahan kustom cukup sederhana. Kami hanya membuat fungsi khusus yang dapat dipanggil ketika terjadi kesalahan dalam PHP.
Fungsi ini harus mampu menangani setidaknya dua parameter (tingkat kesalahan dan pesan kesalahan), tetapi dapat menerima hingga lima parameter (opsional: berkas, garis-jumlah dan konteks error):
tatabahasa
error_function(error_level,error_message, error_file,error_line,error_context)
parameter | deskripsi |
---|---|
error_level | Diperlukan. Kesalahan didefinisikan sebagai tingkat pelaporan kesalahan yang ditetapkan pengguna. Ini harus berupa angka. Lihat tabel berikut: Kesalahan tingkat pelaporan. |
ERROR_MESSAGE | Diperlukan. error pesan kesalahan pengguna-didefinisikan menyatakan. |
error_file | Opsional. terjadi nama file error ditentukan. |
error_line | Opsional. Yang telah ditentukan nomor baris kesalahan terjadi. |
error_context | Opsional. Menentukan array yang berisi setiap variabel bila terjadi kesalahan dalam penggunaan dan nilai-nilai mereka. |
tingkat pelaporan kesalahan
tingkat laporan kesalahan ini adalah jenis kesalahan Kesalahan Handler pengolahan kustom:
值 | 常量 | 描述 |
---|---|---|
2 | E_WARNING | 非致命的 run-time 错误。不暂停脚本执行。 |
8 | E_NOTICE | run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。 |
256 | E_USER_ERROR | 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 |
512 | E_USER_WARNING | 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 |
1024 | E_USER_NOTICE | 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。 |
4096 | E_RECOVERABLE_ERROR | 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 | E_ALL | 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分) |
Sekarang, mari kita membuat fungsi untuk menangani error:
function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); }
Kode di atas adalah fungsi penanganan kesalahan sederhana. Ketika dipicu, maka akan mendapatkan tingkat error dan pesan kesalahan. Kemudian output tingkat kesalahan dan pesan dan berakhir script.
Sekarang, kami telah menciptakan fungsi penanganan error, kita perlu menentukan kapan untuk memicu fungsi.
Pengaturan handler error
default kesalahan handler PHP adalah built-in error handler. Kita akan mengubah fungsi di atas durasi handler error default script.
Anda dapat memodifikasi handler kesalahan sehingga hanya diterapkan untuk beberapa error, sehingga script dapat cara yang berbeda untuk menangani kesalahan yang berbeda. Namun, dalam kasus ini, kami berniat untuk menggunakan untuk semua kesalahan Kesalahan Handler kebiasaan kami:
set_error_handler("customError");
Karena kita ingin fungsi kustom kami untuk menangani semua kesalahan, set_error_handler () hanya dibutuhkan satu parameter, Anda dapat menambahkan argumen kedua untuk menentukan tingkat kesalahan.
contoh
Dengan mencoba untuk variabel output yang tidak ada, untuk menguji handler error:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 设置错误处理函数 set_error_handler("customError"); // 触发错误 echo($test); ?>
Output dari kode di atas adalah sebagai berikut:
Error: [8] Undefined variable: test
pemicu Kesalahan
Dalam script pengguna lokasi input data ketika masukan pengguna tidak dipicu ketika kesalahan berguna. Dalam PHP, hal ini dilakukan oleh fungsi trigger_error () untuk menyelesaikan.
contoh
Dalam contoh ini, jika "test" variabel lebih besar dari "1", kesalahan terjadi:
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
Output dari kode di atas adalah sebagai berikut:
Notice: 变量值必须小于等于 1 in /www/test/w3big.php on line 5
Anda dapat memicu kesalahan dalam script mana saja, dengan menambahkan parameter kedua, Anda dapat menentukan tingkat kesalahan dipicu.
Kemungkinan jenis kesalahan:
- E_USER_ERROR - Fatal user-generated run-time error. kesalahan tidak terpulihkan. eksekusi script terganggu.
- E_USER_WARNING - Non-fatal yang dibuat pengguna run-time peringatan. eksekusi script tidak terganggu.
- E_USER_NOTICE - default. run-time pemberitahuan pengguna yang dihasilkan. Ketika script menemukan kesalahan mungkin terjadi, tetapi juga dapat terjadi dalam naskah operasi normal.
contoh
Dalam contoh ini, jika "test" variabel lebih besar dari "1", E_USER_WARNING kesalahan terjadi. Jika ini terjadi E_USER_WARNING, kita akan menggunakan penangan error kebiasaan kami dan mengakhiri script:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
Output dari kode di atas adalah sebagai berikut:
Error: [512] 变量值必须小于等于 1 脚本结束
Sekarang kita telah belajar bagaimana untuk membuat kesalahan Anda sendiri, dan bagaimana memicu mereka, mari kita lihat di error log.
error Log
Dalam kasus default, sesuai dengan konfigurasi error_log diatur di php.ini, PHP mengirimkan sistem pencatatan kesalahan untuk merekam atau file server. Dengan menggunakan error_log () berfungsi Anda dapat mengirim error log ke file atau tujuan remote ditentukan.
Ini mengirimkan pesan kesalahan kepada diri sendiri melalui e-mail adalah cara yang baik untuk mendapatkan diberitahu kesalahan tertentu.
pesan kesalahan dikirim oleh E-Mail
Dalam contoh berikut, jika kesalahan tertentu terjadi, kami akan mengirimkan e-mail dengan pesan kesalahan dan mengakhiri script:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "已通知网站管理员"; error_log("Error: [$errno] $errstr",1, "[email protected]","From: [email protected]"); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
Output dari kode di atas adalah sebagai berikut:
Error: [512] 变量值必须小于等于 1 已通知网站管理员
Pesan yang diterima dari kode di atas adalah sebagai berikut:
Error: [512] 变量值必须小于等于 1
Metode ini tidak cocok untuk semua kesalahan. kesalahan konvensional harus dengan menggunakan sistem logging PHP default untuk merekam pada server.