Fork me on GitHub

Miquel Camps Orteza

Soy programador web. Estoy especializado en desarrollo web (php, js). Estoy aprendiendo a desarrollar apps para iphone/ipad.
Organizo betabeers en Madrid.
Sobre mí     Metas     Hacks     Contactar     LinkedIn     Twitter    
Inicio

diferencias entre include, require, include_once y require_once

en general las 4 funciones hacen lo mismo, importar en un documento php, funciones o variables de otros documentos escritos en php o html

esto resulta muy util y practico a la hora de dividir y organizar nuestro codigo
pongo un caso, imaginen una funcion que se ejecuta en 4 ficheros php, para poder utilizar la misma funcion esta tendria que estar escrita en cada uno de los ficheros

¿inconvenientes?

  1. si queremos modificar la funcion, tenemos que cambiar cada una de los ficheros donde este escrita
  2. tenemos mas trabajo y necesitamos mas tiempo a la hora de modificar cada uno de los ficheros
  3. mas dificil de mantener
  4. mas codigo
  5. mas espacio ocupado

solucion:

creamos un fichero llamado por ejemplo general.php con las funciones que necesitamos y añadimos un include a cada uno de los ficheros
luego para modificar la funcion solo tenemos que editar el fichero general.php

ejemplo de include:

fichero1.php
[php]include ‘fichero2.php’;//$variable es igual a 10
echo $variable;//imprime 10[/php]

fichero2.php
[php]$variable = 10;[/php]

si ejecutamos el fichero1.php, mostrara por pantalla el valor de la variable $variable, 10

la diferencia entre require e include, es que si el fichero no existe:

  • include mostrara un warning y continuara con la ejecucion
  • require mostrara un fatal error y parara la ejecucion

ejemplo de include_once:

fichero1.php
[php]include_once(“fichero2.php”); //$variable es igual a 10
$variable = 20; //$variable es igual a 20
include_once(“fichero2.php”); //$variable es igual a 20
echo $variable; //imprime 20[/php]

fichero2.php
[php] $variable = 10[/php]

si ejecutamos fichero1.php, mostrara por pantalla 20

¿porque 20 y no 10?

tanto include_once como require_once solo se pueden ejecutar una vez
la segunda vez que se llama a include_once, esta es como si no existiera.

si en vez de utilizar include_once, utilizamos include o require el valor final de $variable seria 10

include se comporta igual que include_once, a la hora de importar el fichero, si este no existe mostrara warning y continuara la ejecucion
lo mismo passa con require y require_once, si el fichero no existe muestra un fatal error y para la ejecucion

algunas anotaciones:

  • vigila a la hora de hacer mas de un include con ficheros que contengan funciones
    si importas un fichero que ya ha sido incluido antes o que contenga alguna funcion declarada anteriormente, aparacera un Fatal error y la ejecucion terminara, ya que no se puede declarar la misma funcion 2 veces
  • si quieres importar ficheros con solo variables, no tendras problemas para llamarlo mas de una vez (solo con include y require)
  • utiliza require o require_once, para cargar archivos de configuracion, que contengan constantes
  • puedes hacer un fichero php que contenga una plantilla html de un mensaje de foro y hacer un include a este fichero dentro de un while o for, ojo con include_once no lo puedes hacer
  • si el fichero que quieres incluir esta escrito en php, este debe tener encima del codigo <?php y al final ?>, si es codigo html no hace falta
junio 26, 2007
Sigueme en twitter Suscribete por RSS Suscribete por email
Temas relacionados
Deja un comentario







Comentarios
  1. Wifii

    Me ha parecido una buena explicación pero estos dias tengo un problema con los includes, no tiene mucho a ver con esto pero lo explico aver si le ves una solucion.

    Mira, tengo una pagina principal donde la cabezera es un include (cabecera.php).

    Dentro de esa cabecera hay otro include, donde tengo la barra de navegacion, (barra.php).

    Como es de suponer solo me sale el primer include al ejecutar la pagina principal. Es decir no puedo o no se hacer doble include. Pensaba que todo esto se solucionaba poniendo la ruta del archivo desde la raiz, /cabezera/barra.php), pero nada de nada. Es evidente que si pongo la ruta de la web entera funciona, http://www.LOQUESEA.com/cabezera/barra.php, pero esto es muy feo.

    Alguna solucion para erreglar este tipo de problemas?.

    Gracias


  2. T_O_N_N_Y

    Para hacer el include tienes que poner la ruta del servidor, no la ruta del dominio, algo así como:
    include(‘/home/www/includes/barra.php’);

    Un saludo!


  3. shin!!

    algo tarde pero buena explicación, pero para los q vean esto
    lo que dice wifii no es tan extraño, me ha pasado y no me acuerdo como Dios lo resolvio,

    ahora.

    si “barra.php” esta en el mismo directorio que “cabecera.php” deberia incluirse de todas maneras

    puedes usar atajos weeb como “./” para llegar al archivo al menos en windows
    actualmente en php se puede anclar desde URLs pero siempre es bueno chegar el archivo de configuración por el buleanito “allow_url_fopen”

    nothing more

    UDLA – CHILE
    computin
    quijote shin


  4. Janckos

    Interesantes diferencias.


  5. xtywo

    Buena explicacion amigo era lo que esta buscando


  6. mitbaby

    Estupendo artículo, nos acaba de resolver un problema que teníamos y es que se enviaba hasta 4 veces un correo de aviso de publicación al usuario por estar llamada la función con include y no con include_once…

    Saludos.


  7. miguel angel

    En resumen: Los require dan un error y paran la ejecucion en caso de no existir el fichero, los include solo dan un warning.