W3docs

error_get_last()

Aprende a usar error_get_last() en PHP para inspeccionar el último error registrado: tipo, mensaje, archivo y línea.

El manejo de errores es una parte importante de la programación en PHP, ya que los errores pueden ocurrir en cualquier momento durante la ejecución. La función error_get_last() es una función integrada de PHP que te permite inspeccionar el error más reciente que PHP registró — su tipo, mensaje, archivo y línea — para que puedas registrarlo o reaccionar a él en el código. Este capítulo explica qué devuelve la función, cuándo devuelve null, qué tipos de errores captura y cuáles no, y cómo usarla correctamente en PHP moderno.

Qué devuelve error_get_last()

error_get_last() no recibe argumentos y devuelve información sobre el último error que PHP generó durante la solicitud actual. El valor de retorno es una de dos cosas:

  • Un array asociativo con cuatro claves, si ha ocurrido un error.
  • null, si aún no se ha registrado ningún error.

El array tiene la siguiente forma:

[
  'type'    => 2,                       // int: the error level (E_WARNING here)
  'message' => 'fopen(...): ...',       // string: the error description
  'file'    => '/path/to/script.php',   // string: file where the error happened
  'line'    => 12,                      // int: line number where it happened
]

El elemento type es un entero que coincide con una de las constantes de nivel de error de PHP — por ejemplo E_WARNING (2), E_NOTICE (8), E_USER_WARNING (512) o E_DEPRECATED. Consulta la referencia de errores de PHP para ver la lista completa.

Qué captura y qué no captura

Esta es la parte que la gente suele malinterpretar, por lo que vale la pena ser preciso:

  • captura errores reportados, advertencias, avisos y deprecaciones — todo lo que fluye a través del mecanismo de error normal de PHP, incluyendo los generados con trigger_error().
  • No captura excepciones. En PHP moderno (7.0+), muchos fallos lanzan excepciones en lugar de generar errores — por ejemplo, la división y el módulo por cero lanzan DivisionByZeroError, no una advertencia. Esos deben manejarse con try/catch, y error_get_last() no los verá.
  • Solo ve los errores que realmente son reportados. Si un nivel de error es filtrado por error_reporting(), no aparecerá. Activa error_reporting(E_ALL) durante la depuración para que nada se descarte silenciosamente.

Por esta razón, error_get_last() es más útil justo después de una función integrada que señala un fallo mediante una advertencia (como fopen(), file_get_contents() o unlink()), y dentro de una función de apagado personalizada para capturar un error fatal que terminó la solicitud.

Ejemplos

Leer la última advertencia de un fopen() fallido

Funciones como fopen() devuelven false y generan un E_WARNING cuando fallan. El operador @ suprime la advertencia para que no se imprima, mientras que error_get_last() todavía puede leerla:

<?php
error_reporting(E_ALL);

$handle = @fopen("/no/such/file.txt", "r");

if ($handle === false) {
    $error = error_get_last();
    echo "Type:    " . $error['type']    . "\n";
    echo "Message: " . $error['message'] . "\n";
    echo "Line:    " . $error['line']    . "\n";
}
?>

Salida:

Type:    2
Message: fopen(/no/such/file.txt): Failed to open stream: No such file or directory
Line:    4

El type es 2, que es el valor de la constante E_WARNING, y el mensaje proviene directamente de fopen().

Capturar un error generado manualmente

Puedes registrar tu propio error con trigger_error() y luego leerlo:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '0');

trigger_error("Invalid configuration value", E_USER_WARNING);

$error = error_get_last();
echo "Message: " . $error['message'] . "\n";
echo "Type:    " . $error['type'] . "\n"; // 512 = E_USER_WARNING
?>

Salida:

Message: Invalid configuration value
Type:    512

Cuando no ha ocurrido ningún error

Si aún no ha salido nada mal, la función devuelve null, así que comprueba siempre antes de leer las claves del array:

<?php
$error = error_get_last();

var_dump($error); // NULL — guard against this before using $error['message']
?>

Salida:

NULL

Errores comunes

  • Comprueba siempre si el resultado es null (if ($error !== null)) antes de acceder a $error['message'], o generarás una nueva advertencia "trying to access array offset on null".
  • La división por cero ya no es una advertencia. Usa try/catch para DivisionByZeroError; error_get_last() no lo reportará.
  • Para el registro programático en lugar de la inspección, considera combinar esto con error_log() o un manejador personalizado registrado mediante set_error_handler().

Conclusión

error_get_last() te proporciona el tipo, mensaje, archivo y línea del error más reciente que PHP registró, o null si no hubo ninguno. Úsala justo después de una función integrada que falle con una advertencia, o dentro de una función de apagado — y recuerda que las excepciones (incluida la división por cero moderna) necesitan try/catch en su lugar.

Práctica

Práctica
¿Qué hace la función error_get_last() en PHP?
¿Qué hace la función error_get_last() en PHP?
Was this page helpful?