El Comercio Digital

Webmaster Libre

Desarrollo Web con Software Libre

Incluir archivos con PHP

Sin duda si hay una función de PHP que utilicemos con más interés los menos entendidos del tema es include(), con ella podemos incluir archivos externos en nuestras páginas e, incluso, crear un sistema simple de plantillas donde se incluyan el cabecero, pie y menú en todas las páginas, ahorrándonos tiempo y espacio en disco.

include() y require()

Existen dos funciones mediante las cuales podemos incluir archivos:

include() hace precisamente eso, incluir el archivo que le indiquemos en el lugar que le indiquemos

  1. <? php
  2. include("./menu.php")
  3. ?>

require() va un paso más allá, si no encuentra el archivo que debe incluir genera un Error Fatal y detiene la carga del script.

  1. <? php
  2. require("./funciones.php")
  3. ?>


Dada su naturaleza me gusta utilizar include para incluir otros archivos php (una barra de navegación, un pie de página) y require para cuando es necesario llamar a alguna función definida en un archivo externo.

include_once() y require_once()

include_once() y require_once() funcionan igual que include() y require() salvo que cargan el archivo una única vez al margen de cuantas llamadas hagamos al mismo.

  1. <? php
  2. require_once("./funciones.php")
  3. ?>

Si sois tan despistados como yo terminaréis viéndole las ventajas a include_once y require_once.

Consejos de seguridad

  1. No es necesario dar permisos especiales a los archivos a incluir, es más, no debes hacerlo
  2. No incluyas, leas, ejecutes o borres ningún archivo en base a un campo de entrada de formulario. Por mucho que asegures el formulario es realmente sencillo que recibas algún ataque (pueden duplicar tu formulario, por ejemplo)

Restringe el acceso externo a tus archivos incluidos

En Limitless Studio se ha publicado un sencillo truco, que no estoy segura de que conozca mucha gente, que nos ayuda a evitar que nuestros archivos sean abiertos al margen del archivo en que se incluyen.

Para que nos entendamos, lo mejor será poner un ejemplo. Imagina que tienes un archivo que se llama funciones.php en el que guardamos las funciones que utilizaremos en nuestro sitio. Algo así

  1. <? php
  2. //Funciones comunes que se utilizarán en más de un script
  3. funcion_a()
  4. funcion_b()
  5. funcion_c()
  6. ?>

Este archivo sólo nos sirve para reutilizar funciones a lo largo del sitio y generalmente no querremos ponerlo a la vista de cualquiera, no obstante nada impide a ningún usuario accederlo.
La solución es muy simple: Incluimos una simple línea en nuestro archivo funciones.php y otra en el lugar donde vayamos a cargarlo, así:

  1. <? php
  2. //Comprobamos que la constante parentFile existe y cargamos el documento
  3. defined( 'parentFile' ) or die( 'No Puedes Acceder a Ese Archivo' );
  4. //Funciones comunes que se utilizarán en más de un script
  5. funcion_a()
  6. funcion_b()
  7. funcion_c()
  8. ?>

Ahora simplemente tendremos que definir la variable parentFile antes de la inclusión del archivo

  1. <? php
  2. define( 'parentFile' , 1 );
  3. include("funciones.php")
  4. ?>

De esta forma sólo se cargará el archivo de funciones en los lugares donde esté autorizado, o lo que es lo mismo donde este definida la variable parentFile. Simple ¿verdad?

PHP

Si te ha gustado este post no olvides suscribirte al feed para estar al tanto de las novedades

3 Respuestas a “Incluir archivos con PHP”

Agrega tu comentario

  1. edd dice:

    Yo siempre intentaba evitar esto protegiendo los directorios, pero no andaba bien. Lo que hago es colocar en los directorios que no quiero que vean una pagina index.html que redirecciona a una pagina de inicio. Quiza no es la mejor opcion, pero funciona. De todos modos probare esta que dices a ver como va.

    Saludos.

  2. senda dice:

    Proteger el directorio con un archivo .htaccess o como tu haces con una redirección puede servir, supongo, para los usuarios que no buscan atacar tu sitio. Supongo que para alguien con malas intenciones no sea freno, así que cuantas mas trabas mejor…

  3. edd dice:

    Sí, tienes razon, a poner mas trabas entonces.

    Saludos.

Feed RSS de los comentarios de este post.

Deja tu comentario

Por favor, procura que tus comentarios aporten algo al tema del artículo. Los comentarios ofensivos y el spam serán eliminados.

Si tu comentario no aparece al momento puede que esté en la cola de moderación o en Akismet, lo reviso cada día pero si ves que pasa un tiempo prudencial y no aparece dímelo

Este post tiene 2 años. Puedes dejar un comentario de todas formas y volver más tarde para comprobar si hay novedades sobre el tema.

Información:

Webmaster Libre es un blog de Alma Fernández