---
Página principal

Introducción a SSI

Menú del taller
---

SSI son las siglas de Server Side Includes (algo así como "Inclusiones del lado del servidor"). A grandes rasgos, los SSI son una serie de comandos que podemos insertar en nuestros documentos web, pero que no se envían al navegador, sino que son procesados en el mismo servidor donde se ubican, siendo la respuesta del servidor la que se envía al navegador.

SSI tiene un gran abanico de aplicaciones, desde agregar un texto (o código HTML) a una página, hasta ejecutar comandos en el servidor. También dispone de algunas rudimentarias instrucciones de control.

Precisamente esta potencia de SSI (añadido a que requiere de cierto esfuerzo por parte del administrador del sistema) es lo que hace que en la mayoría de los servidores no estén disponibles las extensiones SSI o que, en algunos casos, solo esté disponible una parte de ellas.

Todos los comandos SSI se insertan en una página web del mismo modo. deben ir dentro de una marca de comentario, y comienzan con el signo # (almohadilla):

<!--#comando SSI -->

Por ejemplo: La orden fsize, como veremos más tarde, devuelve el tamaño del fichero que se le pase como parámetro (ya veremos esto después, no te preocupes ahora), de forma que podríamos usar esta directiva para poner en nuestra página algo como:

...
<P>el tama&ntilde;o del archivo "miarchivo.html" es:
<!--#fsize virtual="miarchivo.html" -->
</P>
...

Esto escribirá en la página, en el lugar donde lo hayas insertado, el tamaño del fichero "miarchivo.html".

Suponiendo que este fuera de 15 Kbytes, el código que llegaría al navegador sería el siguiente:

...
<P>el tama&ntilde;o del archivo "miarchivo.html" es:
15K
</P>
...

Con lo que el visitante leería una línea como la siguiente:

el tamaño del archivo "miarchivo.html" es: 15K

Supongo que con esto ya puedes imaginar, aproximadamente, cómo se usan estas directivas. Veamos las ahora una a una.

Algunos administradores configuran su servidor para que solo se puedan ejecutar SSI en ciertos directorios o en páginas con un nombre o extensión especial (Normalmente la extensión .shtml), debes consultar con tu administrador si tienes dudas.
---

El comando ECHO

El comando ECHO permite insertar en tus páginas el contenido de algunas variables de entorno de SSI. Su estructura general es la siguiente:

<--#ECHO VAR="variable"-->

Donde "variable" puede ser una de las siguientes:

"DATE_GMT", que insertará la fecha y hora actual del meridiano de Greenwich.

"DATE_LOCAL" sirve para insertar la fecha y hora locales del host donde se ejecuta.

"LAST_MODIFIED" introduce la fecha de la última modoficación del documento que la incluye.

"DOCUMENT_URI" incrusta la URL del documento que la contiene.

"DOCUMENT_NAME" inserta el nombre del fichero que la contiene.

ECHO permite también imprimir otras variables de entorno del sistema, pero estas pueden variar bastante de un host a otro.
---

SET

Pero si no te parecen suficientes variables de entrono, puedes crear las tuyas propias, o cambiar el valor de algunas de ellas, por medio de la directiva SET.

Su uso es bastante simple:

<!--#SET VARIABLE="Valor de la variable" -->

Donde VARIABLE es el nombre de la variable que quieres definir y "valor de la variable" es el valor que quieres que contenga.

Por ejemplo, la siguiente orden:

<!--#SET Mi_Variable="Mi contenido" -->

Creará una variable llamada "Mi_Variable" cuyo valor será "Mi contenido".

Evidentemente, luego puedes usar ECHO para mostrar el contenido de tus propias variables.

---

PRINTENV

Para ver todas las variables de entorno de tu sistema (incluso las que has creado tú mismo) y sus valores, puedes usar el comando PRINTENV, que se usa de este modo tan simple:

<!--#PRINTENV -->

Y que imprime una lista de todas las variables y sus respectivos valores.

---

CONFIG

CONFIG sirve para indicar el formato de presentación de algunas variables, como, por ejemplo, cómo se presentarán las fechas y horas que puedes obtener con ECHO. Su forma de uso en este caso es la siguiente:

<!--#CONFIG TIMEFMT="modo" -->

Donde "modo" será uno o más de los siguientes:

"%c": Fecha y hora completas. (por ejemplo: Tue Aug 3 15:35 1999)
"%A": Día de la semana. (por ejemplo: Tuesday)
"%a": Día de la semana en formato corto. (por ejemplo: Tue)
"%d": Día del mes. (por ejemplo: 3)
"%B": Nombre del mes. (por ejemplo: August)
"%b": Nombre del mes en formato corto. (por ejemplo: Aug)
"%m": Mes en número. (por ejemplo: 8)
"%x": Fecha en dígitos. (por ejemplo: 08/03/99)
"%Y": Solo el año (por ejemplo: 1999)
"%y": Solo los dos últimos dígitos del año. (por ejemplo: 99)
"%H": Solo la hora en formato 24 horas. (por ejemplo: 15)
"%I": Solo la hora en formato 12 horas. (por ejemplo: 3)
"%M": Minutos. (por ejemplo: 35)
"%S": Segundos. (por ejemplo: 23)
"%p": Inserta a.m. o p.m. (por ejemplo: p.m.)

En los ejemplos, para que te hagas una idea, he supuesto la fecha del Martes 3 de Agosto de 1999, a las tres y 35 de la tarde.

Se pueden combinar varias de estas opciones en una misma directiva CONFIG, como en el siguiente ejemplo:

<!--#CONFIG TIMEFMT="%A, %B %d, %Y %I:%M%p" -->
<!--#ECHO VAR="DATE_LOCAL" -->

Que nos mostrarí algo como esto:

Tuesday, August 3, 1999 3:35PM

CONFIG permite también configurar otras cosas. Una de ellas son los mensajes de error, de este modo:

<!--#CONFIG ERRMSG="mensaje de error" -->

Donde "mensaje de error" es precisamente eso: El mensaje de error.

Otra cosa es el formato con el que se presentarán los tamaños de fichero:

<!--#CONFIG SIZEFMT="modo" -->

Donde "modo" puede ser "BYTES" o "ABBREV" que harán que los tamaños aparezcan en Bytes o en formato corto, respectivamente.

---

EXEC

EXEC es, sin duda, uno de los comandos más poderosos (y potencialmente peligrosos) de SSI, ya que permite ejecutar un programa del servidor e incluir la respuesta en la página. Esta es la razón de que esta directiva suela estar inhabilitada en casi todos los sistemas.

El primer uso de EXEC (y el más extendido) es para ejecutar programas CGI, de este modo:

<!--#EXEC CGI="ruta al programa" -->

Donde "ruta al programa" es la ruta y el nombre del CGI a ejecutar. Este comando insertará la respuesta del ejecutable CGI (si la hay) en el lugar de la página donde se encuentre. Se usa mucho, por ejemplo, para crear contadores de visitas o imágenes que cambien en cada visita.

Por eljemplo, suponiendo que tenemos un típico CGI con un contador de visitas que se llamará "contador.pl", y que se encuentra en el directorio "/CGI-bin" de nuestro sistema, el código que usaríamos sería algo parecido al siguiente:

<P>Eres el visitante n&uacute;mero <B>
<!--#EXEC CGI="/CGI-bin/contador.pl" -->
</B> que visita esta p&aacute;gina.</P>

Que, suponiendo que fuera el visitante 1127, el código que se mostraría en el navegador sería este:

<P>Eres el visitante n&uacute;mero <B>
1127
</B> que visita esta p&aacute;gina.</P>

Que se vería de esta forma:

Eres el visitante número 1127 que visita esta página

El otro uso de EXEC es el de ejecutar programas o comandos del sistema donde se encuentre. Para ello se usa en la forma:

<!--#EXEC CMD="programa o comando" -->

Donde "programa a comando" es, como ya te imaginas, el comando que quieres ejecutar o el programa y su ruta, si es necesaria.

Los comandos o programas que puedes ejecutar dependen del sistema donde esté tu página. Por ejemplo, en los sistemas UNIX/Linux, el comando "ls" retorna un listado de los archivos y directorios del directorio donde se ejecuta. Pra ver el listado correspondiente al directorio donde se encuentra tu página solo tienes que incluir esta línea:

<!--#EXEC CMD="ls" -->

Que te dará ese listado.

---

INCLUDE

Probablemente, INCLUDE sea el comando SSI más usado. Permite intriducir el contenido de un fichero en el lugar donde insertas el comando. Su estructura es la siguiente:

<!--#INCLUDE MODO="ruta al fichero" -->

Donde MODO puede ser VIRTUAL o FILE, y "ruta al fichero" es el nombre y la ruta al fichero cuyo contenido quieres insertar.

En caso de que uses VIRTUAL, la ruta será la dirección absoluta del documento dentro del sistema, y si usas FILE, será una ruta relativa al documento que contiene la sentencia.

Por ejemplo, supongamos que tienes un site, con cientos de páginas, y que tienes algún patrocinador, que te pide que insertes su logo en cada una de tus páginas. Pero, cosas del capitalismo, sueles cambiar de patrocinador amenudo, con lo que te ves obligado a modificar cada una de tus páginas cada vez que lo haces.

Podrías crear un fichero en el directorio raiz (el que contiene a todos los demás) de tu site en el que pondrías el código relativo a tu patrocinador, por ejemplo:

<P><IMG SRC="http://host.com/imagenes/logo.gif" ALT="Logotipo de Patrocinadora LTDA.">
<BR>P&Página patrocinada por <B>Patrocinadora LTDA.</B></P>

Suponiendo que llamas a este archivo "Patro.txt" (por ejemplo), Podrías introducir en todas tus páginas, en la parte donde quieras que aparezca, el siguiente código:

<!--#INCLUDE VIRTUAL="/Patro.txt" -->

(Dado que hemos usado VIRTUAL, la ruta se corresponde con el directorio raiz. Si hubieramos usado FILE, el servidor buscaría "Patro.txt" en el directorio en el que se encuentre la página que contiene la directiva)

De este modo, cada vez que cambies de patrocinador, solo tendrás que modificar el archivo "Patro.txt", en lugar de todas las páginas.

INCLUDE se usa también mucho para incluir firmas en las páginas, o partes de código que quieres que aparezcan igual en muchas páginas, pero que quieres poder cambiar comodamente.

Mucho ojo con abusar de los SSI en general y de los INCLUDEs en particular: Dado que han de ejecutarse en el servidor, tardan algo más que las páginas normales en descargarse y pueden ralentizar el funcionamiento del servidor en general.
---

FSIZE

El comando que usamos como ejemplo al principio de este artículo es FSIZE. Sirve para indicar el tamaño de un fichero:

<!--#FSIZE MODO="ruta al fichero" -->

Donde, al igual que hemos visto en INCLUDE, MODO puede ser VIRTUAL o FILE, dependiendo de si "ruta al fichero" es una dirección absoluta o relativa al archivo que contiene la directiva.

---

FLASTMOD

Otro comando parecido es FLASTMOD, que imprime la fecha de la última modificación del archivo que se le indique:

<!--#FLASTMOD MODO="ruta al fichero" -->

Y, ya sabes, MODO puede ser VIRTUAL o FILE,igual que antes.

---

Comandos de control

Esto es un poco más complicado, aunque no tendrás ningún problema si ya conoces, aunque sea someramente, algún lenguaje de programació.

Todo lenguaje de programación tiene alguna instrucción que permita controlar el "flujo" del programa. Algo así como poder decirle al programa "Si se dan tales condiciones haz esto, y si no, haz lo otro."

Para ello tenemos los comandos de control:

<!--#IF EXPR="expresión 1" -->
<!--#Comando 1 -->
<!--#ELIF EXPR="expresión 2" -->
<!--#Comando 2 -->
<!--#ELIF EXPR="expresión 3" -->
<!--#Comando 3 -->
...
<!--#ELSE -->
<!--#Comando 4 -->
<!--#ENDIF -->

Humm. Vayamos despacio.

La primera línea (la del "IF") dice: "Si "Expresión 1 es cierta, ejcuta el comando (o los comandos) que hay aquí debajo (comando 1, en este caso)". Despues veremos qué demonios es eso de una espresión "cierta".

Las líneas que empiezan con "ELIF" dicen: "Si ninguna de las anteriores es cierta, pero esta sí (Expresión 2 y 3, respectivamente), ejecuta el Los comandos de aquí debajo (Comandos 2 y 3, respectivamente)".

Y la línea "ELSE" dice: "Si ninguna de las anteriores es cierta, ejecuta lo que dice aquí debajo.

La línea final ENDIF simplemente marca el final del bloque de sentencias.

Se pueden acumular tantos "ELIF" como quieras, pero cada uno de ellos solo se ejecutará si no se ha ejecutado ninguno de los anteriores.

Vale, pero ¿Que es una "expresión cierta"?

Si "Expresión" es una variable de entorno, se cumplirá siempre que exista y tenga un valor. En caso de que no exista o su valor sea "vacío", será falsa (Una variable "vacía" se declara con la orden <!--#SET Variable="" -->).

"Expresión" puede ser también una comparación de variables y/o cadenas de texto, en cuyo caso será cierta si se cumple la comparación.

Por supuesto no es necesario usar ELIF ni ELSE si no vas a enfrentarte a varias opciones. Solo IF y ENDIF son necesarias.

De este modo puede controlarse la ejecución de los comandos. Por ejemplo, en el siguiente bloque:

<!--#IF EXPR="MI_VARIABLE" -->
<!--#ECHO VAR="MI_VARIABLE" -->
<!--#ELSE -->
<!--#SET MI_VARIABLE="Valor asignado" -->
<!--#ECHO VAR="MI_VARIABLE" -->
<!--#ENDIF -->

En el caso de que exista una variable llamada "MI_VARIABLE" (y tenga contenido), se imprimirá este con la primera sentencia ECHO. Pero si no existe, la sentencia ELSE le asignará un valor ("Valor asignado") con la sentencia SET y, después, lo imprimirá con la sentencia ECHO que le sigue. De este modo te aseguras de que no se quede sin imprimir nada.

Y con esto hemos terminado nuestra pequeña introducción a SSI. Espero que te haya interesado el potencial de esta herramienta. Nos vemos.

---

| Página principal | Curso de HTML | Tutorial de CSS | Mapa del Site |

---

HTML 4.0 VálidoCSS Válido