Error Handling ng PHP
- Previous Page PHP Secure E-mail
- Next Page PHP Exception
Sa PHP, ang default na pagtanggap ng error ay napakasimple. Ang isang mensahe ay ipapadala sa browser, na may pangalang ng file, numero ng linya at isang paglalarawan ng mensahe ng error.
Error Handling ng PHP
Sa paglikha ng script at web application, ang pagkakamali ay isang mahalagang bahagi. Kung wala sa iyong code ang deteksyon ng pagkakamali, ang programo ay mukhang hindi propesyonal at buksan din ang pinto sa mga panganib sa seguridad.
Ang tutorial na ito ay nagturo ng pinaka mahalagang mga paraan ng deteksyon ng pagkakamali sa PHP.
Sasalamin namin ang iba't ibang paraan ng pagkakamali sa PHP:
- Simple "die()" statement
- Sariling pagkakamali at trigger ng pagkakamali
- Ulat ng pagkakamali
Bastang pagkakamali: Gamit ang function die()
Unang halimbawa ng isang simple script para buksan ang isang tekstmong file:
<?php $file=fopen("welcome.txt","r"); ?>
Kung wala ang file, makakakuha ka ng isang pagkakamali tulad nito:
Warning: fopen(welcome.txt) [function.fopen]: nabigong buksan ang stream: Wala ang file o direktoryo sa C:\webfolder\test.php sa linya 2
Upang maiwasan na makakakuha ng mensahe ng pagkakamali tulad ng ito ang gumagamit, sinusuri namin kung mayroon ang file bago aksessin ito:
<?php if(!file_exists("welcome.txt")) { die("Wala ang file"); } else { $file=fopen("welcome.txt","r"); } ?>
Ngayon, kung wala ang file, makakakuha ka ng isang mensahe ng pagkakamali tulad nito:
Wala ang file
Higit sa nakaraang code, ang ito ay mas mabisa dahil ginamit nito ang isang simpleng mekanismo ng pagkakamali sa pagtatapos ng script pagkatapos ng pagkakamali.
Gayunpaman, ang pagtatapos lamang ng script ay hindi palaging ang tamang paraan. Salihin namin ang alternatibong PHP function na ginamit sa pagtratrabaho ng pagkakamali.
Paglikha ng sariling error handler
Ang paglikha ng isang sariling error handler ay napakasimple. Ginawa namin isang eksklusibong function na pwedeng tawagan kapag may pagkakamali sa PHP.
Ang function na ito ay dapat magkaroon ng kakayahan na magtrabaho sa kahit anong dalawang parameter (lebel ng pagkakamali at mensahe ng pagkakamali), ngunit maaaring tanggapin hanggang limang parameter (hiniling: file, line-number at error context):
Syntax
error_function(error_level, error_message,, error_file, error_line, error_context)
Parameter | Description |
---|---|
error_level | Wakasan. Ang lebel ng ulat ng pagkakamali ay tinukoy ng gumagamit. Dapat ito ay isang halaga ng bilang. Tingnan ang sumusunod na talahanayan: Lebel ng ulat ng pagkakamali. |
error_message | Wakasan. Ang mensahe ng pagkakamali ay tinukoy ng pagkakamali na itinukoy ng gumagamit. |
error_file | Optional. Tukuyin ang pangalan ng file kung saan nangyari ang error. |
error_line | Optional. Tukuyin ang numero ng linya kung saan nangyari ang error. |
error_context | Optional. Tukuyin ang isang array na naglalaman ng bawat variable na kasalukuyan kapag may error at ang kanilang halaga. |
Error Reporting Levels
Ang mga level ng pag-ulat ng error na ito ay iba't ibang uri ng error na inaasahang mahawak ng error handler:
Value | Constant | Description |
---|---|---|
2 | E_WARNING | Non-fatal run-time error. Hindi nagpahinto sa pagpapatuloy ng pagpapatupad ng script. |
8 | E_NOTICE | Run-time notification. Ang script ay nakita na maaring may error, ngunit maaaring mangyari din habang gumagana naman ang script. |
256 | E_USER_ERROR | Fatal user-generated error. Katulad ng E_ERROR na itinakda ng programmer gamit ang PHP function trigger_error(). |
512 | E_USER_WARNING | Non-fatal user-generated warning. Katulad ng E_WARNING na itinakda ng programmer gamit ang PHP function trigger_error(). |
1024 | E_USER_NOTICE | User-generated notification. Katulad ng E_NOTICE na itinakda ng programmer gamit ang PHP function trigger_error(). |
4096 | E_RECOVERABLE_ERROR | Makakatanggap ng matinding error. katulad ng E_ERROR, ngunit makakatanggap ng user-defined handler (tingnan ang set_error_handler()). |
8191 | E_ALL | Lahat ng error at warning, maliban sa E_STRICT level. (Sa PHP 6.0, ang E_STRICT ay bahagi ng E_ALL) |
Ngayon, magtayo tayo ng isang function na maghawak ng error:
function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Tapusin ang Script"; die(); }
Ang code sa itaas ay isang simple error handling function. Kapag ito ay nagiging trigger, ito ay magkukuha ng antas ng error at mensahe ng error. Pagkatapos, ito ay maglathala ng antas ng error at mensahe, at ito ay magtatapos ang script.
Ngayon, nakapaglilikha na namin ng error handling function, kailangan naming matukoy kung kailan ito ay magiging trigger.
Set Error Handler
Ang default na error handler ng PHP ay ang in-built error handler. Nais namin na palitan ang function sa itaas bilang ang default error handler ng script sa panahon ng paglulunsad.
Maaaring baguhin ang error handler upang gamitin lamang sa ilang error, sa gayon ay maaaring gamitin ng script ang iba't ibang paraan upang mahawak ng iba't ibang error. Gayunpaman, sa kasalukuyang halimbawa, nais namin na gamitin ang aming sariling custom error handler para sa lahat ng error:
set_error_handler("customError");
Dahil namin ay gusto namin na ang aming sariling function na maghawak ng lahat ng error, ang set_error_handler() ay kailangan lang ng isang parameter, pero maari ring magdagdag ng pangalawang parameter upang tukuyin ang antas ng error.
Mga halimbawa
Subukan ang paglalarawan ng error handler sa pamamagitan ng paglalarawan ng wala sa variable na umiiral:
<?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); ?>
The output of the above code should be similar to this:
Error: [8] Wala sa variable: test
Itakbo ang Error
Sa lugar ng pagipili ng user ng data sa script, kapag ang input ng user ay hindi wasto, ito ay isang napaka-mahusay na paraan upang itakbo ang error. Sa PHP, ginagawa ito ng function na trigger_error().
Halimbawa
Sa kasong ito, kapag ang variable na "test" ay mas malaki sa "1", magiging error ang ito:
<?php $test=2; if ($test>1) { trigger_error("Ang halaga ay dapat 1 o mas mababa"); } ?>
The output of the above code should be similar to this:
Notice: Ang halaga ay dapat 1 o mas mababa sa C:\webfolder\test.php sa linya 6
Maaaring itakbo ang error sa kahit anong lugar ng script, sa pamamagitan ng ikalawang parameter, maari mong itukoy ang antas ng error na ito.
Posibleng mga uri ng error:
- E_USER_ERROR - Maparusang error na nilikha ng user sa runtime. Ang error ay hindi mapapalawak. Ang epekto ng script ay ititigil.
- E_USER_WARNING - Hindi maparusang alalahanin na nilikha ng user sa runtime. Hindi ito ititigil ang epekto ng script.
- E_USER_NOTICE - Default. Ang notisya na nilikha ng user sa runtime. Ang script ay nakita ng posibleng error, maaaring nangyari din kapag gumagana nang maayos ang script.
Halimbawa
Sa kasong ito, kapag ang variable na "test" ay mas malaki sa "1", magiging E_USER_WARNING ang error. Kapag nangyari ang E_USER_WARNING, gamit namin ang ating sariling handler ng error at tapusin ang script:
<?php //error handler function function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Tapusin ang 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); } ?>
The output of the above code should be similar to this:
Error: [512] Value must be 1 or below Tapusin ang Script
Ngayon, nakuha na namin kung paano lumikha ng ating sariling error at kung paano sila ito nagbibigay, ngayon aaral namin ang tala ng error.
Tala ng Error
Pangkaraniwan, ayon sa konfigurasyon ng error_log sa php.ini, nagpadala ang PHP ng mga tala ng error sa sistema ng tala ng error ng server o sa isang file. Sa pamamagitan ng paggamit ng function na error_log(), maari mong ipadala ang mga tala ng error sa tukoy na file o malayong destinasyon.
Ipagpadala mo ang isang maling mensahe sa iyong sarili sa pamamagitan ng email ay isang mahusay na paraan upang makakuha ng tukoy na mensahe tungkol sa maling mensahe.
Magpadala ng maling mensahe sa pamamagitan ng E-Mail
In the following example, if a specific error occurs, we will send an email with the error message and end the script:
<?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, "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("Value must be 1 or below",E_USER_WARNING); } ?>
The output of the above code should be similar to this:
Error: [512] Value must be 1 or below Webmaster has been notified
The email received from the above code is similar to this:
Error: [512] Value must be 1 or below
This method is not suitable for all errors. Routine errors should be logged on the server by using the default PHP logging system.
- Previous Page PHP Secure E-mail
- Next Page PHP Exception