Cómo puedes incluir otros archivos en un script PHP para reutilizar el código que tengas en ficheros distintos. Diferencias de hacerlo con include o require.
En este artículo vamos a hablar de dos sentencias de PHP muy utilizadas para la reutilización del código, ya que nos permiten agregar cualquier script PHP que tengamos en otros ficheros en el servidor, para que sea ejecutado en la página. Son dos sentencias muy utilizadas en el día a día del desarrollo con PHP: include y require, las cuales veremos juntas ya que funcionan de manera muy similar.
Para qué necesitamos los includes en PHP
La sentencia include, o require, es extremadamente usada y resulta de mucha utilidad. Existen multitud de casos de uso pero generalmente se basa siempre en la posibilidad de reutilizar código que ya está escrito en otro lugar.
Por ejemplo, imagina el código de una página web que conecta con una base de datos. Generalmente, el bloque de conexión con la base de datos será siempre igual, por lo que es una buena idea separarlo a un archivo independiente. Gracias a ello, en vez de escribir el mismo código de conexión con la base de datos una y otra vez en todas las páginas del sitio, podemos escribirlo una única vez en un archivo, que luego incluiremos todas las veces que haga falta, en todas las páginas que conecten con la base de datos.
Esto tiene dos ventajas que saltan a la vista:
- Evitamos repetir código, simplificando cada una de las páginas del sitio donde se tiene que conectar con la base de datos.
- Si las sentencias de conexión con la base de datos cambian, por ejemplo porque cambia la clave de acceso a la base de datos, entonces solamente tenemos que cambiar el código en un archivo, en vez de tener que hacerlo en multitud de páginas que conectan con la base de datos.
Existen, como digo, muchos casos de uso. Otro típico sería crear partes del sitio con código HTML que será siempre igual. Por ejemplo, todo sitio tiene una cabecera, con una barra de opciones o de navegación. Esa cabecera será siempre idéntica, por lo que resulta extremadamente útil separarla en un archivo aparte, de modo que todas las páginas que tengan que mostrar la cabecera incluyan el código de aquel archivo.
Incluso, aunque haya partes de la cabecera que puedan ser distintas, como podría ser el título de la página, no habría problema porque desde el código de los includes o requires podemos acceder perfectamente a las variables de la página. Y viceversa: cualquier variable, función u otro tipo de declaración en los includes esperfectamente alcanzable desde el archivo principal que los incluye o requiere.
También es típico que tengamos en un proyecto diversas funciones de utilidad, que se usen a lo largo de varias páginas del sitio. Por ejemplo, funciones que podrían validar un dato de uso frecuente, para verificar la existencia de un usuario logueado y muchas otras cosas que se puedan necesitar. En ese caso, es útil especificar esas funciones en uno o más archivos aparte, que incluiremos en las página donde se necesite usar tales funciones.
Cómo funciona la sentencia include o require
Lo primero que queremos mencionar es que include o require no son específicamente funciones, aunque mucha gente lo piense así. En realidad son sentencias del lenguaje, por lo que no necesitamos paréntesis para hacer las operaciones de incluir archivos.
Tanto include
como requiere
se usan de la misma manera, indicando el nombre de archivo que se desea incluir, con la ruta donde se encuentra.
include "conexion.php";
Este código incluiría el archivo conexion.php
dentro de una página. Tal como hemos colocado la ruta del archivo se entiende que conexion.php
se encuentra en el mismo directorio del script PHP sobre el que estamos trabajando.
Ahora podemos ver un ejemplo especificando rutas, que serán relativas a la carpeta donde nos encontramos:
include "funciones/validacion.php";
require "../templates/cabecera.php";
Si colocas entre paréntesis el nombre del archivo también funcionará, aunque no es especialmente necesario ya que no son funciones.
include("mensajes/aplicacion.php");
Diferencias entre include y require
Como has visto, include y require se usan de la misma manera, indicando el nombre del archivo a incluir. Ambas funciones realizarán la misma tarea, incluir el archivo indicado dentro de otro script PHP y procesarlo, ejecutando el código PHP que contenga, o volcando su contenido en el cuerpo de la página.
Sin embargo hay una pequeña diferencia en el funcionamiento en caso de que un require tenga un error.
- Si un include no se encuentra o tiene un error, PHP lo informará con un warning, permitiendo la ejecución del resto del script.
- Si un require no se encuentra en el servidor, ya sea porque el archivo se ha borrado o nos hemos equivocado al escribir la ruta, PHP generará un error fatal, lo que provocará que la página pare su ejecución en ese mismo instante.
Por tanto, lo normal es usar require en los casos en los que el archivo que se está requiriendo sea crítico y que, si algo no funciona con él, sea importante que se detenga el resto de la ejecución del código de la página.
Recomendaciones de seguridad con require o include
Las recomendaciones de seguridad con estos archivos serían las mismas que debes de tener para todo tu desarrollo con PHP en general. Sin embargo, hay algunos puntos extra que queremos ver.
Básicamente queremos llamar la atención a que los require o include deben realizarse preferiblemente hacia archivos determinados, que no dependan de la entrada de datos del usuario.
Hay personas que usan variables que vienen por get o post para montar las rutas de los includes, haciendo cosas como estas:
include('page-' . $_GET("page") . ".php"); // Atención, este código es potencialmente peligroso
Si lo ves, el usuario que escribió este código puede estar pensando que debe mostrarse una página en particular, o acceso a unos datos en particular que están en algún lugar enviado por una variable en la URL. Esto es potencialmente peligroso porque el usuario podría escribir cualquier cosa en la URL y por tanto hacer que la página haga un include o require de un archivo que no se esperaba, o que no debería.
Por tanto, las rutas de un include sería bueno que estuviesen escritas a fuego en el código, o en caso de no poder ser así, que al menos no dependan de variables que haya introducido el usuario en algún momento.
Si fuera necesario usar entrada de usuario para generar la ruta de un include, cosa que no recomendaríamos, al menos deberíamos ser muy concienzudos validando la entrada de datos para asegurar que no se intenta incluir nada que no esté permitido. Este tema es clave porque muchas personas que hemos sido novatos en PHP hemos cometido este mismo error. Por ejemplo, al escribir este artículo y buscar otras referencias a código de includes en PHP dentro de desarrolloweb, encontramos el artículo de generar una plantilla con un include, que incurría justamente en esta práctica desaconsejada. Por supuesto, hemos actualizado el artículo para indicar cómo validar la entrada de datos y asegurarnos que el usuario no nos envía datos potencialmente peligrosos.
Conclusión
Estas sentencias no tienen ninguna dificultad en especial, por lo que estamos seguros que las podrás entender perfectamente. A lo largo de los manuales dedicados a PHP las usamos constantemente los include y require, por lo que encontrarás muchos casos de uso en DesarrolloWeb.
Si deseas un poco más de información y entender de manera más práctica el uso de estas instrucciones del lenguaje te dejamos el enlace de un videotutorial de los includes en PHP.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...