Pengendalian ra...LOGIN

Pengendalian ralat PHP

Pengendalian Ralat PHP


Dalam PHP, pengendalian ralat lalai adalah sangat mudah. Mesej ralat dihantar ke penyemak imbas dengan nama fail, nombor baris dan mesej yang menerangkan ralat.


Pengendalian Ralat PHP

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: 🎜>· Pelaporan ralat

Pengendalian ralat asas: menggunakan fungsi die()

Contoh pertama menunjukkan skrip ringkas yang membuka fail teks:

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

Jika fail itu tidak wujud, anda akan mendapat ralat seperti ini:

Amaran: fopen(welcome.txt ) [function.fopen]: gagal membuka strim:

Tiada fail atau direktori sedemikian dalam /www/test/test/test.php 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, anda akan mendapat mesej ralat seperti ini:

Fail tidak wujud

Kod di atas adalah lebih cekap daripada kod sebelumnya, ini kerana Ia menggunakan mekanisme pengendalian ralat mudah untuk menamatkan skrip selepas ralat.

Walau bagaimanapun, menamatkan skrip tidak semestinya sesuai. Mari kita periksa fungsi PHP alternatif untuk mengendalikan ralat.

Membuat pengendali ralat tersuai

Membuat 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)

>

<🎜

QQ截图20161009093539.png

Tahap pelaporan ralat


Tahap pelaporan ralat ini ialah pelbagai jenis ralat yang dikendalikan oleh pengendali ralat yang ditentukan pengguna:



QQ截图20161009093559.png

QQ截图20161009093615.png

Sekarang, mari buat fungsi yang mengendalikan ralat:

<?php
function customError($errno, $errstr)
{
         echo "<b>Error:</b> [$errno] $errstr<br>";
         echo "脚本结束";
         die();
}
?>

Kod di atas ialah fungsi pengendalian ralat yang mudah. 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.


Tetapkan 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");

Oleh kerana kami mahu fungsi tersuai kami untuk Untuk mengendalikan semua ralat, set_error_handler() hanya memerlukan satu parameter, dan parameter kedua boleh ditambah untuk menentukan tahap ralat.

Contoh

Uji pengendali ralat ini dengan cuba mengeluarkan pembolehubah yang tidak wujud:

<?php
// 错误处理函数
function customError($errno, $errstr)
{
         echo "<b>Error:</b> [$errno] $errstr";
}
 // 设置错误处理函数
set_error_handler("customError");
 // 触发错误
echo($test);
?>

Keluaran kod di atas kelihatan seperti ini:

Ralat : [8] Pembolehubah tidak ditentukan: ujian

Ralat Pencetus

Apabila pengguna memasukkan data dalam skrip, adalah berguna untuk mencetuskan ralat apabila input pengguna tidak sah. Dalam PHP, tugas ini dicapai oleh fungsi trigger_error().

Contoh

Dalam contoh ini, jika pembolehubah "ujian" lebih besar daripada "1", ralat akan berlaku:

<?php
$test=2;
if ($test>1)
{
         trigger_error("变量值必须小于等于 1");
}
?>

Output kod di atas akan kelihatan seperti ini:

Notis: Nilai pembolehubah mestilah kurang daripada atau sama dengan 1

dalam /www/test/text.php pada baris 5

Anda boleh mencetuskan ralat mana-mana dalam skrip dengan menambah yang pertama Dengan dua parameter, anda boleh menentukan tahap ralat untuk dicetuskan.

Jenis ralat yang mungkin:

E_USER_ERROR - Ralat masa jalan yang dijana pengguna maut. Ralat tidak dapat dipulihkan. Pelaksanaan skrip terganggu.

· E_USER_WARNING - Amaran masa jalan yang dijana pengguna yang tidak membawa maut. Pelaksanaan skrip tidak terganggu.

· E_USER_NOTICE - Lalai. Pemberitahuan masa jalan yang dijana pengguna. Berlaku apabila skrip menemui kemungkinan ralat, tetapi juga boleh berlaku apabila skrip berjalan seperti biasa.

Contoh

Dalam contoh ini, jika pembolehubah "ujian" lebih besar daripada "1", ralat E_USER_WARNING berlaku. Jika E_USER_WARNING berlaku, kami akan menggunakan pengendali ralat tersuai kami dan menamatkan skrip:

<?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 kod di atas akan kelihatan seperti ini:

Ralat: [512] Nilai pembolehubah mestilah kurang daripada atau sama dengan 1

Tamat skrip

Sekarang kita telah belajar cara mencipta ralat kita sendiri dan cara mencetuskannya, mari kita kaji pengelogan ralat.

Ralat pengelogan

Secara lalai, PHP menghantar pengelogan ralat ke sistem pengelogan pelayan atau fail mengikut konfigurasi error_log dalam php.ini. Dengan menggunakan fungsi error_log(), anda boleh menghantar log ralat ke fail tertentu atau destinasi jauh.

Menge-mel kepada diri sendiri mesej ralat ialah cara yang bagus untuk dimaklumkan tentang ralat tertentu.

Hantar mesej ralat melalui e-mel

Dalam contoh di bawah, jika ralat tertentu berlaku, kami akan menghantar e-mel dengan mesej ralat dan menamatkan skrip:

<?php
// 错误处理函数
function customError($errno, $errstr)
{
         echo "<b>Error:</b> [$errno] $errstr<br>";
         echo "已通知网站管理员";
         error_log("Error: [$errno] $errstr",1,
         "123123@qq.com","From: 123123@qq.com");
}
 // 设置错误处理函数
set_error_handler("customError",E_USER_WARNING);
 // 触发错误
$test=2;
if ($test>1)
{
         trigger_error("变量值必须小于等于 1",E_USER_WARNING);
}
?>

The output kod di atas adalah seperti berikut:

Ralat: [512] Nilai pembolehubah mestilah kurang daripada atau sama dengan 1

Pentadbir laman web telah dimaklumkan

Diterima daripada kod di atas E-mel adalah seperti berikut:

Ralat: [512] Nilai pembolehubah mestilah kurang daripada atau sama dengan 1

Kaedah ini tidak sesuai untuk semua ralat. Ralat umum harus dilog pada pelayan menggunakan sistem pengelogan PHP lalai.


bahagian seterusnya
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
babperisian kursus