Can I try/catch a warning?

前端 未结 11 1046
孤城傲影
孤城傲影 2020-11-22 01:04

I need to catch some warnings being thrown from some php native functions and then handle them.

Specifically:

array dns_get_record  ( string $hostnam         


        
11条回答
  •  情话喂你
    2020-11-22 01:36

    FolderStructure

    index.php //Script File
    logs //Folder for log Every warning and Errors
    CustomException.php //Custom exception File
    

    CustomException.php

    /**
    * Custom error handler
    */
    function handleError($code, $description, $file = null, $line = null, $context = null) {
        $displayErrors = ini_get("display_errors");;
        $displayErrors = strtolower($displayErrors);
        if (error_reporting() === 0 || $displayErrors === "on") {
            return false;
        }
        list($error, $log) = mapErrorCode($code);
        $data = array(
            'timestamp' => date("Y-m-d H:i:s:u", time()),
            'level' => $log,
            'code' => $code,
            'type' => $error,
            'description' => $description,
            'file' => $file,
            'line' => $line,
            'context' => $context,
            'path' => $file,
            'message' => $error . ' (' . $code . '): ' . $description . ' in [' . $file . ', line ' . $line . ']'
        );
        $data = array_map('htmlentities',$data);
        return fileLog(json_encode($data));
    }
    
    /**
    * This method is used to write data in file
    * @param mixed $logData
    * @param string $fileName
    * @return boolean
    */
    function fileLog($logData, $fileName = ERROR_LOG_FILE) {
        $fh = fopen($fileName, 'a+');
        if (is_array($logData)) {
            $logData = print_r($logData, 1);
        }
        $status = fwrite($fh, $logData . "\n");
        fclose($fh);
    //    $file = file_get_contents($filename);
    //    $content = '[' . $file .']';
    //    file_put_contents($content); 
        return ($status) ? true : false;
    }
    
    /**
    * Map an error code into an Error word, and log location.
    *
    * @param int $code Error code to map
    * @return array Array of error word, and log location.
    */
    function mapErrorCode($code) {
        $error = $log = null;
        switch ($code) {
            case E_PARSE:
            case E_ERROR:
            case E_CORE_ERROR:
            case E_COMPILE_ERROR:
            case E_USER_ERROR:
                $error = 'Fatal Error';
                $log = LOG_ERR;
                break;
            case E_WARNING:
            case E_USER_WARNING:
            case E_COMPILE_WARNING:
            case E_RECOVERABLE_ERROR:
                $error = 'Warning';
                $log = LOG_WARNING;
                break;
            case E_NOTICE:
            case E_USER_NOTICE:
                $error = 'Notice';
                $log = LOG_NOTICE;
                break;
            case E_STRICT:
                $error = 'Strict';
                $log = LOG_NOTICE;
                break;
            case E_DEPRECATED:
            case E_USER_DEPRECATED:
                $error = 'Deprecated';
                $log = LOG_NOTICE;
                break;
            default :
                break;
        }
        return array($error, $log);
    }
    //calling custom error handler
    set_error_handler("handleError");
    

    just include above file into your script file like this

    index.php

    error_reporting(E_ALL);
    ini_set('display_errors', 'off');
    define('ERROR_LOG_FILE', 'logs/app_errors.log');
    
    include_once 'CustomException.php';
    echo $a; // here undefined variable warning will be logged into logs/app_errors.log
    

提交回复
热议问题