పిహెచ్పి ఎరర్ హాండింగ్

పిహెచ్‌పి లో, అప్రమేయ సమస్యల ప్రాసెసింగ్ చాలా సరళం. ఒక సందేశం బ్రౌజర్ కు పంపబడుతుంది, దీనిలో ఫైల్ పేరు, వరుస సంఖ్య మరియు సమస్య వివరణ ఉంటుంది.

పిహెచ్పి ఎరర్ హాండింగ్

在创建脚本和 web 应用程序时,错误处理是一个重要的部分。如果您的代码缺少错误检测编码,那么程序看上去很不专业,也为安全风险敞开了大门。

ఈ పాఠ్యక్రమం ఫిల్హాల్లో అత్యంత ముఖ్యమైన అపరాధ పరిశీలన పద్ధతులను పరిచయం చేస్తుంది.

మేము వివిధ అపరాధ ప్రాసెసింగ్ పద్ధతులను మీకు గురించి చెప్పబోతున్నాము:

  • సరళ "డీ()" స్టేట్మెంట్
  • స్వంత అపరాధాలు మరియు అపరాధ రేక్ట్రిగ్గర్స్
  • అపరాధ నివేదిక

బేసిక్ అపరాధ ప్రాసెసింగ్: డీ() ఫంక్షన్ ఉపయోగించడం

సరళమైన టెక్స్ట్ ఫైల్ తెరవడం కోసం ఒక సాధారణ స్క్రిప్ట్ ప్రదర్శిస్తుంది:

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

ఫైల్ లేకపోయినప్పుడు, మీరు ఈ వంటి అపరాధాన్ని పొందుతారు:

అపరాధం: fopen(welcome.txt) [function.fopen]: స్ట్రీమ్ తెరవడానికి విఫలమైంది: 
కానీ ఫైల్ లేదా డిరెక్టరీ లేదు C:\webfolder\test.php లైన్ నంబర్ 2

పైని వంటి అపరాధ సందేశాన్ని వినియోగదారికి పొందించకుండా చేయడానికి, ఫైల్ ను ప్రవేశపెట్టడానికి ముందు ఫైల్ ఉనికిని పరిశీలించండి:

<?php
if(!file_exists("welcome.txt"))
 {
 die("File not found");
 }
లేకపోతే
 {
 $file=fopen("welcome.txt","r");
 }
?>

ఇప్పుడు, ఫైల్ లేకపోయినప్పుడు, మీరు ఈ వంటి అపరాధ సందేశాన్ని పొందుతారు:

ఫైల్ లేదు

పూర్వ కోడ్ కంటే పై కోడ్ చాలా సమర్థవంతం, ఇది అపరాధం తర్వాత స్క్రిప్ట్ నిలిపించడానికి ఒక సరళమైన అపరాధ ప్రాసెసింగ్ మెకానిజం ఉపయోగించింది.

కానీ, సరళంగా స్క్రిప్ట్ నిలిపించడం ఎల్లప్పుడూ సరియో కాదు. మార్గదర్శక PHP ఫంక్షన్స్ ను అపరాధం ప్రాసెస్ చేయడానికి పరిశీలించండి.

స్వంత అపరాధ ప్రాసెసర్ నిర్మించండి

ఒక స్వంత అపరాధ ప్రాసెసర్ నిర్మించడం చాలా సులభం. మేము ఫంక్షన్ నిర్మించాము, ఇది PHP లో అపరాధం జరిగినప్పుడు కాల్ చేయవచ్చు.

ఈ ఫంక్షన్ కనీసం కనీసం రెండు పారామీటర్లను (error level మరియు error message) ప్రాసెస్ చేయగలిగి ఉంటుంది, కానీ అత్యధికంగా ఐదు పారామీటర్లను (ఆప్టనల్: file, line-number మరియు error context) అంగీకరించవచ్చు:

సంభాషణం

error_function(error_level,error_message,
error_file,error_line,error_context)
పారామీటర్ 描述
error_level

అప్రభావితం. వినియోగదారి చేత నిర్వచించబడిన అపరాధం నివేదిక స్థాయిని నిర్వచించండి. అది మాత్రమే విలువను కలిగి ఉండాలి.

క్రింది పట్టికను చూడండి: అపరాధ నివేదిక స్థాయి.

error_message అప్రభావితం. వినియోగదారి చేత నిర్వచించబడిన అపరాధం వివరణ అపరాధ సందేశాన్ని నిర్వచిస్తుంది.
error_file 可选。规定错误在其中发生的文件名。
error_line 可选。规定错误发生的行号。
error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。

错误报告级别

这些错误报告级别是错误处理程序旨在处理的错误的不同的类型:

常量 描述
2 E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
8 E_NOTICE

Run-time 通知。

脚本发现可能有错误发生,但也可能在脚本正常运行时发生。

256 E_USER_ERROR ఫాటల్ వినియోగదారి జనరేటెడ్ ఎర్రోర్స్. ఇది ప్రోగ్రామర్లు PHP ఫంక్షన్ ట్రిగ్గర్‌ఎర్ర్ ఉపయోగించి సెట్ చేసిన E_ERROR వంటిది.
512 E_USER_WARNING అపరిగణించని వినియోగదారి జనరేటెడ్ అపరిగణించని నిష్కర్షలు. ఇది ప్రోగ్రామర్లు PHP ఫంక్షన్ ట్రిగ్గర్‌ఎర్ర్ ఉపయోగించి సెట్ చేసిన E_WARNING వంటిది.
1024 E_USER_NOTICE వినియోగదారి ద్వారా జనరేటెడ్ నోటిఫికేషన్. ఇది ప్రోగ్రామర్లు PHP ఫంక్షన్ ట్రిగ్గర్‌ఎర్ర్ ఉపయోగించి సెట్ చేసిన E_NOTICE వంటిది.
4096 E_RECOVERABLE_ERROR పికప్పబడే ఫాటల్ ఎర్రోర్స్. అలాగే E_ERROR, కానీ వాడిన అప్రమేయ హాండ్లర్ అన్నింటికీ పికప్పబడతాయి. (చూడండి set_error_handler())
8191 E_ALL

అన్ని ఎర్రోర్స్ మరియు అపరిగణించని నిష్కర్షలు, E_STRICT స్థాయిని మాత్రమే తప్ప.

(పిహెచ్‌పి ఆరో నిష్కర్షలో, E_STRICT అనేది E_ALL భాగంగా ఉంది)

ఇప్పుడు, మేము ఒక ఎర్రోర్ నిర్వహణ ఫంక్షన్ సృష్టించాలి:

function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "స్క్రిప్ట్ ముగింపు";
 die();
 }

పైని కోడ్ ఒక సాధారణ ఎర్రోర్ హాండ్లర్ ఫంక్షన్. దానిని తీవ్రంగా చేసినప్పుడు, అది ఎర్రోర్ స్థాయి మరియు ఎర్రోర్ సందేశాన్ని పొందుతుంది. అప్పుడు అది ఎర్రోర్ స్థాయి మరియు సందేశాన్ని అవుట్‌పుట్ చేస్తుంది మరియు స్క్రిప్ట్‌ను ముగిస్తుంది.

ఇప్పుడు, మేము ఒక ఎర్రోర్ హాండ్లర్ ఫంక్షన్ సృష్టించాము, మనం ఈ ఫంక్షన్‌ను ఎప్పుడు తీవ్రంగా చేయాలో నిర్ణయించాలి.

సెట్ ఎర్రోర్ హాండ్లర్

PHP యొక్క అప్రమేయ ఎర్రోర్ హాండ్లర్ అనేది అంతర్గత ఎర్రోర్ హాండ్లర్. మేము పైన ఫంక్షన్‌ను స్క్రిప్ట్ నిర్వహణ కాలంలో అప్రమేయ ఎర్రోర్ హాండ్లర్ అని చేయాలని నిర్ణయించాము.

ఎందుకంటే మేము కొన్ని పరిస్థితులకు మాత్రమే ఎర్రోర్ హాండ్లర్‌ను ఆపాదించాము, స్క్రిప్ట్‌కు వివిధ రీతులుగా ఎర్రోర్స్ నిర్వహించవచ్చు. కానీ, ఈ ఉదాహరణలో మేము అన్ని ఎర్రోర్స్ కు మా స్వంత ఎర్రోర్ హాండ్లర్ ను వాడాలని నిర్ణయించాము:

set_error_handler("customError");

మేము మా స్వంత ఫంక్షన్‌ను అన్ని పరిస్థితులకు పరిచయం చేయడానికి కావలసినప్పుడు, set_error_handler() ఫంక్షన్‌కు ఒక పరామితి అవసరం, రెండవ పరామితి మార్గదర్శక స్థాయిని నిర్ణయించవచ్చు.

实例

通过尝试输出不存在的变量,来测试这个错误处理程序:

<?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);
?>

పైని కోడ్ యొక్క అవుట్పుట్ ఇలా ఉండవచ్చు:

దోషం: [8] అనిర్దేశించబడని జాబితా: test

దోషం ప్రేరేపించడం

స్క్రిప్ట్ లో వినియోగదారి దిగుమతి స్థానంలో, వినియోగదారి దిగుమతి అనివార్యమైనప్పుడు దోషాన్ని ప్రేరేపించే మంచి పద్ధతి ఉంది. PHP లో, ఈ పనిని trigger_error() చేస్తుంది.

ఉదాహరణ

ఈ ఉదాహరణలో, జాబితా "test" విలువ "1" కంటే పెద్దవి అయితే, దోషం సంభవిస్తుంది:

<?php
$test=2;
if ($test>1)
{
trigger_error("Value must be 1 or below");
}
?>

పైని కోడ్ యొక్క అవుట్పుట్ ఇలా ఉండవచ్చు:

నోటీస్: విలువ "1" లేదా తక్కువ ఉండాలి
in C:\webfolder\test.php on line 6

మీరు స్క్రిప్ట్ లో ఏ స్థానంలోనైనా దోషాన్ని ప్రేరేపించవచ్చు. రెండవ పారామీటర్ ద్వారా, మీరు ప్రేరేపించబడే దోష స్థాయిని నిర్ణయించవచ్చు.

దోష రకాలు ఉన్నాయి:

  • E_USER_ERROR - అపాయకరమైన వినియోగదారి ద్వారా రన్ టైమ్ దోషం. దోషం తిరిగి పొందబడలేదు. స్క్రిప్ట్ నిర్వహణ అనుభంగం అయితే కూడా స్క్రిప్ట్ అనుభంగం అయితే కూడా.
  • E_USER_WARNING - అపాయకరమైన వినియోగదారి ద్వారా రన్ టైమ్ అప్రమేయం. స్క్రిప్ట్ యొక్క నిర్వహణ అనుభంగం అయితే కూడా స్క్రిప్ట్ అనుభంగం కాదు.
  • E_USER_NOTICE - అప్రమేయం. వినియోగదారి ద్వారా రన్ టైమ్ నోటీస్. స్క్రిప్ట్ లో సంభవించే సాధ్యమైన దోషాలను కనుగొనవచ్చు, కానీ స్క్రిప్ట్ సరిగా నడిచినప్పుడు కూడా దోషం సంభవించవచ్చు.

ఉదాహరణ

ఈ ఉదాహరణలో, జాబితా "test" విలువ "1" కంటే పెద్దవి అయితే, E_USER_WARNING దోషం సంభవిస్తుంది. E_USER_WARNING సంభవిస్తే, మా స్వంత దోష నిర్వహణ ప్రోగ్రామ్ ను వాడి స్క్రిప్ట్ నిర్మూలించబడుతుంది:

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "స్క్రిప్ట్ ముగింపు";
 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);
 }
?>

పైని కోడ్ యొక్క అవుట్పుట్ ఇలా ఉండవచ్చు:

విలువ ఉండాలి 1 లేదా దానికి కంటే తక్కువగా ఉండాలి [512]
స్క్రిప్ట్ ముగింపు

ఇప్పుడు, మేము స్వంత error లను సృష్టించడం మరియు వాటిని ప్రేరేపించడం నేర్చుకున్నాము. ఇప్పుడు, మేము దోష రికార్డింగ్ ను అధ్యయనం చేస్తాము.

దోష రికార్డింగ్

అప్రమేయంగా, php.ini ఫైలులో ఉన్న error_log అమర్పునకు అనుగుణంగా, PHP దోష రికార్డింగ్ సిస్టమ్ లేదా ఫైలుకు దోష రికార్డులను పంపుతుంది. error_log() ఫంక్షన్ ద్వారా, మీరు ప్రత్యేక ఫైలు లేదా దూరస్థ గమ్యానికి దోష రికార్డులను పంపవచ్చు.

మీరు స్వంత ఇమెయిల్ ద్వారా దోషపూరిత సందేశాన్ని పంపడం, ప్రత్యేక దోషాలను తెలియజేయడానికి ఒక మంచి పద్ధతి ఉంది.

ఇమెయిల్ ద్వారా దోషపూరిత సందేశాన్ని పంపండి

ఈ ఉదాహరణలో, ప్రత్యేకమైన పరిస్థితి జరిగితే, పరిస్థితి సందేశాన్ని కలిగిన మెయిల్ పంపి, స్క్రిప్ట్ అంతం చేయబడుతుంది:

<?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);
 }
?>

పైని కోడ్ యొక్క అవుట్పుట్ ఇలా ఉండవచ్చు:

విలువ ఉండాలి 1 లేదా దానికి కంటే తక్కువగా ఉండాలి [512]
వెబ్మాస్టర్ అనురూపించబడింది

పైని కోడ్ నుండి పొందబడిన మెయిల్ ఇలా ఉండవచ్చు:

విలువ ఉండాలి 1 లేదా దానికి కంటే తక్కువగా ఉండాలి [512]

ఈ పద్ధతి అన్ని పరిస్థితులకు సరిపోది కాదు. సాధారణ పరిస్థితులలో సరిపోది అయిన పరిస్థితులను సర్వదా సర్వర్ పైన అప్రిష్ట్ ఫంక్షన్స్ ద్వారా రికార్డ్ చేయాలి.