Sokan Academy

راهنمای استفاده از تابع ()error_reporting در زبان PHP به‌ منظور نمایش دادن ارورها

راهنمای استفاده از تابع ()error_reporting در زبان PHP به‌ منظور نمایش دادن ارورها

مدیریت خطاها در هر زبان برنامه‌نویسی اهمیت بسیار زیادی دارد و PHP نیز از این قضیه مستثنی نیست که خوشبختانه تنظیمات مدیریت خطا در PHP بسیار راحت است که در ادامه یک راهنمای خلاصه و کاربردی برای دولوپرهای تازه‌کار این زبان جمع‌آوری کرده‌ایم تا به‌ راحتی بتوانند خطاها و اِکسپشن‌ها را در این زبان برنامه‌نویسی محبوب مدیریت کنند.

سطح خطاها در زبان PHP
Constant (مقدار ثابت) و مقادیر عددی که در ادامه معرفی می‌شوند را می‌توانید به‌ عنوان آرگومان در تابع ()error_reporting استفاده کرده و خطاهای اسکریپت خود را به‌ راحتی مدیریت کنید:

مقدار کانستنت توضیحات
1 E_ERROR این کانستنت ارورهای به‌ اصطلاح Fatal که اجرای ادامهٔ اسکریپت را متوقف می‌کنند، نمایش می‌دهد. 
2 E_WARNING این کانستنت Warning به‌ وجود آمده در حین اجرای اسکریپت (Run-time) را نمایش می‌دهد (لازم به‌ ذکر است که این هشدارها باعث متوقف شدن ادامهٔ اجرای اسکریپت نخواهند شد.)  
4 E_PARSE این کانستنت ارورهایی که توسط مُفسر زبان PHP در حین کامپایل وب اپلیکیشن به‌ وجود می‌آیند را نمایش می‌دهد. 
8 E_NOTICE این کانستنت Notice به‌ وجود آمده در حین اجرای اسکریپت را نمایش می‌دهد. به‌ عبارت دیگر، چیزی که به‌ نظر می‌رسد یک ارور باشد! 
16 E_CORE_ERROR این کانستنت ارورهای به‌ اصطلاح Fatal در فرایند استارت شدن PHP را نمایش می‌دهد (لازم به‌ ذکر است که این کانستنت شبیه به E_ERROR است با این تفاوت که توسط هستهٔ PHP ایجاد می‌گردد.)
32 E_CORE_WARNING این کانستنت ارورهای به‌ اصطلاح Non-fatal در فرایند استارت شدن PHP را نمایش می‌دهد (لازم به‌ ذکر است که این کانستنت شبیه به E_WARNING است با این تفاوت که توسط هستهٔ PHP ایجاد می‌گردد.)
64 E_COMPILE_ERROR این کانستنت ارورهایی از نوع Fatal که در زمان کامپایل به‌ وجود می‌آیند را نمایش می‌دهد (لازم به‌ ذکر است که این کانستنت شبیه به E_ERROR است با این تفاوت که توسط موتور Zend ایجاد می‌گردد.)
128 E_COMPILE_WARNING این کانستنت ارورهای به‌ اصطلاح Non-fatal که در زمان کامپایل به‌ وجود می‌آیند را نمایش می‌دهد (لازم به‌ ذکر است که این کانستنت شبیه به E_WARNING است با این تفاوت که توسط موتور Zend ایجاد می‌گردد.)
256 E_USER_ERROR این کانستنت ارورهای به‌ اصطلاح Fatal که توسط کاربر ایجاد می‌شوند را نمایش می‌دهد (لازم به‌ ذکر است که این کانستنت شبیه به E_ERROR است با این تفاوت که توسط تابع ()trigger_error زبان PHP ایجاد می‌گردد.)
512 E_USER_WARNING این کانستنت هشدارهای به‌ اصطلاح Non-fatal که توسط کاربر ایجاد می‌شوند را نمایش می‌دهد (لازم به‌ ذکر است که این کانستنت شبیه به E_WARNING است با این تفاوت که توسط تابع ()trigger_error زبان PHP ایجاد می‌گردد.)
1024 E_USER_NOTICE این کانستنت Notice ایجاد شده توسط کاربر را نمایش می‌دهد (لازم به‌ ذکر است که این کانستنت شبیه به E_NOTICE است با این تفاوت که توسط تابع ()trigger_error زبان PHP ایجاد می‌گردد.)
2048 E_STRICT این کانستنت امکانی را فراهم می‌سازد تا PHP پیشنهاداتی به‌ منظور اِعمال در سورس‌کد ارائه دهد تا از سازگاری کد در آینده اطمینان حاصل شود. 
4096 E_RECOVERABLE_ERROR این کانستنت ارورهای به‌ اصطلاح Catchable Fatal را نمایش می‌دهد. به‌ عبارت دیگر، نمایش می‌دهد که احتمالاً یک ارور خطرناک ایجاد شده است اما موتور زِند را در شرایطی بی‌ثبات ترک نمی‌کند و اگر ارورهایی از این دست توسط دولوپر هندل نشوند، اپلیکیشن همان‌گونه که در شرایط E_ERROR متوقف می‌شود، از ادامه باز می‌ایستد.
8192 E_DEPRECATED این کانستنت Notice ایجاد شده در حین Run-time را نمایش می‌دهد که با فعال کردن این دسته از ارورها، هشدارهایی در مورد کد نمایش داده خواهند شد که در نسخه‌های بعدی PHP کار نخواهند کرد.
16384 E_USER_DEPRECATED این کانستنت پیام‌های هشدارآمیز ایجاد شده توسط کاربر را نمایش می‌دهد (لازم به‌ ذکر است که این مقدار شبیه به E_DEPRECATED است با این تفاوت که توسط تابع ()trigger_error زبان PHP ایجاد می‌گردد.)
32767 E_ALL این کانستنت تمامی ارورها و هشدارهایی که در نسخهٔ PHP نصب شده روی سرور ساپورت می‌شوند را نمایش می‌دهد (لازم به‌ ذکر است که از مقدار 1- نیز به‌ جای E_ALL می‌توان استفاده کرد.)

راهنمای استفاده از تابع ()error_reporting
به‌ طور کلی، تابع ()error_reporting مشخص می‌کند که کدام دسته از ارورهای اسکریپت ما در معرض دید کاربر قرار بگیرند و لازم به‌ ذکر است که پارامتر ورودی این تابع (Level) اختیاری است و مشخص می‌سازد که چه سطحی از نمایش ارورها در نظر گرفته شود که هم از اعداد از پیش تعریف شده و هم از کانستنت‌هایی که در بالا بدان‌ها اشاره شد می‌توان به‌ عنوان پارامتر ورودی استفاده کرد (توصیه می‌شود که تا حد امکان به‌ جای اعداد از کانستنت‌ها استفاده شود تا در ورژن‌های آتی این زبان با هیچ‌گونه کانفلیکتی برخورد نکنید.)

برای روشن‌تر شدن نحوهٔ هندل کردن ارورها در زبان PHP، در ادامه چند مثال از نحوهٔ استفاده از این تابع برای مدیریت خطاها در این زبان آورده شده است:

<?php
// Turn off all error reporting
error_reporting(0);

// Report all PHP errors 
error_reporting(E_ALL);
error_reporting(-1);

// Report all errors except E_NOTICE
error_reporting(E_ALL ^ E_NOTICE);

//Report errors and warnings
error_reporting(E_ERROR | ERROR_WARNING);

همان‌طور که می‌توان حدس زد، مقدار ورودی 0 برای این تابع که در خط سوم در نظر گرفته شده منجر بدین خواهد گشت تا هیچ اروری نمایش داده نشود. در خطوط ششم و هفتم هم می‌بینیم که مقادیر E_ALL و 1- در نظر گرفته شده‌اند که باعث می‌گردند تمامی ارورهای پی‌اچ‌پی نمایش داده شوند (البته لازم به‌ ذکر است که یکی از این خطوط برای نمایش خطاها کافی است و صرفاً از این جهت هر دو مورد را آورده‌ایم که با هر دو روش آشنا شوید.) در خط دهم نیز دستور داده‌ایم که تمامی ارورها (E_ALL) نمایش داده شوند به جزء E_NOTICE و در نهایت در خط سیزدهم هم گفته‌ایم هم ارورها (E_ERROR) و هم هشدارها (ERROR_WARNING) نمایش داده شوند.

تفاوت توابع ()error_reporting و ()ini_set
همان‌طور که در کد زیر ملاحظه می‌شود، هر دو تابع کار یکسانی انجام می‌دهند:

<?php
// The same as error_reporting(E_ALL);
ini_set("error_reporting", E_ALL);

در واقع، کاری که تابع ()ini_set انجام می‌دهد این است که تنظیمات فایل php.ini را به‌ اصطلاح Override (رونویسی) می‌کند. در پایان هم بایستی یادآور شویم برای آنکه ارورها نمایش داده شوند، حتماً بایستی مقدار display_errors در فایل php.ini و یا تابع ()ini_set برابر با 1 یا On قرار داده شده باشد:

<?php
ini_set("display_errors", 1); // Or ini_set("display_errors", "On");

در پایان چنانچه علاقمند به فراگیری گام به گام زبان برنامه‌نویسی PHP هستید، می‌توانید به دورهٔ آموزش PHP در سکان آکادمی مراجعه نمایید.

این محتوا آموزنده بود؟
پی اچ پیاکسپشن هندلینگ

sokan-academy-footer-logo
کلیه حقوق مادی و معنوی این وب‌سایت متعلق به سکان آکادمی می باشد.