পিএইচপি এসকিউএল ওয়ার্ডপ্রেস জাভাস্ক্রিপ্ট জেকুয়েরি এইচটিএমএল
লগইন
×

পিএইচপি টিউটোরিয়াল

হোম-HOME ইনস্টল-Install গঠনপ্রনালী-Syntax চলক-Variable পিএইচপি Echo / Print তথ্যের ধরণ-Data Types কনস্ট্যান্ট-Constant অপারেটর-Operator ফাংশন-Function সুপারগ্লোভাল-Superglobal

কন্ট্রোল স্টেটমেন্ট

if স্টেটমেন্ট if...Else স্টেটমেন্ট Switch স্টেটমেন্ট While লুপ DO...While লুপ For লুপ

পিএইচপি এ্যারে এবং স্ট্রিং

এ্যারে-Array এ্যারে সর্টিং -Array Sorting মাল্টি এ্যারে-Multi Array স্ট্রিং-String

পিএইচপি এডভান্স

তারিখ এবং সময় পিএইচপি include ফাইল হ্যান্ডলিং-File Handling ফাইল খোলা/পড়া ফাইল তৈরি/লিখা ফাইল আপলোড কুকি-Cookie সেশন-Session ফিল্টার-Filter এডভান্স ফিল্টার-Advance Filter এঁরর হ্যান্ডলিং-Error Handling এক্সেপশন হ্যান্ডেলিং-Exception Handling

পিএইচপি ফরম

ফরম হ্যান্ডলিং ফরম ভ্যালিডেশন আবশ্যক ফরম ফিল্ড ফরম URL/E-mail সম্পূর্ণ ফরম

MySQL ডেটাবেজ

MySQL ডেটাবেজ MySQL ডেটাবেজ সংযোগ MySQL ডেটাবেজ তৈরী MySQL টেবিল তৈরী MySQL তথ্য ইনসার্ট MySQL শেষ আইডি পান MySQL একাধিক তথ্য ইনসার্ট MySQL প্রিপেয়ার্ড স্টেটমেন্ট MySQL তথ্য সিলেক্ট MySQL তথ্য ডিলিট MySQL তথ্য আপডেট MySQL সীমিত তথ্য সিলেক্ট

পিএইচপি- এক্সএমএল

PHP XML Parser PHP SimpleXML Parser PHP XML Parser PHP SimpleXML - Get PHP XML Expat PHP XML Dom

পিএইচপি - এজাক্স

পিএইচপি AJAX পরিচিতি AJAX পিএইচপি AJAX ডেটাবেজ AJAX এক্সএমএল AJAX সারাসরি সার্চ AJAX RSS রির্ডার AJAX Poll

পিএইচপি অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং(OOP)

OOP পরিচিতি OOP class তৈরী OOP objects তৈরী OOP $this কিওয়ার্ড OOP মেথড এবং প্রোপার্টি চেইনিং OOP অ্যাক্সেস মোডিফায়ার OOP ম্যাজিক মেথড এবং কন্সটেন্ট OOP ইনহেরিটেন্স OOP Abstract class এবং method OOP ইন্টারফেস OOP পলিমরফিজম OOP টাইপ হিন্টিং() OOP টাইপ হিন্টিনং ইন্টারফেস OOP স্ট্যাটিক মেথোড এবং প্রোপার্টি

পিএইচপি - রেফারেন্স

Array ফাংশন Calendar ফাংশন date/time ফাংশন Directory ফাংশন Error ফাংশন Filesystem ফাংশন Filter ফাংশন FTP ফাংশন HTTP ফাংশন libxml ফাংশন Mail ফাংশন Math ফাংশন Misc. ফাংশন MySQLi ফাংশন SimpleXML ফাংশন String ফাংশন XML Parser ফাংশন Zip File ফাংশন টাইমজোন Timezones
 

পিএইচপি Error হ্যান্ডেলিং


পিএইচপির ডিফল্ট error হ্যান্ডেলিং খুবই সাধারন। এক্ষেত্রে ফাইলের নাম, লাইনের নাম্বার এবং error এর বিবরণসহ ব্রাউজারে একটি মেসেজ পাঠায়।


পিএইচপি Error হ্যান্ডেলিং

যখন আমরা স্ক্রিপ্ট এবং ওয়েব এপ্লিকেশন তৈরি করবো, সেসময় আমাদেরকে প্রায়ই error এর সম্মুখিন হতে হবে। তাই যেকোন স্ক্রিপ্ট এবং ওয়েব এপ্লিকেশনের ক্ষেত্রে error হ্যান্ডেলিং একটি গুরুত্বপূর্ণ বিষয়। হ্যান্ডেলিং একটি গুরুত্ব পার্ট। আপনার কোডের মধ্যে যদি error চেকিং কোড না থাকে, তাহলে এটি দেখতে হয়তো অপেশাদার দেখাবে। পাশাপাশি এটি আপনার এপ্লিকেশনের সিকিউরিটি রিস্ক তৈরি করতে পারে।

এই টিউটোরিয়ালে আমরা পিএইচপির কমন কিছু error চেকিং মেথড দেখিয়েছি।

আমরা এখানে বিভিন্ন error হ্যান্ডেলিং মেথড দেখাবোঃ


বেসিক Error হ্যান্ডেলিং : die() ফাংশনের ব্যবহার

প্রথম উদাহরণটিতে একটি স্ক্রিপ্ট দেখানো হয়েছে যেটি একটি টেক্সট ফাইল ওপেন করেঃ

উদাহরণ

<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি উদাহরণ</title>
</head>
<body>

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

</body>
</html>

যদি ফাইলটি না থাকে তবে এটি এমন একটি error দেখাতে পারেঃ

Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2

উপরের মতো error মেসেজ প্রতোরোধ করার জন্য, আমরা ফাইলটি এক্সেস করার আগে ফাইলটি আছে কিনা তা টেস্ট করে নিবোঃ

উদাহরণ

<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি উদাহরণ</title>
</head>
<body>

<?php
if(!file_exists("welcome.txt")) {
  die("ফাইলটি পাওয়া যায়নি!");
} else {
  $file=fopen("welcome.txt","r");
}
?>

</body>
</html>

এখন যদি ফাইলটি না পাওয়া যায় তবে আপনি এমন একটি error মেসেজ দেখতে পাবেনঃ

ফাইলটি পাওয়া যায়নি!

উপরের কোডগুলো পূর্বের কোডগুলোর চেয়ে বেশি কার্যকরী, কারন এটি error ঘটার পর স্ক্রিপ্ট এক্সিকিউশন বন্ধ করে দেয়।

যাইকোন, শুধুমাত্র স্ক্রিপ্ট এক্সিকিউশন বন্ধ করা সবসময় সঠিক উপায় নাও হতে পারে। চলুন error হ্যান্ডেলিং করার বিকল্প পিএইচপি ফাংশনগুলো দেখিঃ


কাস্টম Error হ্যান্ডেলার তৈরি

কাস্টম error হ্যান্ডেলার তৈরি করার খুবই সহজ। আমরা একটি স্পেশাল error হ্যান্ডেলার ফাংশন তৈরি করবো যেটি error ঘটলে কল করা যাবে।

এই ফাংশনটি অবশ্যই কমপক্ষে দুটি প্যারামিটার হ্যান্ডেল করতে সক্ষম হতে হবে (error লেভেল এবং error মেসেজ) কিন্তু পাঁচটি পর্যন্ত প্যারামিটার থাকতে পারে (ঐচ্ছিকভাবেঃ ফাইল, লাইন নাম্বার এবং error কনটেক্সট):

সিনট্যাক্স

error_function(error_level,error_message,
error_file,error_line,error_context)
প্যারামিটার বিবরণ
error_level আবশ্যক। ব্যবহারকারী নির্ধারিত error এর জন্য error রিপোর্ট লেভেল নির্দেশ করে। ভ্যালুটি অবশ্যই একটি নাম্বার হতে হবে। সম্ভাব্য error রিপোর্ট লেভেলের জন্য নিচের টেবিলটি লক্ষ্য করুন।
error_message আবশ্যক। ব্যবহারকারী নির্ধারিত error এর জন্য একটি error মেসেজ নির্দেশ করে।
error_file ঐচ্ছিক। যেই ফাইলে error ঘটেছে সেই ফাইলটিকে নির্দেশ করে।
error_line ঐচ্ছিক। যে লাইনে error ঘটেছে সেই লাইনটিকে নির্দেশ করে।
error_context ঐচ্ছিক। যখন কোনো error সংগঠিত হয়, তখন সকল ভ্যারিয়েবল এবং তাদের ভ্যালু গুলো ধারন করার জন্য একটি array নির্দিষ্ট করে।

Error রির্পোটের লেভেল(level)

এই error রির্পোটের লেভেল গুলো ভিন্ন টাইপের। এক্ষেত্রে ব্যবহারকারী কর্তৃক ডিফাইনকৃত error হ্যান্ডেলার গুলো যে সকল ক্ষেত্রে ব্যবহার করতে পারবেনঃ

ভ্যালু কনস্ট্যান্ট বর্ণনা
2 E_WARNING নন-ফ্যাটাল(Non-fatal) রান-টাইম error। সম্পাদনকারী স্ক্রিপ্টটি বন্ধ হবে না।
8 E_NOTICE রান-টাইম নোটিশ। স্বাভাবিক ভাবে একটি স্ক্রিপ্ট রান করার সময় এমন কিছু খুঁজে পায় যা একটি error হতে পারে।
256 E_USER_ERROR ফ্যাটাল ব্যবহারকারী কর্তৃক তৈরি error। এটি E_ERROR এর মতই যা একজন প্রোগ্রামার পিএইচপি trigger_error() ফাংশনের মাধ্যমে সেট করে দেয়।
512 E_USER_WARNING নন-ফ্যাটাল(Non-fatal) ব্যবহারকারী কর্তৃক তৈরি সতর্কতা। এটি E_WARNING এর মতই যা একজন প্রোগ্রামার পিএইচপি trigger_error() ফাংশনের মাধ্যমে সেট করে দেয়।
1024 E_USER_NOTICE ব্যবহারকারী কর্তৃক তৈরি নোটিশ। এটি E_NOTICE এর মতই যা একজন প্রোগ্রামার পিএইচপি trigger_error() ফাংশনের মাধ্যমে সেট করে দেয়।
4096 E_RECOVERABLE_ERROR ক্যাচএবল(Catchable) ফ্যাটাল error। এটি E_ERROR এর মতই কিন্তু এটিকে ব্যবহারকারী কর্তৃক তৈরিকৃত error হ্যান্ডেলার দ্বারা ধরা সম্ভব।
8191 E_ALL সকল errors এবং সতর্কতা (পিএইচপি ৫.৪ এ E_STRICT টি E_ALL একটি অংশ হয়)

Error হ্যান্ডেল করার জন্য চলুন একটি ফাংশন তৈরি করিঃ

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

উপরের কোডটি একটি সাধারন error হ্যান্ডেলার ফাংশন। যখন এটি ট্রিগার করা হবে, তখন এটি error লেভেল এবং error মেসেজ দিবে। তারপর এটি error লেভেল এবং মেসেজ আউটপুট করবে এবং স্ক্রিপ্টটি টার্মিনেট(terminate) করবে।

যেহেতু আমরা একটি error হ্যান্ডেলিং ফাংশন তৈরি করেছি এখন আমাদের এটির ট্রিগার হওয়ার সময় নির্ধারন করে দিতে হবে।


Error হ্যান্ডেলার সেট

পিএইচপির বিল্ট-ইন error হ্যান্ডেলারগুলোই হচ্ছে এর ডিফল্ট error হ্যান্ডেলার। এখন আমরা স্ক্রিপ্টটির স্থায়িত্বকালের জন্য উপরের error হ্যান্ডেলারটিকে ডিফল্ট error হ্যান্ডেলার হিসেবে তৈরি করবো।

এহা সম্ভব যে, error হ্যান্ডেলারকে পরিবর্তনের মাধ্যমে শুধুমাত্র কিছু সংখ্যক error এ এটি প্রয়োগ করা যায়। এই পদ্ধতিতে স্ক্রিপটি বিভিন্ন উপায়ে বিভিন্ন error কে হ্যান্ডেল করতে পারে। যাইহোক, এই উদাহরণে আমরা সকল error এর জন্য আমাদের কাস্টম error হ্যান্ডেলার ব্যবহার করবোঃ

set_error_handler("customError");

যেহেতু আমরা সকল error হ্যান্ডেল করার জন্য কাস্টম ফাংশনটি ব্যবহার করতে চাচ্ছি, সেহেতু কাস্টম error এর জন্য set_error_handler() ফাংশন একটি প্যারামিটার ব্যবহার করবো। এছাড়াও error এর লেভেল নির্ধারণ করার জন্য আরেকটি প্যারামিটার ব্যবহার করতে পারি।

উদাহরণ

যেসকল ভ্যারিয়েবলের অস্তিত্ব নেই, সেগুলোর আউটপুট নেয়ার মাধ্যমে error হ্যান্ডেলারটকে যাচাই করিঃ

উদাহরণ

<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি উদাহরণ</title>
</head>
<body>

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

//error হ্যান্ডেলার সেট
set_error_handler("customError");

//error ট্রিগার
echo($test);
?>

</body>
</html>

উপরের কোডটির আউটপুট নিম্নের মতো করে দেখাবেঃ

Error: [8] Undefined variable: test

Error ট্রিগার

যেসকল স্ক্রিপ্টের মধ্যে ব্যবহারকারী তথ্য ইনপুট করতে পারে, যদি ব্যবহারকারী কোনো অবৈধ তথ্য ইনপুট করতে চায় সেক্ষেত্রে একটি error ট্রিগার হবে। পিএইচপিতে এটি trigger_error() ফাংশনের মাধ্যমে সম্পাদিত হয়।

উদাহরণ

এই উদাহরণে যদি "test" ভ্যারিয়েবলের ভ্যালু "5" এর চেয়ে বেশি হয় সেক্ষেত্রে একটি error ঘটবেঃ

উদাহরণ

<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি উদাহরণ</title>
</head>
<body>

<?php
$test=9;

if ($test>=5) {
  trigger_error("Value must be 5 or below");
}
?>

</body>
</html>

উপরের কোডটির আউটপুট নিম্নের মতো করে দেখাবেঃ

Notice: Value must be 5 or below
in C:\wamp\www\test.php on line 6

আপনার ইচ্ছানুযায়ী একটি স্ক্রিপ্টের যেকোনো স্থানেই error ট্রিগার করতে পারেন এবং দ্বিতীয় প্যারামিটার যুক্ত করার মাধ্যমে কোন error লেভেলটি ট্রিগার হবে তাও নির্ধারণ করে দিতে পারেন।

সম্ভাব্য error টাইপসমূহঃ

উদাহরণ

এই উদাহরণে যদি "test" ভ্যারিয়েবলের ভ্যালু "5" এর চেয়ে বেশি হয় তাহলে E_USER_WARNING error টি ঘটবে। যদি E_USER_WARNING error টি ঘটে সেক্ষেত্রে আমরা আমদের কাস্টম error হ্যান্ডেলারটি ব্যবহার করবো এবং স্ক্রিপ্টটি শেষ করবোঃ

উদাহরণ

<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি উদাহরণ</title>
</head>
<body>

<?php
//error হ্যান্ডেলার ফাংশন
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

//error হ্যান্ডেলারটি সেট
set_error_handler("customError",E_USER_WARNING);

//error ট্রিগার
$test=9;
if ($test>=5) {
  trigger_error("Value must be 5 or below",E_USER_WARNING);
}
?>

</body>
</html>

উপরের কোডটির আউটপুট নিম্নের মতো করে দেখাবেঃ

Error: [512] Value must be 5 or below
Ending Script

এতোক্ষন আমরা শিখেছি কিভাবে কাস্টম error তৈরি এবং তাদের ট্রিগার করতে হয়, চলুন এখন তাহলে error logging সম্পর্কে জানি।


Error Logging(লগিং)

ডিফল্টভাবে, পিএইচপি সার্ভারের লগিং সিস্টেমে অথবা একটি ফাইলে error log পাঠায়, যাহা php.ini ফাইলের error_log কনফিগারেশনের উপর নির্ভর করে। error_log() ফাংশনটি ব্যবহারের মাধ্যমে আপনি একটি নির্দিষ্ট ফাইলে অথবা নির্দিষ্ট গন্তব্যস্থলে error log পাঠাতে পারেন।

নির্দিষ্ট error সম্পর্কে অবগত হওয়ার জন্য error মেসেজগুলো আপনার ই-মেইলে পাঠানো একটি ভালো উপায়।

ই-মেইলের মাধ্যমে Error মেসেজ

নিচের উদাহরণে একটি নির্দিষ্ট error ঘটলে স্ক্রিপ্টটির শেষে ই-মেইলের মাধ্যমে একটি error মেসেজ পাঠানো হবেঃ

উদাহরণ

<!DOCTYPE html>
<html>
<head>
 <title>পিএইচপি উদাহরণ</title>
</head>
<body>

<?php
//error হ্যান্ডেলার ফাংশন
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Satt Academy has been notified";
  error_log("Error: [$errno] $errstr",5,
  "someone@example.com","From: satt_academy@example.com");
}

//error হ্যান্ডেলার সেট
set_error_handler("customError",E_USER_WARNING);

//error ট্রিগার
$test=9;
if ($test>=5) {
  trigger_error("Value must be 5 or below",E_USER_WARNING);
}
?>

</body>
</html>

উপরের কোডটির আউটপুট নিম্নের মতো করে দেখাবেঃ

Error: [512] Value must be 5 or below
Satt Academy has been notified

উপরের কোডটি থেকে যে মেইলটি পাওয়া যাবে সেটি দেখতে নিম্নের মতো দেখাবেঃ

Error: [512] Value must be 5 or below

এটি সকল error এর ক্ষেত্রে ব্যবহার করা উচিৎ নয়। রেগুলার error গুলো ডিফল্টভাবে সার্ভারে সংরক্ষন করা উচিত।