পিএইচপি এরর হ্যান্ডলিং (Error Handling)

এডভান্স পিএইচপি (Advance PHP) - পিএইচপি প্রোগ্রামিং (PHP Programming) - Computer Programming

348

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


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

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

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

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

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

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

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

kt_satt_skill_example_id=307

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

kt_satt_skill_example_id=308

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

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


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

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

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

সিনট্যাক্স

kt_satt_skill_example_id=310

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

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

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

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

ভ্যালুকনস্ট্যান্টবর্ণনা
1E_ERRORFatal run-time errors. এটা ঐ ধরণের এরর কে নির্দেশ করে যা রিকাভার(recover) করা যায়। যেমন- মেমোরি এলোকেশন। এটি স্ক্রিপ্ট এর এক্সিকিউশন থামিয়ে দেয়।
2E_WARNINGFatal run-time errors। স্ক্রিপ্ট এর এক্সিকিউশন বন্ধ হবে না।
4E_PARSECompile-time parse errors। এই ধরণের এরর পার্সার কর্তৃক উৎপন্ন হয়।
8E_NOTICERun-time notices। স্ক্রিপ্টে এমন কিছু কোড থেকে যেখানে সম্ভবত এরর থাকতে পারে। এক্ষেত্রে স্ক্রিপ্টটি স্বাভাবিকভাবেই এক্সিকিউশন হয়।
16E_CORE_ERRORFatal errors। পিএইচপি শুরু হওয়ার সময়ই এধরণের এরর ঘটে। এটি E_ERROR এর মতই, শুধুমাত্র পার্থক্য হলো এটি কোর পিএইচপি কর্তৃক উৎপন্ন হয়।
32E_CORE_WARNINGWarnings (non-fatal errors)। পিএইচপি শুরু হওয়ার সময়ই এধরণের এরর ঘটে। এটি E_WARNING এর মতই, শুধুমাত্র পার্থক্য হলো এটি কোর পিএইচপি কর্তৃক উৎপন্ন হয়।
64E_COMPILE_ERRORFatal compile-time errors। এটি E_ERROR এর মতই, শুধুমাত্র পার্থক্য হলো এটি জেন্ড ইঞ্জিন কর্তৃক উৎপন্ন হয়।
128E_COMPILE_WARNINGCompile-time warnings (non-fatal errors)। এটি E_WARNING এর মতই, শুধুমাত্র পার্থক্য হলো এটি জেন্ড ইঞ্জিন কর্তৃক উৎপন্ন হয়।
256E_USER_ERRORUser-generated error messager। এটি E_ERROR এর মতই, শুধুমাত্র পার্থক্য হলো এটি পিএইচপি trigger_error() ফাংশনের মাধ্যমে উৎপন্ন হয়।
512E_USER_WARNINGUser-generated warning message। এটি E_WARNING এর মতই, শুধুমাত্র পার্থক্য হলো এটি trigger_error() ফাংশনের মাধ্যমে উৎপন্ন হয়।
1024E_USER_NOTICEUser-generated notice message। এটি E_NOTICE এর মতই, শুধুমাত্র পার্থক্য হলো এটি trigger_error() ফাংশনের মাধ্যমে উৎপন্ন হয়।
2048E_STRICTEnable to have PHP suggest changes to your code which will ensure the best interoperability and forward compatibility of your code.
8192E_DEPRECATEDRun-time notices. এটি Enable করা থাকলে যে সকল কোড পিএইচপির পরবর্তী ভার্সনে সাপোর্ট করবে না তাদের জন্য এমন ম্যাসেজ পাওয়া যায়।
4096E_RECOVERABLE_ERRORCatchable fatal error। এটি E_ERROR এর মতই, শুধুমাত্র পার্থক্য হলো এটি ব্যবহারকারী কর্তৃক নিয়ন্ত্রণ করা সম্ভব।
16384E_USER_DEPRECATEDUser-generated warning message। এটি E_DEPRECATED এর মতই, শুধুমাত্র পার্থক্য হলো এটি trigger_error() ফাংশনের মাধ্যমে উৎপন্ন হয়।
32767E_ALLসব ধরণের errors এবং warnings রিটার্ন করে


 


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

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

kt_satt_skill_example_id=311

উপরের কোডগুলোর সমন্বয়ে আমরা একটি সাধারন error হ্যান্ডেলার ফাংশন(customError) তৈরি করেছি। এই ফাংশনটি কোনোভাবে ট্রিগার/কল হলেই এটি error লেভেল এবং error মেসেজ প্রদান করবে এবং স্ক্রিপ্টট এর সমাপ্তি(terminate) ঘটাবে।

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


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

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

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

যাইহোক, নিন্মের উদাহরণে পিএইচপির সকল error এর জন্য আমরা আমাদের কাস্টম error হ্যান্ডেলার ব্যবহার করবোঃ

kt_satt_skill_example_id=314

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

এছাড়া আপনি যদি error এর লেভেলও নির্ধারণ করতে চান তাহলে দ্বিতীয় প্যারামিটার ব্যবহার করে error এর লেভেল নির্ধারণ করতে পারবেন।

উদাহরণ

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

kt_satt_skill_example_id=315

Error ট্রিগার

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

উদাহরণ

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

kt_satt_skill_example_id=316

আপনার ইচ্ছানুযায়ী একটি স্ক্রিপ্টের যেকোনো স্থানেই 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 হ্যান্ডেলারটি ব্যবহার করবো এবং স্ক্রিপ্টটি শেষ করবোঃ

kt_satt_skill_example_id=318

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


Error Logging(লগিং)

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

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

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

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

kt_satt_skill_example_id=320

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

Content added || updated By
Promotion

Are you sure to start over?

Loading...