بکندباز

چگونه تمام خطاها را در PHP نمایش دهیم؟

یک برنامه PHP چندین سطح از خطاها و هشدارها را در طول زمان اجرای اسکریپت ایجاد می کند. PHP چهار راه مختلف برای نمایش این خطاها و هشدارها ارائه می دهد که در زیر لیست شده اند:

  1. error_reporting: تمام خطاها در سطح های مختلف به جز خطاهای سطح E-NOTICE، E-STRICT و E_DEPRECATED را نمایش می دهد.
  2. display_errors: به طور پیش فرض، مقدار display_errors برابر با off است . اگر آن را روی on تنظیم کنید، تمام خطاها از جمله خطای سینتکس (syntax) نمایش داده شود.
  3. log_errors: مقدار پیش فرض log_errors برابر با ON است که نشان می دهد ثبت خطا باید انجام شود یا خیر.
  4. error_log string: رشته error_log نام فایل را تعیین می کند که خطای اسکریپت باید در آن ثبت شود.

چند خط کد در زیر وجود دارد، آن را به فایل PHP خود اضافه کنید تا خطاها نمایش داده شود. این روش، سریعترین راه برای نمایش تمام خطاها و هشدارهای PHP است.

ini_set ('display_errors', 1);  
ini_set ('display_startup_errors', 1);  
error_reporting (E_ALL);  

عملکرد دستورالعمل های فوق به شرح زیر است:

ini_set()‎

این تابع سعی می کند پیکربندی موجود در فایل php.ini را لغو کند .

display_errors

display_errors دستورالعملی است که تعیین می کند آیا خطا به کاربر نمایش داده می شود یا پنهان می ماند. البته خطاهایی را که در طول راه اندازی اولیه PHP رخ می دهد را کنترل نمی کند.

display_startup_errors

display_startup_errors نیز یک دستورالعمل است که برای یافتن خطا در طول راه‌اندازی اولیه PHP استفاده می‌شود.

error_reporting()‎

error_reporting یک تابع بومی PHP است. برای نمایش خطاها استفاده می شود.

برنامه

<?php  
    ini_set('display_errors', 1);   
    ini_set('display_startup_errors', 1);   
    error_reporting(E_ALL);   
    //include a php file which does not exist  
    include("file.php");  
?>  

خروجی

خروجی یک خطای warning به مرورگر نشان داده می شود.

Warning: include(file.php): failed to open stream: No such file or directory in file.php on line 6

Warning: include()‎: Failed opening 'file.php' for inclusion (include_path='C:\xampp\php\PEAR') in file.php on line 6

توجه: هر دو دستورالعمل display_errors و display_startup_errors قادر به نمایش خطاهای syntax نیستند. بنابراین، برای نمایش آن دسته از خطا ها بایستی پیکربندی PHP.ini باید اصلاح شود.

پیکربندی فایل PHP.ini را برای نمایش تمام خطاها و هشدارها

تغییرات زیر باید در فایل php.ini انجام شود تا تمام خطاها از جمله خطای سینتکس نمایش داده شود و سرور آپاچی در xampp راه اندازی مجدد شود.

display_errors = On 

دستور display_errors را در فایل PHP.ini روی “On” تنظیم کنید. تمام خطاهایی را نمایش می دهد که با فراخوانی تابع ini_set()‎ قابل نمایش نیستند، مانند  خطاهای syntax و parse

برنامه

برنامه PHP زمانی که display_errors در فایل php.ini غیرفعال یا off است.

<?php  
    //سمی کالون فراموش شده است
    for ($i = 5; $i >= 0 $i--) {  
        echo "It will generate parse error";  
    }  
?>  

خروجی

هنگامی که دستور display_errors برابر با off است ، خروجی مانند تصویر زیر به مرورگر نشان داده می شود .

نحوه نمایش تمام خطاها در PHP

خروجی:

خروجی برنامه فوق زمانی که display_errors در فایل php.ini فعال یا روی on تنظیم می شود و سرور دوباره راه اندازی می شود.

نحوه نمایش تمام خطاها در PHP

سطح گزارش خطا

همانطور که قبلاً بحث کردیم که PHP سطوح مختلفی از خطاها را تولید می کند. بنابراین، بیایید یاد بگیریم که چه نوع خطاهایی در کد PHP ایجاد می شود.

مقدار ثابت شرح
E_ERROR خطای زمان اجرا مرگبار. اجرای برنامه متوقف شده است.
E_WARNING خطای زمان اجرا غیر کشنده. اجرای برنامه متوقف نمی شود.
E_PARSE خطای زمان کامپایل که توسط parser ایجاد می شود.
E_NOTICE این یک اطلاعیه در زمان اجرا است. یعنی اسکریپت PHP چیزی پیدا کرده است که ممکن است یک خطا باشد.
E_USER_ERROR E_USER_ERROR شبیه E_ERROR است، اما توسط اسکریپت PHP با استفاده از تابع ()trigger_error تولید می‌شود. این یک پیام خطای حیاتی است که توسط کاربر ایجاد می شود.
E_USER_WARNING E_USER_WARNING یک هشدار غیر حیاتی تولید شده توسط کاربر است و مشابه E_WARNING است. اما همچنین توسط اسکریپت PHP با استفاده از تابع ()trigger_error تولید می شود.
E_USER_NOTICE این یک خطای اعلامیه تولید شده توسط کاربر است، مشابه E_NOTICE.
E_STRICT این خطا الزاماً یک خطا نیست. بعد از نسخه 5.4.0 PHP بخشی از E_ALL شد.
E_ALL تمام خطاها و هشدارها را فعال می کند.
zohreh

مدیر وب سایت بکندباز

دیدگاه‌ها

*
*