مدیریت خطا ها در PHP
در این بخش به بررسی مدیریت خطا ها در PHP می پردازیم. مهم ترین مسئله در برنامه نویسی مدیریت خطا ها می باشد که باید آنها کاملاً مدیریت و کنترل شوند در غیر این صورت دچار مشکلات امنیتی خواهیم شد.
مدیریت خطا با تابع die() در PHP
یکی از ساده ترین روش ها برای مدیریت خطا ها در PHP استفاده از تابع die()
می باشد.
مثال
در اینجا فرض کنید ما یک قطعه کد مشابه مثال زیر را در اسکریپت خود داریم که یک فایل متنی را باز می کند.
اکنون اگر فایل ما روی سرور وجود نداشته باشد یک پیغام خطا مانند زیر چاپ خواهد شد:
Warning: fopen(welcome.txt): failed to open stream: No such file or directory in C:\xampp\htdocs\test\index.php on line 2
برای جلوگیری از نمایش چنین پیغام خطایی ابتدا وجود فایل را بررسی می کنیم و در صورت عدم وجود با استفاده از تابع die()
اسکریپت را متوقف کرده و پیغام خطایی نمایش می دهیم.
اکنون اگر فایل وجود نداشته باشد ، بجای نمایش پیغام طولانی ، این پیغام خطای سفارشی به کاربر نمایش داده خواهد شد:
File not found
ایجاد یک مدیریت کننده خطای سفارشی در PHP
در این بخش ما قصد داریم تا تمامی خطا ها را مدیریت و کنترل کنیم. برای انجام این کار یک تابع تعریف می کنیم که هنگام بروز هرگونه خطا فراخوانی و اجرا می شود.
تابع ما دارای 5 پارامتر است:
- سطح خطا
- پیغام خطا
- فایل خطا
- شماره خط کد خطا
- متن خطا
دو مورد اول اجباری هستند ولی بقیه موارد اختیاری می باشند.
error_function ( error_level , error_message , error_file , error_line , error_context ) ;
در جدول زیر هر یک از پارامتر ها را برای مدیریت خطا ها توضیح داده ایم:
پارامتر | توضیحات |
error_level | سطح گزارش خطا برای خطایی که به وجود آمده را مشخص می کند. باید مقدار آن عددی باشد. |
error_message | پیغام خطا را مشخص می کند. |
error_file | نام فایلی را که در آن خطا به وجود آمده است را مشخص می کند. |
error_line | شماره خطی را که خطا در آن رخ داده است را مشخص می کند. |
error_context | یک آرایه از متغیر ها و مقادیر آنها را که در هنگام رخ دادن خطا استفاده می شدند مشخص می کند. |
سطح گزارش خطا ها
ثابت | مقدار | توضیحات |
E_WARNING | 2 | خطا های دارای اهمیت متوسط هنگام اجرا را مشخص می کند. اجرای اسکریپت متوقف نمی شود. |
E_NOTICE | 8 | اطلاعات در زمان اجرای اسکریپت را مشخص می کند ، چیزی را پیدا می کند که ممکن است خطا باشد. |
E_USER_ERROR | 256 | خطای خطرناک تولید شده توسط کاربر را مشخص می کند و مانند E_ERROR می باشد که توسط برنامه نویس با تابع trigger_error() به وجود آمده است. |
E_USER_WARNING | 512 | یک هشدار کم اهمیت تولید شده توسط کاربر را مشخص می کند و مانند E_WARNING می باشد که توسط برنامه نویس با تابع trigger_error() به وجود آمده است. |
E_USER_NOTICE | 1024 | اطلاعیه تولید شده توسط کاربر را مشخص می کند و مانند E_NOTICE می باشد که توسط برنامه نویس با تابع trigger_error() به وجود آمده است. |
E_RECOVERABLE_ERROR | 4096 | خطای خطرناک مانند E_ERROR می باشد. |
E_ALL | 8191 | تمامی خطا ها و هشدار ها را مشخص می کند. |
ایجاد تابع برای مدیریت خطا ها در PHP
اکنون قصد داریم یک تابع برای مدیریت خطا ها ایجاد کنیم:
کد بالا در صورت بروز هرگونه خطا سطح اهمیت خطا همراه با پیغام آن را چاپ می کند.
اکنون تابع مدیریت کننده خطای ما آمده است اکنون باید از آن استفاده کنیم و خروجی بگیریم.
تنظیم مدیریت کننده خطا
در این مرحله ما می خواهیم تابع بالا را به مدیریت کننده خطای پیش فرض اسکریپت خود تبدیل کنیم:
set_error_handler("customError");
با استفاده از تابع set_error_handler()
تابع مدیریت کننده خطای خود را مشخص کردیم.
این تابع دو پارامتر می گیرد:
- نام تابع مدیریت کننده خطا ( اجباری )
- سطح خطا ( اختیاری )
مثال
اکنون می خواهیم یک فایلی که وجود ندارد را باز کنیم:
خروجی
Error: [2] fopen(welcome.txt): failed to open stream: No such file or directory
Ending Script
راه اندازی خطا با تابع trigger_error در PHP
در اینجا ما می خواهیم هنگامی که کاربر داده غیر مجازی وارد کرد یک خطا ایجاد کنیم و آن را نمایش دهیم.
مثال
خروجی چیزی شبیه به این هست:
Notice: مقدار باید یک یا کمتر از یک باشد in C:\xampp\htdocs\test\index.php on line 4
یک خطا را می توانیم در هرکجای اسکریپت ایجاد کنیم ، همچنین با مشخص کردن پارامتر دوم در تابع trigger_error()
می توانیم سطح خطا را مشخص کنیم.
انواع خطا هایی که میتوانیم استفاده کنیم:
- E_USER_ERROR
- E_USER_WARNING
- E_USER_NOTICE
مثال
در مثال زیر اگر مقدار متغیر $test
بزرگتر از یک باشد E_USER_WARNING رخ خواهد داد:
خروجی
Error: [512] مقدار باید یک یا کمتر از یک باشد
Ending Script
ارسال یک پیغام خطا با ایمیل در PHP
در مثال زیر ما یک ایمیل که حاوی پیغام خطا هست سمت مدیر وب سایت ارسال می کنیم:
خروجی
Error: [512] مقدار باید یک یا کمتر از یک باشد
Webmaster has been notified
خروجی سمت ایمیل مدیر سایت
Error: [512] مقدار باید یک یا کمتر از یک باشد
توابع مدیریت خطا ها در PHP
در این بخش توابعی که برای مدیریت خطا ها در PHP تعریف شده است را معرفی می کنیم:
تابع | توضیحات |
debug_backtrace() | این تابع اطلاعات جامعی راجع به خطای رخ داده در قالب یک آرایه ارائه می دهد. |
error_get_last() | این تابع اطلاعات آخرین خطای رخ داده در کد اسکریپت را نمایش می دهد. |
error_log() | این تابع اطلاعات رخ داده را در یک فایل روی سرور ذخیره می کند و یا به ایمیل مشخصی ارسال خواهد کرد. |
error_reporting() | این تابع مشخص می کند که چه خطا هایی به سیستم گزارش بشوند. |
set_error_handler() | یک تابع را به عنوان مدیریت خطا ها در صفحه مشخص می کند. |
set_exception_handler() | یک تابع تعیین شده از سوی طراح را به عنوان تابع مدیریت کننده استثناها در صفحه تعیین می کند. |
trigger_error() | از این تابع برای ایجاد و فراخوانی یک خطا استفاده می شود. |
user_error() | این تابع برای شناسایی یک خطا یا فراخوانی تابع مربوط به آن به کار می رود . عملکرد آن همانند تابع trigger_error است. |
آیا این مطلب برای شما مفید بود ؟