Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

Redirigir errores PHP a la consola Docker o consola de Linux (logs por consola)

Tiempo de lectura: 2 minutos

Hoy vamos a aprender cómo podemos hacer un handler para redirigir los errores PHP a la consola de Linux o Docker.

Lo primero que tenemos que hacer es crear un manejador, podemos llamarlo exception_handler.php

Y vamos a añadir lo siguiente:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
function manejarExcepcion($excepcion)
{
// Obtener información sobre la excepción
$mensaje = 'ERR: Se ha producido un error en el sitio web.' . "\n\n";
$mensaje .= 'ERR: Mensaje de error: ' . $excepcion->getMessage() . "\n";
$mensaje .= 'ERR: Archivo: ' . $excepcion->getFile() . "\n";
$mensaje .= 'ERR: Línea: ' . $excepcion->getLine() . "\n";
$mensaje .= 'ERR: Código de estado HTTP: ' . http_response_code() . "\n";
$fechaActual = date('Y-m-d H:i:s');
$cadenaError = $fechaActual . " IP: [" . $_SERVER['REMOTE_ADDR'] . "] " . $mensaje;
file_put_contents('php://stdout', $cadenaError . "\n");
}
// Establecer la función de manejo de excepciones personalizada
set_exception_handler('manejarExcepcion');
<?php function manejarExcepcion($excepcion) { // Obtener información sobre la excepción $mensaje = 'ERR: Se ha producido un error en el sitio web.' . "\n\n"; $mensaje .= 'ERR: Mensaje de error: ' . $excepcion->getMessage() . "\n"; $mensaje .= 'ERR: Archivo: ' . $excepcion->getFile() . "\n"; $mensaje .= 'ERR: Línea: ' . $excepcion->getLine() . "\n"; $mensaje .= 'ERR: Código de estado HTTP: ' . http_response_code() . "\n"; $fechaActual = date('Y-m-d H:i:s'); $cadenaError = $fechaActual . " IP: [" . $_SERVER['REMOTE_ADDR'] . "] " . $mensaje; file_put_contents('php://stdout', $cadenaError . "\n"); } // Establecer la función de manejo de excepciones personalizada set_exception_handler('manejarExcepcion');
<?php

function manejarExcepcion($excepcion)
{
    // Obtener información sobre la excepción
    $mensaje = 'ERR: Se ha producido un error en el sitio web.' . "\n\n";
    $mensaje .= 'ERR: Mensaje de error: ' . $excepcion->getMessage() . "\n";
    $mensaje .= 'ERR: Archivo: ' . $excepcion->getFile() . "\n";
    $mensaje .= 'ERR: Línea: ' . $excepcion->getLine() . "\n";
    $mensaje .= 'ERR: Código de estado HTTP: ' . http_response_code() . "\n";
    

    $fechaActual = date('Y-m-d H:i:s');
    $cadenaError = $fechaActual . " IP: [" . $_SERVER['REMOTE_ADDR'] . "] " .  $mensaje;
    file_put_contents('php://stdout', $cadenaError . "\n");
}

// Establecer la función de manejo de excepciones personalizada
set_exception_handler('manejarExcepcion');

Esta función nos dará toda la información necesaria para identificar el error, el mensaje de error, el archivo, la línea y el código de error. Además de la fecha y la IP desde dónde nos han llamado.

OJO: debéis poner $_SERVER[‘HTTP_X_REAL_IP’] si usais un proxy inverso, en vez de $_SERVER[‘REMOTE_ADDR’];

Ahora solo tenemos que incluir este fichero en los ficheros que queramos auditar errores realizando un include:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
include_once('../extras/exception_handler.php');
include_once('../extras/exception_handler.php');
include_once('../extras/exception_handler.php');

Extra: Logs por consola.

Si queremos sacar logs por consola sin que sean excepciones podemos utilizar:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
function logConsola($mensaje)
{
// Registrar el mensaje en la consola
error_log($mensaje);
}
// Ejemplo de uso
logConsola("Este es un mensaje informativo.");
logConsola("Este es un mensaje de advertencia.");
logConsola("Este es un mensaje de depuración.");
<?php function logConsola($mensaje) { // Registrar el mensaje en la consola error_log($mensaje); } // Ejemplo de uso logConsola("Este es un mensaje informativo."); logConsola("Este es un mensaje de advertencia."); logConsola("Este es un mensaje de depuración.");
<?php

function logConsola($mensaje)
{
    // Registrar el mensaje en la consola
    error_log($mensaje);
}

// Ejemplo de uso
logConsola("Este es un mensaje informativo.");
logConsola("Este es un mensaje de advertencia.");
logConsola("Este es un mensaje de depuración.");

Podemos redirigir todos los errores que se produzcan en los ficheros php, incluyendo esto en nuestro .htaccess:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<IfModule mod_php.c>
php_value auto_prepend_file "exception_handler.php"
</IfModule>
<IfModule mod_php.c> php_value auto_prepend_file "exception_handler.php" </IfModule>
<IfModule mod_php.c>
    php_value auto_prepend_file "exception_handler.php"
</IfModule>

Y podemos completar nuestro script para que sea más completo de esta forma:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter

		
0

Deja un comentario