Está en la página 1de 8

“Buenos hábitos y control de errores en PHP”

Leslie María Amaya Gámez, Rafael Alejandro Guzmán Ramírez, Eduardo José Naves Morataya. Todos
estudiantes de Ingeniería en Ciencias de la Computación de la Universidad Don Bosco.

Abstracto—Aquí se presenta la información sobre los buenos hábitos a la hora de programar en PHP
así como también información sobre las funciones de manejo de errores y de qué manera se puede
hacer uso de excepciones.

Índice de términos—

Depurador.

Excepciones.

Datos.

Documentar.

Metodos.

Clases

Expresiones regulares.

Arreglos.

Funciones.

I. INTRODUCCIÓN

El presente trabajo está destinado a abordar la información referente a buenos hábitos a la hora de
programar en PHP así como también la manera en la que se pueden controlar los errores. Contendrá
información referente a puntos importantes sobre la mejor manera de optimizar las aplicaciones
realizadas dando pequeñas sugerencias para lograrlo. Por otro lado, también se darán a conocer
algunas funciones que colaboran con el manejo de errores y también el uso de excepciones.

II. BUENOS HÁBITOS PARA PROGRAMAR EN PHP.

Es necesario estandarizar la construcción de software en PHP optimizando el tiempo de ejecución y


favoreciendo la legibilidad del código [1].
A. Consideraciones Generales.

- Asegurarse del tipo de datos.

- No usar “short-Tags”:

No se debe usar el formato corto de etiquetas cuando se desarrollen aplicaciones o bibliotecas con
intención de redistribuirlas, o cuando se desarrolle para servidores que no están bajo nuestro
control, porque puede ser que el formato corto de etiquetas no esté soportado en el servidor. Para
generar código portable y redistribuible, asegúrate de no usar el formato corto de etiquetas.

- Emplear excepciones:

Las excepciones se utilizan para cambiar el flujo normal de un script si ocurre un error concreto
dentro de una condición.

- Usar un depurador (debugger)

PHP 5.6 viene con el depurador interactivo phpdbg. Las versiones de PHP anteriores a la 5.6 no
cuentan con una herramienta de depuración interna, sin embargo. Aun así, se puede utilizar uno de
los depuradores externos. El IDE Zend incluye un depurador y existen también algunas extensiones
de depuración gratuitas como DBG. Depurador Avanzado de PHP (APD, por sus siglas en inglés) o
Xdebug.

- Documentar.

Escribir documentación sobre un proyecto se tiene que tomar en cuenta al usuario final y por otro
lado a los programadores que quieran continuar con el desarrollo o incluso reparar defectos.

B. Consideraciones a la hora de programar.

- No sobre cargar los métodos.

Hace referencia a que cada método desarrollado realice una solo función específica y no se
desarrollen con una excesiva funcionalidad, por lo que no es recomendable realizar métodos con
más de cien líneas de código.

- No sobre cargar las clases.

Las clases al igual que lo métodos no pueden tener un exceso de funcionalidades ya que si una clase
posee demasiados métodos es difícil realizar una traza de errores. No es recomendable asociar más
de diez métodos a una clase o realizar clases con un número elevado de líneas de código.

- Controlar el número de parámetros en una llamada.

No es recomendable realizar llamadas a métodos o funciones con un número superior a diez


parámetros.

- No usar die() para el manejo de errores.


Esto puede suponer graves problemas para la aplicación, en el caso de que se produzca el error no
se reportara información del mismo provocando una sensación poco agradable en el usuario

- Declarar los métodos estáticos cuando sea posible.

La razón principal para la declaración de métodos tipo estáticos es porque reduce el tempo de
ejecución hasta cuatro veces con respecto a los métodos que no están declarados como estáticos

- Utilice foreach() en los bucles de colecciones y arrays.

Utilizar un foreach() para la lectura o impresión de arrays es mucho más rápido que utilizar un for o
while.

- No usar funciones dentro de bucles de conteo.

Si se coloca la función count() que es ejecutada dentro de la iteración influye en la velocidad del
proceso, por lo que se recomienda precalcular el tamaño de los arreglos a utilizar.

- Usar conexiones persistentes.

Las conexiones persistentes permanecen conectadas, aunque el script haya terminado, lo que
significa que el siguiente script pregunte por una conexión, usa la única que está disponible. Esto
ahorra mucho tiempo negociando las contraseñas y ahorra la ejecución de una parte importante de
código.

III. ¿CÓMO FILTRAR CARACTERES NO DESEADOS?

El filtrado de datos de entrada o inputs es un aspecto fundamental para evitar ataques como los XSS
Cross-Site Scripting.

Las vulnerabilidades de tipo Cross-Site Scripting (XSS) son de las vulnerabilidades más frecuentes en
las aplicaciones web. Según el OWASP Top 10, esta vulnerabilidad se encuentra en alrededor de dos
tercios (2/3) de todas las aplicaciones. Los ataques XSS son un tipo de inyección en la cual un
atacante logra ejecutar código en los navegadores de los usuarios que acceden a un sitio web
legítimo. [2]

Maneras de realizar la filtración de caracteres.

A. Validación con expresiones regulares.

En todo formulario es necesario validar cada uno de los campos en los cuales el usuario introducirá
información esto va desde validar que el campo se encuentre vacío o coloque caracteres que no
corresponden con lo solicitada dentro del formulario.

Con PHP la manera de verificar que un campo no este vacío se realiza fácilmente con la propiedad
empty().
Para validar los campos de una manera más precisa se hace uno de expresiones regulares. Para ello
PHP dispone de la función _preg_match()_ que exige dos parámetros obligatorios, la expresión
regular y el String que tiene que comprobar.

Con las expresiones regulares se consigue un nivel de precisión muy alto. De todas formas, PHP tiene
una extensión de filtrado con la que se pueden realizar filtros más rápidos para la validación y
saneamiento de los datos [3].

B. Especificar la codificación de caracteres.

La sanitación de datos consiste en modificar los inputs de entrada y de esta manera eliminar
caracteres indeseables y parar lograr normalizar los datos antes de guardarlos de manera segura.

Con la función htmlspecialchars() reducimos el riesgo, pero siguen siendo posibles los ataques XSS.
Con ENT_QUOTES se consigue que todas las comillas simples ' y dobles " se filtren, pero se pueden
realizar ataques sin utilizar comillas.

Por otro lado, también es posible crear nuestro propio código de saneamiento de datos el cual
podemos ajustar a nuestras necesidades, con la única condición de ser exhaustivos y revisar que no
estamos dejando ningún caso fuera y el cual deba ser tratado.

C. La extensión de filtrado de PHP.

La extensión de filtrado de PHP permite validar o realizar el proceso de saneamiento de datos,


especialmente cuando vienen de fuentes externas como podrían ser los usuarios. La extensión se
divide entre filtros de validación, para comprobar que los datos cumplen ciertos requisitos, y en
filtros de saneamiento, que limpiará los datos de forma que se eliminen los caracteres no deseados.

Las banderas u opciones de filtrado sirven para modificar el comportamiento en el saneamiento o la


validación según las necesidades. Por ejemplo, si se pasa FILTER_FLAG_PATH_REQUIRED en una url,
se exige que se precise una ruta concreta: /seccion en http://www.ejemplo.com/seccion.

Fig. 1 Constantes de filtrado

IV. MANEJO DE ERRORES.

En PHP existen diferentes tipos de mensajes y errores cuando algo falla en el código. Para ponerlo de
manera simple, existen hasta 3 niveles de mensajes en tiempo de ejecución que pueden aparecer.
Estos son los siguientes:

- Notificaciones: No son necesariamente errores, pero PHP nos avisa cuando alguna parte de nuestro
código puede llevar luego a un error. Una de las más comunes notificaciones es cuando intentamos
acceder a un elemento no existente de un arreglo.

- Advertencia: Son errores los cuales no tienen - una relevancia alta en nuestro código, sin embargo;
lo recomendable es corregirlos lo más pronto posible. Por ejemplo, intentar incluir un archivo el cual
no existe o llamar a una función con un argumento faltante.
- Errores: Son errores relevantes y los cuales debemos corregir de manera inmediata ya que
detendrán la ejecución de nuestro código y no nos permitirán continuar. [4]

A. Funciones de para el manejo de errores.

Estas funciones se ocupan del manejo y registro de errores. Le permiten definir sus propias reglas de
manejo de errores, así como modificar la manera en que los errores pueden ser registrados. Esto le
permite cambiar y mejorar la notificación de errores para acomodarla a sus necesidades.

Las funciones de notificación de errores permiten personalizar qué niveles y tipos de errores se dan,
abarcando desde simples avisos hasta funciones personalizadas devueltas al originarse un error.

Algunos ejemplos de funciones [5]:

- debug_backtrace — Genera un rastreo.

- debug_print_backtrace — Muestra un rastreo.

- error_clear_last — Limpiar el error más reciente.

- error_get_last — Obtener el último error que ocurrió.

- error_log — Enviar un mensaje de error a las rutinas de manejo de errores definidas.

- error_reporting — Establece cuáles errores de PHP son notificados.

- restore_error_handler — Recupera la función de gestión de errores previa.

- restore_exception_handler — Restaura la función de gestión de excepciones previamente definida.

- set_error_handler — Establecer una función de gestión de errores definida por el usuario.

- set_exception_handler — Establece una función de gestión de excepciones definida por el usuario.

- trigger_error — Generar un mensaje de error/advertencia/aviso de nivel de usuario.

- user_error — Alias de trigger_error.

B. Excepciones de PHP: Try Catch para el manejo de errores

PHP 5 introdujo un nuevo modelo de errores que te permite lanzar y capturar excepciones en una
aplicación; esta es una mejor manera de gestionar errores en comparación con lo que teníamos en
versiones anteriores de PHP. Todas las excepciones son instancias de la clase base Exception, que
podemos extender para introducir nuestras propias excepciones personalizadas.
Es importante tomar en cuenta que el manejo de excepciones es diferente al manejo de errores. En
el manejo de errores podemos usar la función set_error_handler para establecer nuestras funciones
de gestión de errores personalizadas, de manera que cada vez que se desencadene un error, éste
invocará a nuestra función de manejo de errores personalizada. De esa manera puedes controlar los
errores. Sin embargo, por lo general es imposible recuperarse de ciertos tipos de errores y esto
detiene la ejecución del programa.

Por otro lado, las excepciones son algo que es lanzado deliberadamente por el código, y se espera
que sean capturadas en algún punto en tu aplicación. Así que podemos decir que es posible
recuperarnos de las excepciones, a diferencia de ciertos errores de los que es imposible recuperarse.
Si una excepción lanzada se captura en algún lugar de tu aplicación, la ejecución del programa
continúa desde el punto en el que la excepción fue capturada. Y una excepción que no es capturada
en ningún lugar de tu aplicación da como resultado un error, deteniendo de esa manera la ejecución
del programa.

Las excepciones pueden ser lanzadas y capturadas usando los bloques try and catch.

Fig. 2 Ejemplo de bloque try catch

Al momento de lanzar una excepción se debe asegurar que el bloque catch este correctamente
definido en caso de que este no se encuentre se encuentre podría causar un error fatal.

Las excepciones pueden ser lanzadas por alguna función que se invoque o de una manera manual
usando la palabra throw.

Una vez que la excepción ha sido capturada en el bloque catch, el objeto excepción tiene el mensaje
de error que fue lanzado usando la palabra throw.

V. CONCLUSIONES.

Se concluye que al tener buenos hábitos a la hora de programar haciendo uso del lenguaje PHP se
pueden obtener mejoras tanto como la velocidad de la aplicación, así como también se asegura la
realización de un código fuente entendible tanto para nosotros mismos así como para usuarios
externos que desean modificarlo o bien hacer alguna mejora, ya que hasta los aspectos más
generales como lo es documentar el código son de gran apoyo a la hora de la programación.

Por otro lado, se da a conocer la importancia que tiene el correcto manejo de errores mediante
diferentes funciones o ya se sea con el uso de los bloques try catch, lo cual es de gran ayuda para
evitar producir ciertas incomodidades al usuario durante el uso de dicho programa u aplicación,
también el manejo y captura de errores es importante para el programador ya que le facilita
observar cual son los puntos de falla dentro del código desarrollado.

VI. REFERENCIAS.

Internet:
[1] Marco de Desarrollo de la Junta de Andalucía Buenas prácticas de construcción en PHP. Extraído
de: http://www.juntadeandalucia.es/servicios/madeja/sites/default/files/historico/1.3.0/contenido-
libro-pautas-102.html

[2] Adan Alvarez. Los peligros de los ataques de Cross-Site Scripting (XSS). Extraído de:
https://www.a2secure.com/blog/los-peligros-de-los-ataques-de-cross-site-scripting-xss/

[3] Diego Lazaro. Filtrado de datos de entrada PHP. Extraído de: https://diego.com.es/filtrado-de-
datos-de-entrada-en-php

[4] aulaFormativa- Manejo de errores PHP. Extraído de: https://blog.aulaformativa.com/manejo-de-


errores-en-php/

[5] PHP Conference Japan 2019 CFP Started. Menejo y registro de errores. Extraído de:
https://www.php.net/manual/es/book.errorfunc.php

VII. BIOGRAFÍAS.

También podría gustarte