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.
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.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...