El camino hasta ahora
Si has seguido todas las entradas de PHP paso a paso, ya sabes crear una pantalla sencilla como el «Hola mundo» y, lo más importante, cómo estructurar correctamente un documento HTML5 y tienes los conocimientos básicos suficientes para defenderte en CSS3. En esta entrada, vamos a ver con detenimiento cuatro funciones de PHP muy utilizadas en cualquier proyecto web.
Por qué utilizar include y require en PHP
Aunque hasta el momento el código que hemos escrito en nuestro index.php contiene pocas líneas, a medida que nuestro proyecto vaya creciendo también lo irán haciendo las líneas de código que escribimos, llegando a tener miles de líneas. Mantener todo el código en un único fichero de tal extensión complica las labores de comprensión y de organización del código. Al mismo tiempo, al estar todo el código en un mismo fichero, no sería posible (de forma sencilla) aprovechar parte de nuestro código para reutilizarlo en otros proyectos e, incluso, incorporar el de terceras personas. Así pues, si escribiésemos todo nuestro código en un solo archivo tendríamos, en poco tiempo, los siguientes problemas:
- Un fichero con un número elevado de líneas.
- Al ser un fichero único, éste tendría un peso considerable por lo que su edición sería lenta.
- El código no estaría bien organizado, teniendo dificultades para localizar y modificar las diferentes partes de nuestra aplicación.
- Dificultades para poder reutilizar tu propio código.
- Dificultades para poder aprovechar código realizado por terceras personas.
Para evitar estos problemas, el código debe dividirse en varios ficheros PHP y utilizar las soluciones que PHP nos brinda para incluir los ficheros PHP necesarios, cuando sea preciso.
include y require en PHP como solución
Para evitar tener que escribir todo el código en un fichero, los lenguajes de programación incorporan sistemas para «empaquetar» porciones de código en paquetes independientes que, posteriormente, puedan ser utilizados gracias a instrucciones del propio lenguaje que permiten la importación de paquetes, módulos etc. siendo el lenguaje el encargado de cargar los ficheros pertinentes. Aunque en PHP5 tenemos la posibilidad de utilizar los namespaces para crear «paquetes» de código e importarlos gracias al use, sigue estando de mano del programado incluir de forma explícita los ficheros PHP que van a ser utilizados. Para incluir los ficheros, PHP nos proporciona cuatro funciones:
Función de PHP include
En nuestro proyecto web, creamos un directorio llamado require-include y, en su interior, creamos un fichero include.php con el siguiente contenido:
<?php echo 'Se ha incluido el archivo <br />';
Y también creamos un index.php
<?php echo 'Iniciando ejecución<br />'; include './include.php'; echo 'Finalizando ejecución';
Cuando este código sea procesado, a nivel práctico, sería como si se escribiese todo en un mismo fichero de la siguiente manera:
<?php echo 'Iniciando ejecución<br />'; echo 'Se ha incluido el archivo'; echo 'Finalizando ejecución';
La ruta del fichero especificada en el include puede ser una URL siempre y cuando en la configuración de PHP se permite la inclusión de ficheros externos, esto se hace activando el la directiva allow_url_fopen. En nuestro ejemplo, hemos utilizado ./include.php ya que ./ indica que include.php está en la misma ruta que el index.php El resultado en nuestro navegador sería el siguiente:
GitHub: Uso de include
Si por algún motivo la ruta a incluir no es accesible (ya sea por falta de permisos o porque no exista el archivo), se generará una línea de error (warning) sin que este error detenga la ejecución de la página. Así pues, cambiando el include por el siguiente:
<?php echo 'Iniciando ejecución<br />'; include './include-error.php'; echo 'Finalizando ejecución';
Como el fichero include-error.php no existe, tendríamos este resultado:
Podemos comprobar que, aunque tengamos un mensaje de error, la carga de la web ha seguido su curso natural. Como consecuencia de esta característica del include, se suele utilizar cuando los archivos a incorporar no incluyen ninguna funcionalidad crítica o necesaria en nuestra aplicación.
GitHub: Error en uso de include
Función de PHP require
<?php require 'fichero'; ?>
Como se puede ver, la sintáxis de la función require es la misma que para include. Su funcionamiento es exactamente igual, por lo que el ejemplo utilizado para explicar el include, podemos dejarlo igual, modificando simplemente el include por require:
<?php echo 'Iniciando ejecución<br />'; require './include.php'; echo 'Finalizando ejecución';
Accediendo vía web, el resultado sería el mismo:
GitHub: Uso de require
La diferencia entre include y require
Si, como hemos visto, el resultado de utilizar require o include es el mismo ¿por qué PHP proporciona ambas funciones? Hemos comprobado cómo cuando el include no podía cargar la ruta indicada se generaba un error de PHP, pero la web continuaba su carga natural; y es aquí dónde tenemos la diferencia. En el caso de utilizar require en vez de include, si la ruta no puede ser cargada, el nivel del error generado es más crítico, de forma que una vez detectado el error, PHP detendrá la carga de la página, por lo que todo el código que debería ser leído tras el require no lo será. Si nuestro index.php fuese el siguiente:
<?php echo 'Iniciando ejecución<br />'; require './include-error.php'; echo 'Finalizando ejecución';
Este sería el resultado por pantalla:
Así pues, lo normal es utilizar los require para incluir los archivos que son necesarios para el correcto funcionamiento de la aplicación.
GitHub: Error en uso de require
Por qué PHP proporciona include_once y require_once
Las funciones de PHP include y require van a incorporar la ruta cada vez que se utilicen, esto significa que con este código:
<?php echo 'Iniciando ejecución<br />'; require './include.php'; require './include.php'; require './include.php'; echo 'Finalizando ejecución';
Tendríamos el siguiente resultado:
GitHub: Varias cargas de require
En la mayoría de las ocasiones querremos incluir los ficheros sólo una vez ya que en ellos se declaran funciones y PHP no permite sobrescribir funciones. Si unimos esta necesidad a la realidad de que no siempre estaremos en situación de saber si los archivos necesarios ya han sido cargados o no, tenemos el motivo por el cual existen include_once y require_once. Tanto include_once como require_once funcionan exactamente igual que include y require con la salvedad de que aunque se llamen en múltiples ocasiones, si ya ha sido cargado una vez, PHP ignorará el resto de llamadas. Por lo tanto, si en nuestro ejemplo modificamos el index.php de la siguiente manera:
<?php echo 'Iniciando ejecución<br />'; require_once './include.php'; require_once './include.php'; require_once './include.php'; echo 'Finalizando ejecución';
El resultado cambiará, ya que sólo se ejecutará el require_once la primera vez:
GitHub: funcionamiento require_once
Sintaxis alternativa para include y require
Cuando se esté revisando código de otra gente, es posible que los include y require aparezcan de la siguiente manera:
<?php include('fichero.php'); require('fichero.php'); include_once('fichero.php'); require_once('fichero.php'); ?>
Esta sintaxis es la utilizada para llamar a las funciones. Como include y require no son funciones, si no que son sentencias que forman parte de la estructura de control, aunque esa sintáxis funcione, por estándar se aconseja utilizar la que hemos usado en todo el artículo:
<?php include 'fichero.php'; require 'fichero.php'; include_once 'fichero.php'; require_once 'fichero.php'; ?>
Es muy importante hacer caso de los estándares e intentar cumplirlos. En este sentido, existe el proyecto http://www.php-fig.org/ que busca crear unos estándares consensuados por los principales agentes en el mundo del PHP.
GitHub: Uso de include y require – PHP paso a paso
En la próxima entrega
En este artículo hemos se ha nombrado en varias ocasiones el concepto de funciones. Si no conoces las funciones, no te preocupes ya que se le dedicará un artículo a las funciones. Sin embargo, antes de llegar a él, en el próximo artículo hablaremos de las variables y las utilizaremos en nuestro Hola mundo, junto con lo visto en este artículo. Con lo visto hoy y el uso de funciones y variables estaremos listos para el siguiente paso, el MVC.
en la mayoria esta falla esta poruqe no respetamos las minusculas con mayusculas..
requiere ‘Casa.php’ == requiere ‘Casa.php’ //windows xampp lampp etc.
requiere ‘Casa.php’ != requiere ‘Casa.php’ //ubuntu xampp lampp etc.
en ubuntu los textos son diferentes
hola como esta…quisiera hacer una consulta…realizo el llamado de los archivos a mi index.php a través del require_once() y funciona pero ademas de traerme los archivos también muestra en pantalla un numero 1 por cada elemento que llamo…podrían ayudarme con este tema porque en ningún lugar de Internet he encontrado un caso como el que les menciono…..GRACIAS