Mensajes de error

PHP trata de ser útil cuando esta ejecutando un script, es capaz de encontrar errores en el código y notificarlo con un mensaje de error. Existen diferente tipos de mensajes de error que PHP detectara automáticamente y lo notificara con tanta información como sea posible.



1. Tipos de mensajes de error

Cuando PHP nos muestra un mensaje de error, nos indica en que archivo a sido y la linea donde se encuentra el error. Puede mostrar cualquiera de estos mensajes de error:

  • Parse error: es un error de análisis que encuentra PHP a la hora de escanear el script antes de ser ejecutado.
  • Fatal error: es un error grave que impide la ejecución del script.
  • Waring: no llega a ser un error, simplemente es un aviso y el script podría ejecutarse.
  • Notice: otro aviso que puede indicar algún error o que todo esta correcto.
  • Strict: añadido en PHP 5 y advierte sobre el estándar de calificación.

A la hora de crear scripts PHP es muy recomendable utilizar un editor que tenga la posibilidad de añadir una numeración a las lineas del código para que en caso de error sea mas fácil localizarlo.



1.1 Parse error

Antes de ejecutar el script, PHP examina el archivo en busca de errores de sintaxis. Si en el escaneo encuentra algún error, PHP nos informara que a encontrado un error de análisis o error fatal como olvidarse de poner un punto y coma, un paréntesis, una llave, ... Puede ser de la siguiente manera:
Parse error: TipoDeError, Error, in NombreDeArchivo.php on line 6

Parse error: syntax error, unexpected '>', in \home\luis\prueba.php on line 6


1.2 Fatal error

Este tipo de error aparece cuando PHP empieza a ejecutar la secuencia de comandos y encuentra algo que le impide continuar ejecutando el script. PHP nos mostrara el mensaje de error con la mayor cantidad de información posible.

Un error muy común se encuentra cuando PHP intenta ejecutar una función que no existe, el siguiente ejemplo muestra el error:
Fatal error: Call to undefined function xxx() in \prueba.php on line 34
El error nos dice que no puede encontrar la función xxx() cuando es llamada en la linea 34.


1.3 Warings

Normalmente este tipo de avisos se muestran cuando en la ejecución del script se encuentra un problema que no es tan grabe como para detener la ejecución. Dependerá del desarrollador identificar el aviso y decidir modificarlo. Este tipo de avisos es muy común cuando intentamos acceder a MySQL con un user y password incorrectos, veríamos el siguiente aviso:
Waring: mysql_connect() [function.mysql-connect]: Acces denied for user 
    'root'@'localhost' (using password: YES) in \prueba.php on line 16
El mensaje de aviso indica que la conexo con la base de datos a fallado pero la ejecución del script continua. Sin embargo como las declaraciones posteriores del script dependerán de la conexión con la base de datos, este tipo de advertencias deben ser corregidas.


1.4 Notices

Este tipo de avisos suelen aparecer cuando PHP ve una condición que puede ser un error o puede estar perfectamente correcta. No suelen causar que la ejecución del script de detenga, simplemente mostrara un aviso indicando que se esta haciendo algo mal y es recomendable revisarlo.

Podríamos encontrar este tipo de avisos por ejemplo cuando se hace un "echo" a una variable que no existe:
Notice: undefined variable: edad in \prueba.php on line 21


1.5 Strict

Advierten sobre las normas de calificación. Se incluyeron en PHP 5 y no detienen la ejecución del script.

Normalmente encontramos estas advertencias cuando utilizamos una función de PHP que esta obsoleta y en un futuro puede ser sustituida por otra función o directamente eliminada.
Deprecated: Function eregi() is deprecated in \prueba.php on line 7



2. Visualizar mensajes de error

PHP tiene preconfiguradas unas cuantas variables en su archivo "php.ini" para modificar los mensajes de error. Editando alguna de esas variables seremos capaces de realizar las siguientes operaciones:

  • Mostrar algunos o todos los mensajes de error
  • No mostrar los mensajes de error
  • Eliminar un mensaje de error



2.1 Desactivar los mensajes de error

Los mensajes de error se muestran en el navegador web de forma predeterminada siendo un riesgo de seguridad. Mientras estamos desarrollando algún proyecto es recomendable tenerlos activados, pero una vez concluido el proyecto deberemos desactivarlos.

Para desactivarlos simplemente abrimos el archivo "php.ini" y editamos la siguiente sección:
    display_errors

PHP nos ofrece la posibilidad de activar o desactivar los mensajes de error desde el propio script, para ello utilizaremos la siguiente función:
    ini_set("display_errors", "Off");

Una practica muy recomendable es desactivarlos desde el archivo "php.ini" y activarlos manualmente desde nuestro script para tener un punto mas de seguridad.


2.2 Visualizar los mensajes seleccionados

PHP ofrece la posibilidad de configurar que mensajes de error queremos que nos muestre. Para ello simplemente tendremos que editar la siguiente sección del archivo "php.ini":
    error_reporting

En el siguiente enlace podremos ver las diferentes constantes predefinidas para esta función: ERROR_REPORTING.

Algunos ejemplos podrían ser los siguiente:
    error_reporting = E_ALL | E_STRICT
    error_reporting = 0
    error_reporting = E_ALL | ~E_NOTICE

De igual manera que el punto anterior, podremos configurarlo directamente en nuestro script con la siguiente función:
    error_reporting(E_ALL);


2.3 Eliminar un solo mensaje de error

Se puede suprimir la visualización de un único mensaje de error, normalmente no es una practica muy recomendable pero puede resultar útil. Podríamos realizarlo colocando el símbolo "@" donde se espera que genere el mensaje de error, como en el siguiente ejemplo:
    echo @$prueba;
Si no suprimimos el aviso con el uso del símbolo "@" y la variable $prueba no se ha establecido anteriormente a esa declaración, obtendríamos el siguiente aviso:
Notice: undefined variable: prueba in \prueba.php on line 21



3. Registrar los mensajes de error

PHP nos ofrece la posibilidad de registrar en un archivo externo todos los mensajes de error  que tengan lugar. Esto produce un permanente registro de los errores que no aparecen en el navegador web.


3.1 Registrar los errores

Para ello deberemos abrir el archivo de conflagración "php.ini" y editar la sección:
    log_error
Podremos establecer su valor a "On" y "Off". Una vez editado el archivo tendremos que guardar los cambios y reiniciar el servidor web. Por defecto el archivo de registro de errores esta ubicado en un subdirectorio dentro de la carpeta de instalación de Apache.

Por otro lado podremos indicar en nuestro script el registro de errores a un archivo utilizando la siguiente declaración:
    ini_set("log_error", "On");


3.2 Especificar archivo de registro

Para terminar el articulo vamos a ver como especificar la ruta donde se guardara el archivo de registro. Para ello deberemos editar la siguiente sección del archivo "php.ini":
    error_log = "\home\luis\logs_error_PHP\error.log"
Si el archivo no existe, PHP lo creara automáticamente y una vez guardados los cambios deberemos reiniciar el servidor.

Tenemos la posibilidad de indicarlo en nuestro script con la siguiente declaración:
    ini_set("log_error", "On");

PHP registrara cada error en una única linea del archivo indicando la fecha y hora del error.


No hay comentarios:

Publicar un comentario