PHP စကာတင် အမှား ပြုလုပ်

ပမာဏ ပိုင်းတွင် ၊ အခြေခံ အမှား ဖြည့်ဖျက် ပြုလုပ်ခြင်း အနှစ်ဆုံး ကောင်းနိုင်သည်။ အမှား အစီအစဉ် တစ်ခု ကို ဘရောက်ကွန်း သို့ ပေးပို့ကြလေ့ ရှိ၏။ အမှား အစီအစဉ် အရ ဖြစ်ပေါ်လာသော ဖြစ်ပေါ်မှု အမည်၊ ဖြစ်ပေါ်မှု စာကြိုး နှင့် အမှား ဖော်ပြချက် တစ်ခု ပါဝင်သည်။

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

比起之前的代码,上面的代码更有效,这是由于它采用了一个简单的错误处理机制在错误之后终止了脚本。

သို့သော် အဆိုပါ အပြင်းအထန် အပိုင်းစာ ပြီးခဲ့သည် မှာ အချက်အလက် မဟုတ် ဖြစ်ပါ။ အမှား ကို ပြုပြင်ပေးသည့် အခုယူဆောက် 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 函数 trigger_error() 设置的 E_ERROR。
512 E_USER_WARNING အသုံးပြု သူ ဖြစ် ပေါ် သည် အကြောင်း အားလျော် ပြီး အဆိုပါ E_WARNING နှင့် အတူ ဖြစ် သော အကြောင်း ဖြစ် သည်။
1024 E_USER_NOTICE အသုံးပြု သူ ဖြစ် ပေါ် သည် အချိန်။ အဆိုပါ E_NOTICE နှင့် အတူ ဖြစ် သော အချိန် ဖြစ် သည်။
4096 E_RECOVERABLE_ERROR အသုံးပြု ရန် အခြေခံ အမှား။ အဆိုပါ E_ERROR နှင့် အတူ ဖြစ် သော အမှား ဖြစ် သည် သို့သော် အသုံးပြု ရန် အခြေခံ အက်ဥပဒ် ပုံစံ ကို အသုံးပြု နိုင် သည် (ကျွန်တော်တို့ သဘောတူ ပြီ)
8191 E_ALL

အမှား နှင့် အကြောင်း အားလျော် ပြီး E_STRICT အချိန် ကို အသုံးပြု သည်။

(ပြီးတော့ PHP 6.0 တွင် E_STRICT သည် E_ALL တစ် ပုံစံ ဖြစ်သည်)

ကျွန်တော်တို့ သည် အက်ဥပဒ် ဖြစ်ပေါ် ကို ဖြင့် ပြီး အက်ဥပဒ် ပုံစံ ကို ဖွဲ့စည်း ရန် ကျွန်တော်တို့ သဘောတူ ပြီ။

function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Ending Script";
 die();
 }

အဆိုပါ အော်ပရာ သည် အမှား ဖြစ်ပေါ် သည် အချိန် ကို အက်ဥပဒ် ပုံစံ ဖြစ် သည်။ အက်ဥပဒ် ဖြစ်ပေါ် သည် အချိန် ကို ဖြစ်ပေါ် ပြီး အမှား အချိန် နှင့် အက်ဥပဒ် အချိန် ကို ထုတ်ဖိုက် ပြီး အော်ပရာ ကို သတ်မှတ် ပြီး ပုံစံ ကို ပိတ်ပင် ပြီး နောက်ပိုင်း ပုံစံ ကို အသုံးပြု ရန် မရှိ။

ကျွန်တော်တို့ သည် အက်ဥပဒ် ဖြစ်ပေါ် သည် အချိန် ကို အက်ဥပဒ် ပုံစံ ကို အသုံးပြု ရန် ကျွန်တော်တို့ သဘောတူ ပြီ။

Set Error Handler

PHP ရှိ အမှား ဖြစ်ပေါ် ပြီး အက်ဥပဒ် ဖြစ် သည် အဆိုပါ ပုံစံ ကို ပြောင်းလဲ ပြီး အဆိုပါ ပုံစံ ကို အဆိုပါ အော်ပရာ တွင် လက်ခံ အသုံးပြု ရန် ကျွန်တော်တို့ ကြိုးစား ပြီ။

အမှား ဖြစ်ပေါ် သော တခုခု သာ အသုံးပြု ပြီး အက်ဥပဒ် ဖြစ်ပေါ် သည် မည်သို့ ကြောင်း ဖြင့် အသုံးပြု ပြီး အခြား အက်ဥပဒ် ကို အခြား အကြောင်း ဖြင့် အသုံးပြု နိုင် သော အက်ဥပဒ် ဖြင့် အသုံးပြု ရန် ကျွန်တော်တို့ သဘောတူ ပြီ။

set_error_handler("customError");

ကျွန်တော်တို့သည် ကိုယ်ပိုင် အက်ဥပဒ် ပုံစံ ကို အမှား အား နားနာ ပြီး အသုံးပြု သော်လည်း set_error_handler() အတွက် သာ တစ် ပြက္ခဒ် သာ လိုအပ် ပြီး ဒုတိယ ပြက္ခဒ် ကို အသုံးပြု ပြီး အမှား အချိန် ကို ချဲ့ချဲ့ ကူညီ နိုင်သည်။

实例

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

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "Error: [$errno] $errstr";
 }
//set error handler
set_error_handler("customError");
//trigger error
echo($test);
?>

အမှုန်း အရာ အပေါ်မှ အသုံးပြုထားသော အီးမေးပါး အသုံးပြုမှု အသို့မဟုတ်

Error: [8] Undefined variable: test

触发错误

在脚本中用户输入数据的位置,当用户的输入无效时触发错误的很有用的。在 PHP 中,这个任务由 trigger_error() 完成。

အမှတ်ပြ

ဤအမှတ်တွင် အကျယ် "test" အမှတ် အပိုသည့် အမှာမပြန်တင်ပေး ဖြစ်ပါက

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

အမှုန်း အရာ အပေါ်မှ အသုံးပြုထားသော အီးမေးပါး အသုံးပြုမှု အသို့မဟုတ်

Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6

သင့် အစီအစဉ် အမှတ်တွင် အမှာမပြန်တင်ပေး ဖွင့်လိုက်နိုင်သည် နှင့် ပြင်ပ အစီအစဉ် ပြင်းပြင်းထန်ထန် အမှာမပြန်တင်ပေး အခြေခံ အား သတ်မှတ်ပါ

အမှာမပြန်တင်ပေး အမျိုးအစားများ

  • E_USER_ERROR - မမြတ်တရား အသုံးပြုထားသော အခမဲ့ အခြေခံ အမှာမပြန်တင်ပေး။ အမှာမပြန်တင်ပေး မပြန်တက်ခြင်း မရှိပါ
  • E_USER_WARNING - မမြတ်တရား အသုံးပြုထားသော အခမဲ့ အခြေခံ သတင်းမပြန်တင်ပေး။ အစီအစဉ် ဖြစ်ပါက ပြတ်တောက်ခြင်း မပြုပါ
  • E_USER_NOTICE - ပုံမှန်။ အသုံးပြုထားသော အခမဲ့ အခြေခံ အခြေခံ သတင်းမပြန်တင်ပေး။ အစီအစဉ် အခြေခံ ကျယ်ပြီး အမှာမပြန်တင်ပေး ဖြစ်ပါက အစီအစဉ် ဖြစ်သည်

အမှတ်ပြ

ဤအမှတ်တွင် အကျယ် "test" အမှတ် အပိုသည့် အမှာမပြန်တင်ပေး ဖြစ်ပါက အသုံးပြုထားသော အမှာမပြန်တင်ပေး ဖြစ်ပါက ကိုယ်ပိုင် အမှာမပြန်တင်ပေး ဖွင့်လိုက်ပါသည် နှင့် အစီအစဉ် ပြတ်တောက်သည်

<?php
//error handler function
function customError($errno, $errstr)
 { 
 echo "<b>Error:</b> [$errno] $errstr<br />";
 echo "Ending 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);
 }
?>

အမှုန်း အရာ အပေါ်မှ အသုံးပြုထားသော အီးမေးပါး အသုံးပြုမှု အသို့မဟုတ်

Error: [512] ကြောင်းလုပ် အား 1 သို့ မဟုတ် အောက်မှာ သင့်ပါ
အစီအစဉ်အဖြစ် ပြီ

ကြာင်း ကျွန်တော်တို့ ကို ကိုယ်ပိုင် error ကို ဖန်တီးခြင်း နှင့် သတ်မှတ်ထားသော အမှာမပြန်တင်ပေးမှုများ အား ဖွင့်လိုက်ခြင်း ကို သိရှိပြီးနောက် ကျွန်တော်တို့ အမှာမပြန်တင်ပေး ကျမ်းကို လေ့လာပါ

အမှာမပြန်တင်ပေး

မြန်မာပြည့်ပြိုင်ဖြူ အင်တာနက် မှ မှားယွင်းသည် ဖြစ်ပါက ပြင်းပြင်းထန်ထန် သတင်းမှားယွင်း အင်တာနက် အားလုံး သို့မဟုတ် ဖိုင်များ သို့ အမှာမပြန်တင်ပေးပါသည်။ 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);
 }
?>

အမှုန်း အရာ အပေါ်မှ အသုံးပြုထားသော အီးမေးပါး အသုံးပြုမှု အသို့မဟုတ်

Error: [512] ကြောင်းလုပ် အား 1 သို့ မဟုတ် အောက်မှာ သင့်ပါ
Webmaster က အသိပေးခဲ့သည်

အမှုန်း အရာ အပေါ်မှ ခေါ်ယူထားသော အီးမေးပါး အသုံးပြုမှု အသို့မဟုတ်

Error: [512] ကြောင်းလုပ် အား 1 သို့ မဟုတ် အောက်မှာ သင့်ပါ

အမှုန်း အရာတခုခု မပါဘဲ အသုံးပြုခြင်း မဟုတ်ပါ။ အမှုန်း အရာတခုခု သုံးစွဲခြင်း ဖြင့် နည်းပါးစွာ ကျွန်းကျင်ခြင်း ကို နည်းပါးစွာ ကျွန်းကျင်ပါ။