ایجاد Exception Handler سفارشی در php

image post

ایجاد Exception Handler سفارشی در php

معمولا کسی از نحوه پیشفرض نمایش error ها و exception ها در php استقبال نمیکند

در این مقاله قصد داریم نحوه سفارشی سازی نمایش exception ها را به شما نمایش دهیم

برای سفارشی سازی exception ها در php باید class جدیدی ایجاد نمایید تا این عمل را انجام دهد

نام کلاس مهم نیست اما کلاس باید دو متد برای مدیریت error و exception داشته باشد

برای مثال :

namespace Core;
class Error
{
    public static function errorHandler(){
        
    }
    public static function exceptionHandler($exception){
        
    }
}

متد اول وظیفه مدیریت error ها و متد دوم وظیفه مدیریت exception ها را دارد

در سیستم خطایابی ما تمام خطا ها به عنوان exception در نظرگرفته شده و نمایش داده میشوند

حال باید کلاس بالا و دو متد را به سیستم خطا یابی php به عنوان handler یا مدیریت کننده خطا معرفی کنیم

دقت کنید این خطوط باید در ابتدای اجرا برنامه مشخص شوند

set_error_handler('Error::errorHandler');
set_exception_handler('Error::exceptionHandler');

حال php متد های مارا به عنوان مدیریت کننده خطا میشناسد

در متد error handler باید خطا را تبدیل به یک exception کنیم و سپس انرا با استایل دلخواه نمایش دهیم

    public static function errorHandler($level,$message,$file,$line){
        throw new \ErrorException($message,0,$level,$file,$line);
    }

حال در متد exceptionHandler عمل نمایش را انجام می دهیم

 

    public static function exceptionHandler($exception){
        $filename = "../storage/logs/log-".date("Y-m-d").".txt";
        if(!file_exists($filename)){
            $myfile=fopen($filename,'w');
            fclose($myfile);
        }
        ini_set('error_log',$filename);
        http_response_code(500);
        $message =  " <h1 style='padding:20px;background-color:darkred;color:#fff;'> Error </h1> ";
        $message .= " <h2> {$exception->getMessage()} </h2> ";
        $message .= " <p> On File {$exception->getFile()}  At Line {$exception->getLine()} </p> ";
        $message .= '<hr>';
        $message .= " <p>Stack Trace : </p> <pre>{$exception->getTraceAsString()}</pre> ";
        error_log(strip_tags($message));
        echo $message;
    }

متد بالا علاوه بر نمایش خطا انرا در فایل log ذخیره می نماید

 

کلا کامل مدیریت خطا را از github دانلود نمایید

موفق باشید

دنیس ریچی : یونیکس بسیار ساده هست، تنها یک نابغه باید باشید تا بتوانید سادگی آن را درک کنید.