Uso de include y require – PHP paso a paso

Usando require include PHP

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&oacute;n<br />';

include './include.php';

echo 'Finalizando ejecuci&oacute;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&oacute;n<br />';

echo 'Se ha incluido el archivo';

echo 'Finalizando ejecuci&oacute;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:

Nuestro ejemplo visto por pantalla

Nuestro ejemplo visto por pantalla

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&oacute;n<br />';

include './include-error.php';

echo 'Finalizando ejecuci&oacute;n';

Como el fichero include-error.php no existe, tendríamos este resultado:

Warning include

Nuestra pantalla mostrando el error del include

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&oacute;n<br />';

require './include.php';

echo 'Finalizando ejecuci&oacute;n';

Accediendo vía web, el resultado sería el mismo:

require

Nuestro ejemplo visto por pantalla

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&oacute;n<br />';

require './include-error.php';

echo 'Finalizando ejecuci&oacute;n';

Este sería el resultado por pantalla:

require error

Al fallar el require no se ejecuta el echo de “Finalizando ejecución”

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&oacute;n<br />';

require './include.php';
require './include.php';
require './include.php';

echo 'Finalizando ejecuci&oacute;n';

Tendríamos el siguiente resultado:

Al usar tres veces el require, la ruta se ejecuta también tres veces.

Al usar tres veces el require, la ruta se ejecuta también tres veces.

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&oacute;n<br />';

require_once './include.php';
require_once './include.php';
require_once './include.php';

echo 'Finalizando ejecuci&oacute;n';

El resultado cambiará, ya que sólo se ejecutará el require_once la primera vez: Aunque llamamos tres veces al require_once sólo se ejecuta la primera.

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.

Un pensamiento en “Uso de include y require – PHP paso a paso

  1. 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

Deja un comentario