Ralat pengendalian untuk pemula dalam PHP
Pengendalian Ralat PHP
Dalam PHP, pengendalian ralat lalai adalah mudah. Mesej ralat dihantar ke penyemak imbas dengan nama fail, nombor baris dan mesej yang menerangkan ralat.
Pengendalian ralat merupakan bahagian penting semasa membuat skrip dan aplikasi web. Jika kod anda tidak mempunyai pengekodan pengesanan ralat, program ini akan kelihatan tidak profesional dan membuka pintu kepada risiko keselamatan.
Tutorial ini merangkumi beberapa kaedah pengesanan ralat yang paling penting dalam PHP.
Kami akan menerangkan kaedah pengendalian ralat yang berbeza untuk anda:
Kenyataan "die()" ringkas
Ralat tersuai dan pencetus ralat
Pelaporan ralat
Pengendalian ralat asas: menggunakan fungsi die()
Contoh pertama menunjukkan skrip mudah yang membuka fail teks:
<?php
$file=fopen("welcome.txt","r");
?>
Jika fail itu tidak wujud, anda Anda akan mendapat ralat yang serupa dengan ini:
Amaran: fopen(welcome.txt) [function.fopen]: gagal membuka strim:
Tiada fail atau direktori sedemikian dalam /www/php/test/test pada baris 2
Untuk mengelakkan pengguna mendapat mesej ralat seperti di atas, kami menyemak sama ada fail itu wujud sebelum mengaksesnya:
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>
Sekarang jika fail itu tidak wujud, cuma keluarkannya secara langsung Fail tidak wujud
Buat pengendali ralat tersuai
Mencipta pengendali ralat tersuai adalah sangat mudah. Kami hanya mencipta fungsi khusus yang boleh dipanggil apabila ralat berlaku dalam PHP.
Fungsi mesti boleh mengendalikan sekurang-kurangnya dua parameter (tahap ralat dan mesej ralat), tetapi boleh menerima sehingga lima parameter (pilihan: fail, nombor baris dan konteks ralat):
Syntax
error_function(error_level,error_message,
error_file,error_line,error_context)
error_level Diperlukan. Menentukan tahap pelaporan ralat untuk ralat yang ditentukan pengguna. Mesti nombor. Lihat jadual di bawah: Tahap pelaporan ralat.
error_message Diperlukan. Menentukan mesej ralat untuk ralat yang ditentukan pengguna.
error_file Pilihan. Menentukan nama fail di mana ralat berlaku.
error_line Pilihan. Menentukan nombor baris tempat ralat berlaku.
error_context Pilihan. Menentukan tatasusunan yang mengandungi setiap pembolehubah yang digunakan apabila ralat berlaku dan nilainya.
Tahap pelaporan ralat
Tahap pelaporan ralat ini ialah pelbagai jenis ralat yang dikendalikan oleh pengendali ralat yang ditentukan pengguna:
2 E_WARNING Ralat masa jalan yang tidak membawa maut. Jangan jeda pelaksanaan skrip.
8 E_NOTICE pemberitahuan masa jalan. Berlaku apabila skrip menemui kemungkinan ralat, tetapi juga boleh berlaku apabila skrip berjalan seperti biasa.
256 E_USER_ERROR Ralat yang dijana pengguna maut. Ini serupa dengan E_ERROR yang ditetapkan oleh pengaturcara menggunakan fungsi PHP trigger_error().
512 E_USER_WARNING Amaran yang dijana pengguna tidak membawa maut. Ini serupa dengan E_WARNING yang ditetapkan oleh pengaturcara menggunakan fungsi PHP trigger_error().
1024 E_USER_NOTICE Pemberitahuan yang dijana pengguna. Ini serupa dengan E_NOTICE yang ditetapkan oleh pengaturcara menggunakan fungsi PHP trigger_error().
4096 E_RECOVERABLE_ERROR Ralat maut yang boleh ditangkap. Seperti E_ERROR, tetapi boleh ditangkap oleh pengendali yang ditentukan pengguna. (Lihat juga set_error_handler()) (Dalam PHP 5.4, E_STRICT menjadi sebahagian daripada E_ALL)
Buat fungsi yang mengendalikan ralat <?php
function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "脚本结束";
die();
}
?>
Kod di atas ialah pengendalian Ralat yang mudah fungsi. Apabila ia dicetuskan, ia mendapat tahap ralat dan mesej ralat. Ia kemudian mencetak tahap ralat dan mesej, dan menamatkan skrip.
Sekarang kita telah mencipta fungsi pengendalian ralat, kita perlu menentukan masa untuk menyalakannya
Sediakan pengendali ralat Pengendali ralat lalai PHP ialah pengendali ralat terbina dalam. Kami akan mengubah fungsi di atas menjadi pengendali ralat lalai apabila skrip berjalan.
Pengendali ralat boleh diubah suai untuk digunakan hanya pada ralat tertentu, supaya skrip boleh mengendalikan ralat yang berbeza dengan cara yang berbeza. Walau bagaimanapun, dalam kes ini, kami akan menggunakan pengendali ralat tersuai kami untuk semua ralat
set_error_handler("customError");