পিএইচপি এরর হ্যান্ডলার

যখন পিএইচপি স্ক্রিপ্ট লিখবেন বা কোন ওয়েব এপ্লিকেশন তৈরী করবেন তখন error handling এরএকটি গুরত্বপূর্ন ভুমিকা থাকে।যদি এরর (ভুল) চেকিং কোডে কোন ঘাটতি থাকে তাহলে আপনার প্রোগ্রামটি আর বেশি ভাল হবেনা এবং নিরাপত্তাজনিত ঝুকি থাকবে।
এই টিউটোরিয়ালে এরর চেকিং এর কিছু প্রচলিত পদ্ধতি নিয়ে আলোচনা করা হবে।যেমন
"die()" statements
Custom errors and error triggers
Error reporting

"die()" স্টেটমেন্ট  ব্যাবহার করে এরর হ্যান্ডল করা

এটা একটা ছোট কোড যেটা টেক্সক্ট ফাইল খুলবে।
1.<?php
2.$file=fopen("welcome.txt","r");
3.?>
যদি ফাইলটির কোন অস্তিতই না থাকে তাহলে ব্রাউজারে নিচের মত প্রদর্শন করবে।
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2
ইউজারকে উপরের মত মেসেজ থেকে মুক্তি দিয়ে নিজের মত বোধগম্য মেসেজ দিতে পারেন।যেমন
01.<?php
02.if(!file_exists("welcome.txt"))
03.{
04.die("File not found");
05.}
06.else
07.{
08.$file=fopen("welcome.txt","r");
09.}
10.?>
এবার যদি ফাইলটি না পায় তাহলে এই মেসেজ দেখাবে।
File not found
এই কোডটি উপরের কোডের চেয়ে একটু ভিন্ন।এটা একটা সাধারন পদ্ধতি এতে error হলে স্ক্রিপ্ট বন্ধ হয়ে যাবে।তবে এ পদ্ধতি ব্যাবহার করা অনেক সময় সঠিক নয়।

কাস্টম এরর হ্যান্ডলার তৈরী করা

এখানে আমি সাধারন একটা পিএইচপি ফাংশন তৈরী করব যেটা এরর হলে যেন call করা যায়।এই ফাংশনে কমপক্ষে দুটি(error level and error message) এবং সর্বোচ্চ পাচটি (optionally: file, line-number, and the error context)প্যারামিটার থাকবে।
error_function(error_level,error_message,
error_file,error_line,error_context)

প্যারামিটার বর্ননা
error_levelআবশ্যক।ইউজার কৃত ভুলের error report level সুনির্দিষ্ট করে।অবশ্যই একটাvalue number  থাকতে   হবে।নিচের টেবিলে সম্ভাব্য error report level দেয়া হল।
error_messageআবশ্যক। ইউজার কৃত ভুলের জন্য error message নির্দিষ্ট করে।
error_fileঐচ্ছিক। ঐ ফাইলটির নাম উল্লেখ করে যেখানে ভুল হয়েছে।
error_lineঐচ্ছিক। ঐ লাইনটির নাম উল্লেখ করে যেখানে ভুল হয়েছে।
error_contextঐচ্ছিক।একটা অ্যারে উল্লেখ(Specifies an array) করে যেখানে সব ভ্যারিয়েবল এবং তাদের মান থাকে।

এরর রিপোর্টিং এর মান(value)


মানConstantবর্ননা
2E_WARNINGrun-time errors. স্ক্রিপ্টের Execution বন্ধ হয়না
8E_NOTICERun-time notices.
256E_USER_ERROR ইউজারকৃত মারাত্নক ভুল।এটা  E_ERROR এর মত যেটা প্রোগ্রামার সেট করে দেয় PHP
function trigger_error() ব্যাবহার করে।
512E_USER_WARNING Runtime warnings generated by a call to trigger_error( )
1024E_USER_NOTICERuntime warnings generated by a call to trigger_error( )
4096E_RECOVERABLE_ERRORCatchable fatal error.
8191E_ALL সব errors এবং  warnings, শুধু level E_STRICT ছাড়া(E_STRICT PHP 6.0 এর E_ALL এর অংশ  হবে।)


এবার একটা ফাংশন তৈরী করব এরর হ্যান্ডল এর জন্য

1.function customError($errno, $errstr)
2.{
3.echo "<b>Error:</b> [$errno] $errstr<br />";
4.echo "Ending Script";
5.die();
6.}
এটা একটা সাধারন error handling ফাংশন।যখন এটা চলবে তখন এটা একটা error level এবং মেসেজ পাবে।এই লেভেল এবং মেসেজ আউটপুট হিসেবে দেখিয়ে স্ক্রিপ্ট সমাপ্ত করবে।


এরর হ্যান্ডলার সেট করা

পিএইচপিতে ডিফল্ট হিসেবে একটা error handler বিল্টইন থাকে।আপনি ইচ্ছে করলে এর পরিবর্তে  নিজের মত error handler  দিতে পারেন PHP তে।নিচের উদাহরনে দেখব কিভাবে এই নিজের তৈরী error handler ব্যাবহার করতে হয়
set_error_handler("customError");
যেহেতু error handle করার জন্য আমরা নিজের তৈরী ফাংশন ব্যাবহার করতে চাই,তাই set_error_handler()  এর একটা প্যারামিটার দরকার,২য় আরেকটা প্যারামিটার যোগ করা যেতে পারে error level এর জন্য।
এরকম একটা উদাহরন
01.<?php
02.//error handler function
03.function customError($errno, $errstr)
04.{
05.echo "<b>Error:</b> [$errno] $errstr";
06.}
07. 
08.//set error handler
09.set_error_handler("customError");
10. 
11.//trigger error
12.echo($test);
13.?>
উপরের কোডের আউটপুট হবে এমন
Error: [8] Undefined variable: test


কোন ভুলকে trigger করা

কোন স্ক্রিপ্ট যেখানে ইউজার ডেটা ইনপুট করতে পারে সেখানে trigger করা উপকারী যখন ইউজার ভুল/অবৈধ ইনপুট করবে।trigger_error() function দিয়ে এটা করা হয়।এই উদাহরনে test ভ্যারিয়েবল যদি ১ এর চেয়ে বড় হয় তখন error হবে।
1.<?php
2.$test=2;
3.if ($test>1)
4.{
5.trigger_error("Value must be 1 or below");
6.}
7.?>
আউটপুট
Notice: Value must be 1 or below
in C:\webfolder\test.php on line 6
একটা error কে স্ক্রিপ্টের যেকোন জায়গায় trigger করা যায় এবং আরেকটা প্যারামিটার যোগ করে নির্দিষ্ট করে দিতে পারেন যে কোন error level টি trigger করা হয়েছে।
সম্ভাব্য error এর ধরন
  • E_USER_ERROR
  • E_USER_WARNING
  • E_USER_NOTICE
উদাহরন
যদি test ভ্যারিয়েবল এর মান ১ এর চেয়ে বেশি হয় তাহলে এখানে E_USER_WARNING error টি হবে এবং এখন আমরা নিজের তৈরী error handler টি ব্যাবহার করব।
01.<?php
02.//error handler function
03.function customError($errno, $errstr)
04.{
05.echo "<b>Error:</b> [$errno] $errstr<br />";
06.echo "Ending Script";
07.die();
08.}
09. 
10.//set error handler
11.set_error_handler("customError",E_USER_WARNING);
12. 
13.//trigger error
14.$test=2;
15.if ($test>1)
16.{
17.trigger_error("Value must be 1 or below",E_USER_WARNING);
18.}
19.?>
আউটপুট
Error: [512] Value must be 1 or below
Ending Script


এরর লগিং

PHP তে error_log()  নামের একটা ফাংশন বিল্টইন আছে এটা দিয়ে যেখানে ইচ্ছা 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] Value must be 1 or below
Webmaster has been notified
এই কোডের কারনে এমন একটা মেইল পাবে
Error: [512] Value must be 1 or below

কোন মন্তব্য নেই

Blogger দ্বারা পরিচালিত.