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

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

হোম-HOME পরিচিতি-Introduction ইনস্টল-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 স্ট্যাটিক মেথোড এবং প্রোপার্টি

 

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


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


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

আপনি যখন পিএইচপি স্ক্রিপ্ট এবং ওয়েব এপ্লিকেশন তৈরি করবেন তখন প্রায় সময়েই আপনাকে বিভিন্ন ধরণের error এর সম্মুখিন হতে হবে। তাই যেকোনো স্ক্রিপ্ট এবং ওয়েব এপ্লিকেশনের ক্ষেত্রে error নিয়ন্ত্রণ(handling) সম্মন্ধে জানা অত্যাবশ্যক।

আপনার কোড/এপ্লিকেশন এর মধ্যে যদি error চেক করার জন্য কোনো কোড না থাকে, তাহলে এই কোডগুলো অনেকটা অপেশাদার ডেভেলপার কর্তৃক লেখা কোড এর মত দেখাবে। এছাড়া এটি আপনার এপ্লিকেশন এর নিরাপত্তা ঝুঁকিও বাড়িয়ে দিতে পারে।

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

  • "die()" ফাংশন
  • ইউজার কর্তৃক error তৈরি এবং error ট্রিগার/কল করা
  • এরর রিপোর্ট করা

এরর নিয়ন্ত্রণে die() ফাংশন এর ব্যবহার

নিন্মের উদাহরণের মাধ্যমে একটি এইচটিএমএল ফাইল ওপেন করার চেষ্টা করা হয়েছে। কিন্তু ফাইলটি বিদ্যমান না থাকায় সিস্টেম কর্তৃক এরর উৎপন্ন হবে।

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

<?php
 $file=fopen("test.html","r");
?>

</body>
</html>

ফলাফল
( ! ) Warning: fopen(test.html): failed to open stream: No such file or directory in C:\Users\Azizur Rahman\Dropbox\satt_develop\php\php_error.php on line 9
Call Stack
#TimeMemoryFunctionLocation
10.0005235896{main}( )...\php_error.php:0
20.0005236104fopen ( )...\php_error.php:55

উপরের error মেসেজ প্রতিরোধ করার জন্য আপনি ফাইলটি এক্সেস করার আগে ফাইলটি আছে কিনা চেক করে নিতে পারেন। ফাইলটি যদি বিদ্যমান না থাকে তবে আপনি die() ফাংশন এর মাধ্যমে একটি error মেসেজ দেখাতে পাবেনঃ

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

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

</body>
</html>

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

দ্বিতীয় উদাহরণের কোডগুলো প্রথম উদাহরণের কোডগুলোর চেয়ে বেশী কার্যকরী, কারন এটি error ঘটার সঙ্গে সঙ্গে একটি এরর মেসেজ উৎপন্ন করে এবং স্ক্রিপ্ট এক্সিকিউশন বন্ধ করে দেয়।

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


নিজস্ব Error হ্যান্ডেলার তৈরি

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

এই ফাংশনটির কমপক্ষে দুটি প্যারামিটার(যেমন- error_level এবং error_message) হ্যান্ডেল করার সক্ষমতা থাকতে হবে। যাইহোক এটি পাঁচটি পর্যন্ত প্যারামিটার গ্রহন করতে পারে।

সিনট্যাক্স

error_function(error_level,error_message,
    error_file,error_line,error_context)

প্যারামিটার এর ব্যাখ্যা

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

Error এর বিভিন্ন লেভেল

পিএইচপিতে বিভিন্ন টাইপের এরর সংঘটির হয়। নিম্নে error লেভেল এর ভ্যালুসহ বর্ণনা তুলে ধরা হল

ভ্যালু কনস্ট্যান্ট বর্ণনা
1 E_ERROR Fatal run-time errors. এটা ঐ ধরণের এরর কে নির্দেশ করে যা রিকাভার(recover) করা যায়। যেমন- মেমোরি এলোকেশন। এটি স্ক্রিপ্ট এর এক্সিকিউশন থামিয়ে দেয়।
2 E_WARNING Fatal run-time errors। স্ক্রিপ্ট এর এক্সিকিউশন বন্ধ হবে না।
4 E_PARSE Compile-time parse errors। এই ধরণের এরর পার্সার কর্তৃক উৎপন্ন হয়।
8 E_NOTICE Run-time notices। স্ক্রিপ্টে এমন কিছু কোড থেকে যেখানে সম্ভবত এরর থাকতে পারে। এক্ষেত্রে স্ক্রিপ্টটি স্বাভাবিকভাবেই এক্সিকিউশন হয়।
16 E_CORE_ERROR Fatal errors। পিএইচপি শুরু হওয়ার সময়ই এধরণের এরর ঘটে। এটি E_ERROR এর মতই, শুধুমাত্র পার্থক্য হলো এটি কোর পিএইচপি কর্তৃক উৎপন্ন হয়।
32 E_CORE_WARNING Warnings (non-fatal errors)। পিএইচপি শুরু হওয়ার সময়ই এধরণের এরর ঘটে। এটি E_WARNING এর মতই, শুধুমাত্র পার্থক্য হলো এটি কোর পিএইচপি কর্তৃক উৎপন্ন হয়।
64 E_COMPILE_ERROR Fatal compile-time errors। এটি E_ERROR এর মতই, শুধুমাত্র পার্থক্য হলো এটি জেন্ড ইঞ্জিন কর্তৃক উৎপন্ন হয়।
128 E_COMPILE_WARNING Compile-time warnings (non-fatal errors)। এটি E_WARNING এর মতই, শুধুমাত্র পার্থক্য হলো এটি জেন্ড ইঞ্জিন কর্তৃক উৎপন্ন হয়।
256 E_USER_ERROR User-generated error messager। এটি E_ERROR এর মতই, শুধুমাত্র পার্থক্য হলো এটি পিএইচপি trigger_error() ফাংশনের মাধ্যমে উৎপন্ন হয়।
512 E_USER_WARNING User-generated warning message। এটি E_WARNING এর মতই, শুধুমাত্র পার্থক্য হলো এটি trigger_error() ফাংশনের মাধ্যমে উৎপন্ন হয়।
1024 E_USER_NOTICE User-generated notice message। এটি E_NOTICE এর মতই, শুধুমাত্র পার্থক্য হলো এটি trigger_error() ফাংশনের মাধ্যমে উৎপন্ন হয়।
2048 E_STRICT Enable to have PHP suggest changes to your code which will ensure the best interoperability and forward compatibility of your code.
8192 E_DEPRECATED Run-time notices. এটি Enable করা থাকলে যে সকল কোড পিএইচপির পরবর্তী ভার্সনে সাপোর্ট করবে না তাদের জন্য এমন ম্যাসেজ পাওয়া যায়।
4096 E_RECOVERABLE_ERROR Catchable fatal error। এটি E_ERROR এর মতই, শুধুমাত্র পার্থক্য হলো এটি ব্যবহারকারী কর্তৃক নিয়ন্ত্রণ করা সম্ভব।
16384 E_USER_DEPRECATED User-generated warning message। এটি E_DEPRECATED এর মতই, শুধুমাত্র পার্থক্য হলো এটি trigger_error() ফাংশনের মাধ্যমে উৎপন্ন হয়।
32767 E_ALL সব ধরণের errors এবং warnings রিটার্ন করে

Error হ্যান্ডেল এর জন্য ফাংশন তৈরি

পিএইচপি Error হ্যান্ডেল করার জন্য চলুন প্রথমেই একটি ফাংশন তৈরি করে নিই।

function customError($err_level, $error_message ) {
  echo "<strong>Error:</strong> [$err_level] $error_message<br>";
  echo "The script is End";
  die();
}

উপরের কোডগুলোর সমন্বয়ে আমরা একটি সাধারন error হ্যান্ডেলার ফাংশন(customError) তৈরি করেছি। এই ফাংশনটি কোনোভাবে ট্রিগার/কল হলেই এটি 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 এর লেভেল নির্ধারণ করতে পারবেন।

উদাহরণ

নিম্নের উদাহরণে error হ্যান্ডেলার যাচাই করার জন্য আমরা অস্তিত্বহীন ভ্যারিয়েবলের আউটপুট নেওয়ার চেষ্টা করেছি।

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

<?php
//error handler function
function customError($err_level, $error_message ) {
  echo "<strong>Error:</strong> [$err_level] $error_message";
}

//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 টাইপসমূহঃ

  • E_USER_ERROR - ফ্যাটাল ব্যবহারকারী কর্তৃক রান-টাইম error। এই error থেকে পরবর্তীতে কোন কিছু পুনরুদ্ধার করা সম্ভব নয়। স্ক্রিপ্টের এক্সিকিউশন বন্ধ করে দিবে।
  • E_USER_WARNING - নন-ফ্যাটাল ব্যবহারকারী কর্তৃক রান-টাইম সতর্কতা। স্ক্রিপ্টের এক্সিকিউশন বন্ধ করবে না।
  • E_USER_NOTICE - ডিফল্ট। ব্যবহারকারী তৈরিকৃত রান-টাইম নোটিশ। স্বাভাবিকভাবে একটি রান করার সময় এমন কিছু খুজে পায় যা একটি 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 গুলো ডিফল্টভাবে সার্ভারে সংরক্ষন করা উচিত।