سایت تخصصی الکترونیک و کامپیوتر » مدیریت گزارش خطا در PHP
 
 
 
مدیریت گزارش خطا در PHP

یکی از مهم ترین مسائل در ایجاد اسکریپت ها و برنامه های تحت وب، مدیریت خطا در این برنامه هاست. اگر شما در نوشتن برنامه خود، به مسئله مدیریت خطا توجه نکرده باشید، ممکن است ریسک های امنیتی زیادی در برنامه تحت وب شما به وجود بیاید.

شما به عنوان یک برنامه نویس بهتر است پیش بینی هایی برای به وجود آمدن خطا در برنامه خود داشته باشید تا بتوانید آنها را به خوبی مدیریت کنید.

مدیریت گزارش خطا در PHP

 

قطعا در هنگام کد نویسی یک اسکریپت تحت وب، یکسری خطا ها که معروف به Syntax Error هستند رفع خواهند شد ولی خطاهای دیگری وجود دارد که در هنگام اجرای برنامه با آنها مواجه میشویم؛ خطاهایی مانند:

– عدم وجود فایل برای خواندن یا نوشتن آن

– عدم دسترسی و اجازه برای ایجاد یا نوشتن فایل

– مشکل در برقراری ارتباط با پایگاه داده (دیتابیس)

و مشکلاتی از این قبیل؛ که بهتر است ما آنها را پیش بینی کرده و مدیریت کنیم تا یک برنامه حرفه ای داشته باشیم!

 

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

به طور پیشفرض، در هنگام بروز خطا در یک اسکریپت PHP، متن خطا به همراه آدرس فایلی که خطا در آن رخ داده و اطلاعاتی نظیر پشته صدا زدن تابع ها (Call Stack) در صفحه نمایش داده میشود.

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

بنابراین بهتر است در هنگام توسعه یک برنامه نمایش این خطاها را آزاد بگذاریم ولی در هنگام انتشار محصول، نمایش خطاهای پیش آمده را غیر فعال کنیم.

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

برای فعالسازی نمایش خطا ها میتوان از کد زیر استفاده کرد:

 

و برای غیر فعالسازی نمایش خطا از قطعه کد زیر استفاده میکنیم:

 

موارد موجود در تابع error_reporting موارد قابل تنظیمی هستند که تعیین میکنند چه نوع خطاهایی باید دریافت و مدیریت شوند.

توجه کنید که ورودی تابع error_reporting نباید خالی (یا ۰) باشد؛ ما نیاز داریم خطا ها را دریافت کنیم ولی فقط نمایش آنها در صفحه و به کاربر را غیر فعال میکنیم. برای مثال خطاهای E_FATAL که برای ما بسیار مهم و ضروری هستند اگر نادیده گرفته شوند ممکن است مشکلاتی را برای برنامه ما ایجاد کنند.

 

حال که نمایش این خطا ها را در برنامه منتشر شده، غیر فعال کردیم، اکیدا توصیه میشود این خطا ها را در فایلی ذخیره کنید تا بتوانید مشکلات احتمالی که در هنگام اجرای برنامه رخ داده را بررسی و رفع کنید.

برای ذخیره خطاهای پیش آمده در برنامه میتوانیم از دستورات زیر قبل از غیر فعالسازی نمایش خطاها (کدهای بالا) استفاده کنیم.

 

 

در اینجا ذکر چند نکته برای قطعه کد بالا ضروری هست:

۱- فایل و آدرسی که به عنوان محل دخیره خطاها در تنظیم کرده اید (path/to/errors_log.txt) باید قابل نوشتن (writable) توسط وبسرویس باشند.

۲- در اینجا ما یک فایل خطای جداگانه تعریف کرده ایم، در غیر اینصورت تمام گزارش های خطاها با خطاهای آپاچی (apache/web server) و سایر خطاهای آپاچی در یکجا ذخیره میشدند.

۳- فایل errors_log میتواند در مسیر دایرکتوری برنامه تحت وب ما باشد ولی در نظر داشته باشید که دایرکتوری های سیستمی مثل /var/log قابل جستجو برای کاربر نیستند.

در نهایت دوباره تاکید میکنم بهتر است error_reporting روی ۰ تنظیم نشود، به این دلیل که دیگر هیچ خطایی ذخیره نمیشود.

 

البته در صورتی که به فایل php.ini برنامه خود دسترسی دارید، پیشنهاد میشود نمایش خطاها در هنگام توسعه برنامه و غیرفعال کردن آن در محیط انتشار را از طریق این فایل به صورت مستقیم و دستی انجام دهید.

 

 

دلیل این امر این است که گاهی اوقات برنامه با خطای حیاتی یا همان خطای مرگبار (Fatal Error) مواجه میشود و در اینصورت اجرای ادامه اسکریپت متوقف میشود و ممکن است اسکریپت به اجرای دستوراتی که در فایل PHP خود برای تنظیمات نمایش خطاها تعریف کرده ایم، نرسد!

 

برای شخصی سازی نمایش خطاها در هنگام اجرای اسکریپت میتوان از تابع set_error_handler استفاده کرد.

این تابع یک رشته را به عنوان ورودی دریافت میکند. این رشته نام تابعی است که میخواهید در هنگام برخورد با خطا، به عنوان نمایش خطا در برنامه اجرا شود.

 

همانطور که میبینید، در هنگام بروز خطا دو پارامتر ورودی به این تابع ارسال میشود، اولین ورودی شماره خطا (یا به اصطلاح سطح خطا) و دومین ورودی متن پیام خطای رخ داده است.

میتوانید این تابع را به هر صورتی که میخواهید بنویسید؛ برای مثال میتوانید در همین تابع

– خطای پیش آمده را به مدیر سیستم ایمیل کنید

– متن خطا را ذخیره کنید

– با استفاده از دستور die() در انتهای آن، از ادامه اجرای اسکریپت خودداری کنید.

 

تابع set_error_handler() مقادیر دیگری نیز به تابع ما میفرستد؛ این مقادر به ترتیب در زیر مشخص شده اند که میتوانید از آنها استفاده کنید.

 

دو ورودی اول که در بالاتر توضیح داده شدند؛ سه ورودی بعدی به صورت اختیاری تعریف میشوند.

پارامتر errFile شامل نام فایلی است که خطا در آن رخ داده است.

پارامتر errLine شماره خطی است که خطا در آن رخ داده است.

پارامتر errContect شامل آرایه ای است از هر متغیری که در محدوده خطا وجود دارد. (از PHP نسخه ۷٫۲٫۰ به بعد منسوخ شده است)



[ برچسب ها ] : , , , ,
ارسال شده در : بخش کامپیوتر
نظر شما در مورد اين پست چيست ؟

دیدگاه خود را به ما بگویید.

 
 
  دکتری تخصصی برق الکترونیک
طراح مدارهای الکترونیکی
برنامه نویس انواع میکروها
مشاوره و اجرای لینک های وایرلس
پیاده سازی سیستم های مبتنی بر شبکه
E_mail: electronic@sabzelco.ir
Tel: 09150462401
توسعه دهنده برنامه های سمت سرور

طراحی و برنامه نویسی سایت و پرتال های حرفه ای

E_mail: computer@sabzelco.ir
Tel: 09371974233