# Directives

## #config

This directive is used to override the default XSSI settings while processing the XSSI file.

### Form 1: `<!-- #config errmsg="error message" -->`

`#config errmsg` is used to change the message sent to the client when an XSSI error occurs. By default, XSSI errors are reported in a detailed manner to allow easy debugging.

### Form 2: `<!-- #config sizefmt="size_format" -->`

`#config sizefmt` controls the way the server displays XSSI file sizes. `size_format` can have two values:

- `ABBREV`: displays file sizes in kilobytes (KB) or megabytes (MB).

- `BYTES`: displays file sizes in bytes. It is the default.

### Form 3: `<!-- #config timefmt="time_format" -->`

`#config timefmt` specifies the format in which XSSI dates are inserted. `time_format` must contain formatting tokens that are substituted by the corresponding parts of the date. The available tokens are listed below with the description of their substitution:

- `%a`: Abbreviated English name for day of the week.

- `%A`: Complete English name for day of the week.

- `%b`: Abbreviated English month name.

- `%B`: Complete English month name.

- `%c`: Date and time representation. It is the equivalent of `%m/%d/%y %H:%M:%S`.

- `%d`: Day of the month (01-31).

- `%e`: Day of the month (1-31). If it is a single digit, it is padded with a space.

- `%H`: Hour in 24-hour format (00-23).

- `%I`: Hour in 12-hour format (01-12).

- `%j`: Day of the year as a decimal number (001-366).

- `%m`: Month as a decimal number (01-12).

- `%M`: Minute as a decimal number (00-59).

- `%p`: A.M. or P.M. indicator for 12-hour format.

- `%S`: Second as a decimal number (00-59).

- `%U`: Week of the year as a number (00-51). Sunday is the first day of the week.

- `%w`: Day of the week as a number (0-6). Sunday is the first day of the week.

- `%W`: Week of the year as a number (00-51). Monday is the first day of the week.

- `%x`: Date representation. It is the equivalent of `%m/%d/%y`.

- `%X`: Time representation. It is the equivalent of `%H:%M:%S`.

- `%y`: Year without the century (00-99).

- `%Y`: Year with the century (0000-9999).

- `%z` and `%Z`: Time zone name; empty if unknown.

- `%%`: Percent sign.

## #echo

### Form: `<!-- #echo var="variable_name" -->`

`#echo` inserts the value of an XSSI environment variable. XSSI environment variables include those set using the `#set` directive, those available for CGI scripts (see "CGI environment variables" in the "CGI, FastCGI, and ISAPI" chapter), and five special variables:

- `DOCUMENT_NAME`: The name of the processed XSSI file.

- `DOCUMENT_URI`: The virtual path to the current processed file.

- `DATE_LOCAL`: The current local date.

- `DATE_GMT`: The current date expressed in UTC (coordinated universal time, formerly known as Greenwich Mean Time, or GMT).

- `LAST_MODIFIED`: The last modification date of the processed file expressed in UTC (coordinated universal time).

If `variable_name` is not a valid XSSI environment variable, the directive is ignored.

## #exec

### Form 1: `<!-- #exec cgi="cgi_file" -->`

`#exec cgi` executes a script and inserts its output. If `cgi_file` begins with a `/`, it is considered as a virtual path and the directive will behave as if it is `<!-- #include virtual="cgi_file" -->`. If `cgi_file` does not begin with a `/`, it is considered as a relative file name and the server will try to locate it inside the directory containing the currently processed XSSI file. If it is found there, `#exec cgi` will behave as if it is `<!-- #include file="cgi_file" -->`. Otherwise, `cgi_file` will be searched inside the virtual paths listed in #exec cgi' Search Paths in the XSSI Parameters of the current host.

### Form 2: `<!-- #exec cmd="shell_command" -->`

`#exec cmd` executes a shell command and inserts its output. The shell executable path is found in the system environment variable `COMSPEC`. If this variable is empty or does not exist, `command.com` is used as the default shell.

> Note: `#exec cmd` execution must be used with extreme care. If users can edit or modify HTML pages in your web sites (which is the case if you have a forum or a guestbook for instance), you must disable it. In fact, they can include XSSI tags with dangerous `#exec cmd` directives and remotely invoke them.

## #flastmod

### Form 1: `<!-- #flastmod file="file_name" -->`

`#flastmod file` inserts the last modification date of the file `file_name`. `file_name` is a relative path from the directory containing the processed XSSI file. It file can only be in the same directory or in one of its subdirectories.

### Form 2: `<!-- #flastmod virtual="virt_path" -->`

`#flastmod virtual` inserts the last modification date of the file which virtual path is `virt_path`.

## #fsize

### Form 1: `<!-- #fsize file="file_name" -->`

`#fsize file` inserts the size of the file `file_name`. `file_name` is a relative path from the directory containing the processed XSSI file. It can only be in the same directory or in one of its subdirectories.

### Form 2: `<!-- #fsize virtual="virt_path" -->`

`#fsize virtual` inserts the size of the content resulting from requesting `virt_path` from the server. If `virt_path` is a static file, its size will be inserted. If it is a CGI script or a XSSI file, it is evaluated by the server and the size of the resulting output is inserted.

## #include

### Form 1: `<!-- #include file="file_name" -->`

`#include file` instructs the web server to insert a file which must contain valid HTML contents. `file_name` is a relative path from the directory containing the processed XSSI file. The included file can only be in the same directory or in one of its subdirectories.

### Form 2: `<!-- #include virtual="virt_path" -->`

`#include virtual` inserts the content resulting from requesting `virt_path` from the server. If `virt_path` is a static file, its contents will be included "as is". If it is a CGI script or a XSSI file, it is evaluated by the server and the results are inserted. `virt_path` must contain or generate valid HTML content.

## #printenv

### Form: `<!-- #printenv -->`

`#printenv` outputs the current CGI environment variables. For more information, refer to the "CGI environment variables" section.

## #set

### Form: `<!-- #set var="variable_name" value="variable_value" -->`

`#set` sets the value of the variable `variable_name` to `variable_value`. If no variable called `variable_name` exists, it is created before being set. `#set` can be used to change the value of CGI variables or any already declared variable.