Usimamizi wa Kosa ya PHP
Kwenye PHP, usafirishaji wa kosa kinaonekana kwa kawaida. Ujumbe unaingizwa kwenye kifungu, hiki ujumbe unaingiza jina la faili, namba ya mabara na ujumbe wa kufikiria kosa.
Usimamizi wa Kosa ya PHP
在创建脚本和 web 应用程序时,错误处理是一个重要的部分。如果您的代码缺少错误检测编码,那么程序看上去很不专业,也为安全风险敞开了大门。
本教程介绍了 PHP 中一些最为重要的错误检测方法。
我们将为您讲解不同的错误处理方法:
- 简单的 "die()" 语句
- 自定义错误和错误触发器
- 错误报告
基本的错误处理:使用 die() 函数
第一个例子展示了一个打开文本文件的简单脚本:
<?php $file=fopen("welcome.txt","r"); ?>
如果文件不存在,您会获得类似这样的错误:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:\webfolder\test.php on line 2
为了避免用户获得类似上面的错误消息,我们在访问文件之前检测该文件是否存在:
<?php if(!file_exists("welcome.txt")) { die("File not found"); } else { $file=fopen("welcome.txt","r"); } ?>
现在,假如文件不存在,您会得到类似这样的错误消息:
File not found
比起之前的代码,上面的代码更有效,这是由于它采用了一个简单的错误处理机制在错误之后终止了脚本。
Hata hivyo, kumaliza skripta kwa urahisi hauwezi kwa kawaida. Tumekuwa na mbinu ya kuzingatia kosa za PHP.
Kumekisha mshauri wa kosa wa kawaida
Kumekisha mshauri wa kosa wa kawaida ni rahisi sana. Tukizungumza kwa kufanya fungsi ya kawaida ambayo inaweza kutumika kama fungsi inayotumika kama kosa inatokana na PHP.
Faa inaonekana kushika parameter kwa ulezi (error level na error message), lakini inaweza kuwaanishwa na parameter kwa ulezi zaidi (kwa ajili ya kuzingatia: file, number ya barua na mazingira ya kosa):
Majina ya kifaa
error_function(error_level,error_message, error_file,error_line,error_context)
Tafadhali | Inaonekana |
---|---|
error_level | Injili. Inaonyesha ujumbe wa kosa ulizidiwa na muafaka wa kosa. lazima iwe thamani. Tazama tabia inayopatikana chini: Muafaka wa kosa. |
error_message | Injili. Inaonyesha ujumbe wa kosa ulizidiwa na msichana wa kosa. |
error_file | Inahitaji. Inaeleza jina la faili ambapo kosa kilisababishwa. |
error_line | Inahitaji. Inaeleza namba ya muda wa kusababisha kosa. |
error_context | Inahitaji. Inaeleza mabaya ya kiwango kwa sababu ya kosa, na ujenzi wa kila mabaya na ujenzi wao. |
Inaonekana ya kosa ya kusababisha kosa ya kijana
Inaonekana ya kosa ya kusababisha kosa ya kijana ni muundo wa kusababisha kosa ambao programu ya kumalizia kosa inahitaji kumalizia.
Wenyeji | Makadara | Inaonekana |
---|---|---|
2 | E_WARNING | Makosa ya kusababisha kosa ya kijana yenye uwezo wa kufikiria. Haina uwezo wa kumaliza programu ya kusababisha kosa. |
8 | E_NOTICE | Inofikiria ya kusababisha kosa ya kijana. Programu inafikiria kwamba inaweza kufikiria kosa, lakini inaweza kuendelea kwa sababu ya programu ya kusababisha kosa. |
256 | E_USER_ERROR | Makosa ya mwanasayansi yenye uwezo wa kufikiria. Kama inayotumika na mwanasayansi kwa sababu ya PHP function trigger_error() inayotumika kwa sababu ya E_ERROR. |
512 | E_USER_WARNING | Inofikiria ya mwanasayansi ya kosa. Kama inayotumika na mwanasayansi kwa sababu ya PHP function trigger_error() inayotumika kwa sababu ya E_WARNING. |
1024 | E_USER_NOTICE | Inofikiria ya mwanasayansi. Kama inayotumika na mwanasayansi kwa sababu ya PHP function trigger_error() inayotumika kwa sababu ya E_NOTICE. |
4096 | E_RECOVERABLE_ERROR | Makosa yenye uwezo wa kufikiria. Kama E_ERROR, lakini inaweza kufikirishwa na programu ya kumalizia kosa inayotumika na mwanasayansi (Tazama set_error_handler()). |
8191 | E_ALL | Makosa na mabaidha, kwa sababu ya kiwango cha E_STRICT. (Kwa PHP 6.0, E_STRICT ni kiwango cha E_ALL) |
Sasa, tukungana na programu ya kumalizia kosa:
function customError($errno, $errstr) { echo "<b>Kichwa:</b> [$errno] $errstr<br />"; echo "Kufikia Mshairi"; die(); }
Maktaba hii ni programu ya kumalizia kosa ya ujuzi. Kwa sababu inaendelea, inasababisha kufikiria kosa na ujumbe. Kisha inaonyesha kosa na ujumbe, na inakamilisha programu.
Sasa, hatua yetu yameundwa programu ya kumalizia kosa, tunahitaji kuthibitisha wakati tunasababisha programu hii.
Set Error Handler
Programu ya kumalizia kosa ya PHP inaendelea kwa kufikiria programu ya kumalizia kosa ya kijana. Tunatenda kubadilisha programu hii kuwa programu ya kumalizia kosa ya kijana ya programu ya kusababisha kosa.
Inaweza kurekebisha programu ya kumalizia kosa, ili iweze kutumika kwa sababu ya kosa zingine, programu inayotumika kwa sababu ya kosa zingine. Kati ya hizi, tunatenda kusababisha programu yetu ya kumalizia kosa kwa kosa zote:
set_error_handler("customError");
Kwa sababu tunahitaji kwamba mifano yetu yafanywe kumalizia maadili yote, set_error_handler() inahitaji paramithi pekee, inaweza kuongezwa paramithi ya pili ili kubadilisha madaraja ya kosa.
Mivumbuzi
Kuandaa mshairi wa kesiwa kwa kumwambia uwanja hauonekani, kwa kumwambia mshairi wa kesiwa wa mshairi wetu:
<?php //error handler function function customError($errno, $errstr) { echo "<b>Habari:</b> [$errno] $errstr"; } //set error handler set_error_handler("customError"); //trigger error echo($test); ?>
Matokeo ya kifunguo hiki inahitajika kama hii:
Habari: [8] Jina la jina lililohusiana: test
Kufikia kesiwa
Kwenye eneo la ujumbe wa mwanasomaji katika mshairi, kama ujumbe wa mwanasomaji haukabidi kinaandikwa kesiwa ni muhimu sana. Kwenye PHP, kazi hii inatumiwa na trigger_error().
Mivumbuzi
Kwenye mivumbuzi hii, kama "test" inaingia namba kubwa ya "1", kinaandikwa kesiwa:
<?php $test=2; if ($test>1) { trigger_error("Kimaadili inahitajika kuwa 1 au chini ya 1"); } ?>
Matokeo ya kifunguo hiki inahitajika kama hii:
Habari: Kimaadili inahitajika kuwa 1 au chini ya 1 kwenye C:\webfolder\test.php kwenye mabaki ya 6
Unaweza kufikia habari za kesiwa kwenye eneo gani katika mshairi, kwa kutumia uagizaji wa pili, unaweza kuzingatia juhudi za kesiwa zilizochaguliwa.
Aina za habari za kesiwa za muhimu:
- E_USER_ERROR - Habari za kesiwa za run-time za kwanza zilizochaguliwa na mwanasomaji. Habari za kesiwa hazina ujaribiko wa kurekebisha. Mshairi haukutengwa kwa kufikia habari za kesiwa.
- E_USER_WARNING - Habari za kesiwa za run-time za kwanza zilizochaguliwa na mwanasomaji. Mshairi haukutengwa kwa kufikia habari za kesiwa.
- E_USER_NOTICE - Kwa kawaida. Habari za run-time zilizochaguliwa na mwanasomaji. Mshairi anafikia habari za kesiwa inayoweza kuwa na mafanikio ya kawaida wakati wa kumwimba mshairi.
Mivumbuzi
Kwenye mivumbuzi hii, kama "test" inaingia namba kubwa ya "1", kinaandikwa kesiwa E_USER_WARNING. Kama kesiwa E_USER_WARNING kinapatakiwa, tunaweza kutumia mshairi wa kesiwa wetu na kufikia mshairi:
<?php //error handler function function customError($errno, $errstr) { echo "<b>Kichwa:</b> [$errno] $errstr<br />"; echo "Kufikia Mshairi"; die(); } //set error handler set_error_handler("customError",E_USER_WARNING); //trigger error $test=2; if ($test>1) { trigger_error("Kimaangamizi kinahitajika 1 au chini",E_USER_WARNING); } ?>
Matokeo ya kifunguo hiki inahitajika kama hii:
Kichwa: [512] Kimaangamizi kinahitajika 1 au chini Kufikia Mshairi
Sasa, simekisia kama tunavyofanya kusikia kesiwa, na kama tunavyotumia kufaika kesiwa, tunaelewa sasa kusikia uarabesha wa kesiwa.
Kusikia habari za kesiwa
Kwa kimoja, kwa kuzingatia muundo wa error_log katika php.ini, PHP inapataa uarabesha wa kesiwa kwa mifumo wa kusasa wa maziko wa habari au faili. Kwa kutumia fungujo wa error_log(), unaweza kusikia uarabesha wa kesiwa kwa faili au uwanja wa upelekezo zaidi.
Kutumia barua pepe zaandiko kwa uwanja wa mengine wa kufikia habari za kesiwa kinaadui sana kwa kufikia habari za kesiwa zilizochaguliwa.
Kutumia habari za kesiwa kwa Email
Kwenye mifano hii, kama kimeangamizi kinaendelea, tutakupata barua yenye ujumbe wa kichwa na kumaliza skripti:
<?php //error handler function function customError($errno, $errstr) { echo "<b>Kichwa:</b> [$errno] $errstr<br />"; echo "Webmaster imewaripisha"; error_log("Kichwa: [$errno] $errstr",1, "someone@example.com","From: webmaster@example.com"); } //set error handler set_error_handler("customError",E_USER_WARNING); //trigger error $test=2; if ($test>1) { trigger_error("Kimaangamizi kinahitajika 1 au chini",E_USER_WARNING); } ?>
Matokeo ya kifunguo hiki inahitajika kama hii:
Kichwa: [512] Kimaangamizi kinahitajika 1 au chini Webmaster imewaripisha
Barua zilizotumika kutoka kwa kifunguo hiki inahusika kama hii:
Kichwa: [512] Kimaangamizi kinahitajika 1 au chini
Hii metodi haifai kwa mafanyikio yote. Mafanyikio ya kawaida yanaonekana kwa kutumia mbuga wa kuzingatia wa PHP kwenye serveri.