Include. Incluir archivos ASP

  • Por
Para incluir archivos en ASP se han de utilizar los include. Los vamos a revisar en este capítulo y también vamos a mostrar limitaciones de esta técnica y a mostrar alguna posible solución.
Incluir archivos en una página consiste en insertar un trozo de código que tenemos alojado en un archivo aparte dentro del código de la página ASP que estamos programando. De este modo, podemos guardar en un archivo códigos de las páginas que utilizamos habitualmente, como podría ser la cabecera de nuestras páginas o el marco con el que se presetan todas las páginas del sitio, e incluso scripts en ASP que se dediquen a realizar algunas acciones muy repetidas, como conexiones con bases de datos. Trabajar realizando includes es muy práctico, pues no escribimos dos veces el mismo código y además, si tenemos que cambiarlo en algún momento sólo tendríamos que cambiar el código de ese archivo aparte y todas las páginas se modificarán automáticamente.

Para incluir archivos en ASP se han de utilizar los típicos include que ya hemos visto en capítulos anteriores pero que vamos a revisar en este capítulo. También vamos a mostrar limitaciones de esta técnica y a mostrar alguna posible solución.

Incluir archivos

Se utiliza con el enunciado de include, que puede tener dos formas:

<!--#include virtual="/plantilla.asp"-->
<!--#include file="plantilla.asp"-->

Las diferencias entre realizar el include "virtual" en lugar de "file" consisten en que la primera tiene en cuenta la raiz de tu dominio y con la segunda se tiene en cuenta el lugar donde está el documento desde el que estamos incluyendo el archivo. En un principio puede ser más útil trabajar con el modo "virtual" pues si movemos de directorio las páginas de nuestro sitio los includes seguirían funcionando. Si vemos varios ejemplos podremos entenderlo mejor.

<!--#include virtual="/plantillas/cabecera.asp"-->
Incluimos un archivo llamado cabecera que está en el directorio plantillas, que está a su vez en la raiz del dominio. Con este método el include funcionará independientemente de donde esté el archivo que lo incluye.

<!--#include file="plantillas/cabecera.asp"-->
Esto solo funcionará si el archivo que realiza el include está en la raiz del dominio. Pero fallaría si estamos en el cualquier subdirectorio del dominio.

<!--#include file="../plantillas/cabecera.asp"-->
Así conseguiríamos que funcionase si el archivo desde el que incluimos la cabecera está en un subdirectorio inmediatamente después de la raiz del dominio.

Include y la seguridad

En principio podemos utilizar cualquier extensión en el archivo vamos a incluir. Extensiones corrientes son .txt, .inc, .html o .asp. Sin embargo, es recomendable por motivos de seguridad que los nombremos como .asp, sobretodo si hemos insertado código ASP dentro del archivo a incluir.

El motivo por el que es más seguro nombrar los includes con extensión .asp es que si un usuario intenta acceder al archivo que se incluye directamente tecleando su URL en la barra de direcciones del navegador, algo así como http://www.dominio.com/archivos_a_incluir/funciones_comunes.inc, recibiría como respuesta el código completo y sin ejecutar del include y, probablemente, no nos interese que vean ese código de nuestro sitio web. Es especialmente delicado este problema cuando dentro del código colocamos información crítica como puede ser la cadena de conexión a la base de datos.

Con la extensión .asp nos aseguramos que, en caso de que un usuario consiga acceder a los includes, estos se ejecutarán en el servidor y se eliminarán todos los códigos ASP que no deseamos distribuir.

Modo de funcionamiento y problemática

El modo de funcionar de este tipo de includes consiste en que primero se insertan los archivos en la página, creando un conjunto que sería formado por el archivo fuente y todos los includes insertados dentro de él. Una vez creado ese gran fichero se ejecutan los scripts ASP.

Podría haber un problema si queremos incluir un archivo cuyo nombre debemos extraer de una variable ASP. Imaginaros que tenemos que incluir un archivo que tenemos su nombre en una variable. Así:

<%
archivoInclude = "miarchivo.html"
%>
<!--#include virtual=archivoInclude-->

Como el código ASP no se ejecuta hasta después de haber incluido el archivo, a la hora de incluirlo no se ha resuelto el nombre que se desea incluir. Dicho de otro modo, ASP no sabe qué es lo que vale la variable archivoInclude cuando va a incluirlo, por lo que no realiza el include tal como desearíamos.

Para parametrizar bien una página web y que su actualización sea fácil más tarde o más temprano lo anterior será un inconveniente. Así que podemos arreglar el problema del siguiente modo, creando una función que realice el include del archivo. Veamos cómo sería esa función:

<%
function incluye(archivo)
   archivo= request.serverVariables("APPL_PHYSICAL_PATH") & archivo
   set confile = createObject("scripting.filesystemobject")
   set fich = confile.openTextFile(archivo)
   while not fich.atEndOfStream
      lineactual = fich.readLine
      response.write(lineactual)
   wend
end function
%>


Varias cosillas habría que comentar sobre esta función. Recibe el nombre del archivo que deseamos abrir. Para construir la ruta completa de este archivo tendremos que utilizar el objeto request para extraer la variable del servidor que contiene la ruta de disco duro donde se encuentra el domino. Una vez que hemos construido el nombre de archivo con su ruta creamos el archivo en las 2 siguientes líneas. Finalmente hacemos un bucle que va extrayendo del archivo el texto correspondiente e imprimiendolo en la página.

Solo destacamos un punto en contra de esta forma de incluir los archivos. Se trata de que no podremos incluir más que código HTML, nunca código ASP pues no se ejecutaría y quedaría impreso en la página junto con el código HTML. Es una limitación significativa pero en los casos en los que solo necesitemos incluir texto puede servir muy bien.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

veronica

15/9/2003
tras leer el articulo he intentado incluir un archivo que esta fuera del servidor bajo el que trabajo.

Si el archivo se encuentra dentro de la web no hay ningun tipo de problemas pero si esta fuera, no lo encuentra.
Si pudieseis, me gustaria que me explicarais si esta es la forma correcta de incluir una pag asp dentro de otra(que este en otro dominio), y si no es asi, ne pusierais en la pista de como hacerlo. (preferiria no usar frames para ello)

Juanjo

11/2/2004
Estimados amigos, he leido el artículo de los includer, pero no soy capaz de insertar un includer en la web con dreamwever,los pasos que realizo son:

Creo una pagina con la franja superior de menú de la web. Seguidamente creo otra pagina en asp donde supuestamente vamos a insertar dentro de una casilla un includer, le digo que el achivo a incluir sea el de la pagina con el menu y lo que me ocurre es que me desaparece toda la web menos el archivo incluido el cual da un error.

podeis ayudarme a seguir los pasos

Roger Codina

20/5/2004
Tras encontrarme con el mismo problema, de que ASP no permite el paso de variables sobre include, al contrario que PHP, estuve pensando un rato y encontré un método para resolverlo, que evita el uso de la función mencioanda arriba, y que además permite la ínclusión de archivos con contenido dinámico, el método es el siguiente:

  • Crear una variable de session en elglobal.asa llamada, por ejemplo, session("seccion")="home"
  • Suponiendo que nuestra página base es index.asp y que es donde queremos que se incluyan los archivos, los links a nuestros apartados tendrán la siguiente forma:
index.asp?seccion=musica

El archivo que se incluirá en index.asp será el siguiente:

<!--#include file=contenido.asp-->

Ahora llenamos el archivo contenido.asp con el siguiente codigo fuente:

INICIO DEL CODIGO
<body>
<% session("seccion") = request.querystring("seccion")
if session("seccion") = "musica" then %><!--#include file=musica.asp-->
<% else %>
<!--#include file=inicio.asp-->
<% end if %>
</body>
FIN DEL CODIGO

Explicación: La variable de session almacena al iniciar la session el valor "home", una vez hacemos click sobre un vinculo que llame a index.php? con alguna variable, este incluirá contenido.asp, que asignará a la variable de session el valor de la variable de la URL y cargará solo el contenido que este dentro de la condicion... en este caso, un include al archivo en cuestión que contiene la información.

PD: Claro está que para más vínculos podemos usar un select case en vez de un if... eso a gusto del consumidor. :D

Al principio parece un poco liado, pero espero que sea de gran utilidad para aquellos que se hayan encontrado en mi misma situación.

Julio

25/5/2004
Tengo problemas con las imágenes de los archivos asp que incluyo a través de (#include).

Tengo un index.asp en el directorio raiz de mi dominio, y en él incluyo una cabecera (cabecera.asp) que tiene 2 imágenes, las imágenes se encuentran en un directorio llamado (imagenes) que cuelga del raiz. Hasta aquí todo ok, porque si le pongo la ruta relativa (imagenes/img.gif) las carga correctamente.

Ahora bien, cuando incluyo la cabecera en la página Productos.asp, por ejemplo, que está situada en el directorio Productos colgando del raiz (Productos/Productos.asp) no se cargan las imágenes, porque el código de cabecera.asp se incluye en el de productos.asp y la ruta relativa de las imágenes de cabecera.asp, ya no funciona.

En fin, no se si me he explicado lo suficientemente bien, pero ¿podriaís ayudarme? Os puedo enviar por email, una imagen con la estructura de directoios y sus contenidos.

PD: He estado probando con Server.MapPath(), y la solución debe ir por ahí, pero no logro conseguir que funcione en todos los casos.

Gracias mil.

MIguel Yupanqui

12/8/2004
Yo también tengo el problema que quiero incluir un archivo que esta en otro servidor seri genial que publiquen como hacerlo

Gracias

Fernando Zapata

13/12/2004
Muy buena la aclaración de Roger Codina
Per es importante destacar que la mayoría de servidores web, tienen desactivada la opción xzxx, por lo cual es vez de usar <!--#include file=contenido.asp--> usaremos

<!--#include virtual="contenido.asp"-->

para ir a la raíz usamos
<!--#include file="/index.asp"-->

y para entrar en alguna carpeta usamos
<!--#include file="/carpeta/pagina.asp-->

espero que les sirva... escriban fzapata16@hotmail.com

Fernando Zapata

13/12/2004
Muy buena la aclaración de Roger Codina
Per es importante destacar que la mayoría de servidores web, tienen desactivada la opción xzxx, por lo cual es vez de usar <!--#include file=contenido.asp--> usaremos

<!--#include virtual="contenido.asp"-->

para ir a la raíz usamos
<!--#include virtual="/index.asp"-->

y para entrar en alguna carpeta usamos
<!--#include virtual="/carpeta/pagina.asp-->

espero que les sirva... escriban fzapata16@hotmail.com

Fernando Zapata

13/12/2004
==============================
ESTE ES EL COMENTARIO ORIGINAL
==============================
Muy buena la aclaración de Roger Codina Pero es importante destacar que la mayoría de servidores web, tienen desactivada la opción "DIRECTORIOS SECUNDARIOS", por lo cual en vez de usar --include file-- usaremos -include virtual--<BR>
Por Ejemplo, para ir a la raíz usamos <!--#include virtual="/index.asp"--> y para entrar en alguna carpeta usamos <!--#include virtual="/carpeta/pagina.asp--> espero que les sirva... escriban fzapata16@hotmail.com

rafa espada

27/4/2005
Es un tontería, pero como queda faltal... en el segundo párrafo de "Modo de funcionamiento y problemática ", HAVER es con B alta.

Estáis haciendo una labor estupenda... muchas gracias por todo...

CORREGIDO
Muchas gracias por darte cuenta, ya esta solucionado.

dernet

08/5/2005
heyy, saludos
como puedo hacer un INCLUDE FILE a un asp pásandole parametros, así:
<!--#INCLUDE FILE="test.asp?opt=1" -->

Cuando hago eso el ISS me devuelve este mensaje de error:
--------------------------------------
Include file not found

/login/scripts/ent.asp, line 8

The include file 'test.asp?opt=1' was not found.
--------------------------------------

he buscado por todos los lugares y no encuentro.
Agradeceria su ayuda

karime

19/5/2005
como se realiza el enlace de asp con una base de datos

PEDRO MARTIN

30/6/2005
'Include dinamico en asp

Os comento las nuevas mejoras, estoy elaborando un parset para que analizen nuestros includes con ello el objetivo sera logrado

este parset lo hare en asp.
Tened paciencia

elmasternet

06/7/2005
me podrias mostrar un ejemplo de select case en esto de :

<body>
<% session("seccion") = request.querystring("seccion")
if session("seccion") = "musica" then %><!--#include file=musica.asp-->
<% else %>
<!--#include file=inicio.asp-->
<% end if %>
</body>

Gracias

PB

21/12/2005
Cuando incluyes una página asp no necesitas pasarle parámetros porque de hecho la QueryString pertenece a la página en la que estás incluyendo...
Te pongo un ejemplo:
<%
if (Session ("seccion")=="musica"{
cantante="Pepe"
%>
<!--#include file="myMenu.asp"-->
<%
}
%>
Si myMenu.asp utiliza una variable llamada cantante ahora cantante="Pepe" igual que si se la hubieras pasado en el path solo que no tienes que capturarla.
Espero que te sirva pb@habaguanex.com

Cristian

14/1/2006
El ejemplo es muy bueno, aunque he estado intentandolo y me sale un error, yo tengo una pagina: default.aspx a la cual le deseo incluir otra pagina que se llama home.aspx y me sale un error al ejecutar, el error esta relacionado con la directiva Page, esta directiva es la que sale al inicio antes del <HTML> es aquella que dice: <% Page Language...%>. Lo que pasa es que como ambas son paginas dinamicas *.aspx, por ende ambas tienen esa misma directiva y el dice que ya hay una directiva en uso.
Si alguien sabe solucionar este problema le agradezco mucho gracias

Juanan

24/8/2006
Se puede hacer un include a una página '*.html' completa o solamente ésta página '*.html' tiene que tener el trozo de código que deseamos incluir?.

Si tenemos una página index.asp con un include a una página xxx.html, en el código que se mostrará aparecerá dos veces <html><body>. Una vez al principio de Index.asp y otra donde hemos puesto el include.
¿És ésto correcto?

rachel

24/11/2006
Estoy emigrando de asp a asp.net y necesito saber como se programa la inclusion de ficheros en aspnet. podrian ayudarme???
rachel

Jaime

02/2/2007
Yo me he encontrado con el mismo problema, tengo una web formada por una tabla y la cabecera, enu y todo eso esta metido con includes. Al final he conseguido que la parte central de la Web sea otra pagina cuya url se saca de una base de datos.

Al ver que no lo podía hacer de esta manera
<!--#include file=inicio.asp?IDPagina=<%Rs("ID")%>-->, por ejemplo, pues introduzco la pagina central con codigo ASP:
pagina = "Inicio?IDPagina=" & rs("ID")
Server.Execute(pagina)

Hasta el momento no he tenido problema ninguno, las querystring se toman bien tanto en las paginas metidas con includes como las metidas de esta manera. De esta forma todo se me ejecuta en una sola pagina (Index.asp), asi que si quiero cambiar el diseño en un rato tengo una web nueva.

Un saludo y espero que os sirva. Haceis un gran trabajo.

Juan Bautista

22/2/2007
Hola, me ha parecido muy interesante el artículo, es justo lo que estaba buscando, sólo puntualizar que para que <!--#include file funcione hay que comprobar que la carpeta de la aplicación ASP en el IIS tiene habilitadas las rutas de acceso primarias: sobre la carpeta del IIS, botón derecho --> propiedades --> pestaña directorio --> botón Configuración --> pestaña Opciones --> marcar el checkbox “Habilitar rutas de acceso primarias”.
Jeje, lo digo para q no os paséis horas mirando y mirando pq no funciona vuestro código.

Lazaro Martinez

05/3/2007
Jaime, me podrias explicar mas a detalle tu solucion, ya que me parecio muy interesante, pero necesito mas detalles de tu aplicación, espero que pronto puedas ampliar tu tema, Recibe un Cordial Saludo.

Nicolas Martín

28/3/2007
Pareciera que la manera de incluir archivos de ASP es mucho mas deficiente que la de PHP.

Por ejemplo, lo de incluir archivos segun variables; o bien el "include once".

Solo queria hacerlo notar... tengo que pasar una aplicacion de PHP a ASP, y ver las diferencias que hay me da cierta bronca, la cual desquito en este comentario.

Ahora si, a trabajar!

NICOLAS

11/6/2010
CONSULTA
HOLA, COMO HAGO PARA PODER AGREGAR DENTRO DE ESTE CODIGO QUE LA LETRA TENGA COLOR Y SEA MAS GRANDE.GRACIAS.

<%
'Check if user is logged in
if Session("name") = "" then
'If not, go to login page
Response.Redirect("login.asp")
else
'If, build page
Response.Write("<title>JUETAENO</title>")
Response.write("<center>BIENVENIDO " & Session("name") & "<br><a href=logout.asp>Logout</a></center>>")
end if

Pedro Huarez

20/10/2010
Include Dinámico version beta
He subido los archivos y ya me comentareis q tal os va
http://www.megaupload.com/?d=93KCL33M

Jose Mari

08/11/2010
Include con distinto lenguaje de programación.
Buenos días,
Tengo un sitio web desarrollado con asp. Todos los archivos ASP llevan un include (*.inc) que estña desarrollado en Visual Basic. Ahora, tengo que integrar una web aspx con c#. Mi pregunta es: ¿puedo incluir la linéa de include en en aspx que tengo que integrar? O es incompatible porel los INC van en VB?

Me urge alguna respuesta....

Trash

01/3/2011
CREO QUE SOLUCIONA LOS INCLUDE
Lo Probé haciendo inclusive RECURSIVIDAD
En la Primera línea:

<% Response.Write "<!--#include file='AdoVbs.inc'-->" %>
o bien

<% Response.Write "<!--#include file= '" & "CUALQUIER ARCHIVO" & "'-->" %>
o bien

<% Response.Write "<!--#include file= '" & CUALQUIER VARIABLE & "'-->" %>

Todo depende del caso.

Trash

01/3/2011
SIGUE
Funciona inclusive declarando constantes o código dentro del archivo a incluir.
Preparo unos ejemplos y los paso

migarcia

30/1/2012
A mi no me va
Es un tema al que le voy detras hace tiempo y he encontrado alguna solucion, pero no completa, osea que me interesa mucho. La propuesta de utilizar Response.write no funciona porque se envia un literal hacia el cliente y eso es lo ultimo que necesitamos