'ERROR', E_WARNING => 'WARNING', E_PARSE => 'PARSING ERROR', E_NOTICE => 'NOTICE', E_CORE_ERROR => 'CORE ERROR', E_CORE_WARNING => 'CORE WARNING', E_COMPILE_ERROR => 'COMPILE ERROR', E_COMPILE_WARNING => 'COMPILE WARNING', E_USER_ERROR => 'USER ERROR', E_USER_WARNING => 'USER WARNING', E_USER_NOTICE => 'USER NOTICE', E_STRICT => 'STRICT NOTICE', E_RECOVERABLE_ERROR => 'RECOVERABLE ERROR', E_DEPRECATED => 'DEPRECATED', E_USER_DEPRECATED => 'USER DEPRECATED' ]; $error_type = $error_types[$errno] ?? 'UNKNOWN'; $error_message = "[" . date('Y-m-d H:i:s') . "] $error_type: $errstr in $errfile on line $errline\n"; // Escribir en el archivo de log error_log($error_message, 3, $logFile); // No ejecutar el gestor de errores interno de PHP return true; } // Función para registrar excepciones no capturadas function customExceptionHandler($exception) { $logFile = __DIR__ . '/../logs/php_errors.log'; $error_message = "[" . date('Y-m-d H:i:s') . "] EXCEPTION: " . $exception->getMessage() . " in " . $exception->getFile() . " on line " . $exception->getLine() . "\n"; error_log($error_message, 3, $logFile); // Mostrar un mensaje genérico al usuario if (!headers_sent()) { header('HTTP/1.1 500 Internal Server Error'); } echo "Ha ocurrido un error inesperado. El administrador ha sido notificado."; } // Establecer manejadores de errores set_error_handler('customErrorHandler'); set_exception_handler('customExceptionHandler'); // Mostrar errores en pantalla solo en entorno de desarrollo ini_set('display_errors', 0); ini_set('log_errors', 1); ini_set('error_log', __DIR__ . '/../logs/php_errors.log');