Celestial Enterprises
How To use SSI Your Business Home Web Page(s)
[Celestial Enterprises is not just another Internet Service Provider]

[Colour Bar]

What does SSI stand for?

SSI is the acroymn for Server-Side Includes.

What is SSI?

Normally, a Web server simply justs sends your HTML document to the requesting client without trying to interpret any of the HTML codes.

While on the other hand, a Web server with SSI capabilities gives the HTML (Web page) designers a bit more flexibility to their creative thought. This is achieved by allowing the Web server to examine your HTML Web page document, by looking for special commands embedded as SGML comments (SSI tags). When the Web server locates an embedded SGML comment, it will interpret and parse the SSI tag.

What files will get interpreted by the Web server?

Any file that has the extentsion .shtml. These files still must be located in your .public_html directory(s).

Why don't they work?

They do, really! It's just that you need to place your modified documents back under your .public_html directory(s) and then you must view them via the Celestial Enterprises Web server.

e.g. Say you have just created the following sample HTML document name SSI.shtml

<HTML>
<HEAD>
<TITLE>Server-Side Includes Sample Document</TITLE>
</HEAD>

<BODY BGCOLOR="BBBBBB" BACKGROUND="/icons/bar00000.gif">

<CENTER>
<FONT SIZE=+7><B>Server-Side Includes Sample Document</B><BR></FONT>
</CENTER>

<CENTER>
<!--#config timefmt="%A %B %d, %Y" -->
<!--#echo var="DATE_LOCAL" --> -
<!--#config timefmt="%I:%M:%S %p" -->
<!--#echo var="DATE_LOCAL" --> AEDT
</CENTER>

<P>
<!--#if expr="($REMOTE_IDENT = unknown) || (!$REMOTE_IDENT)" -->
Greeting's Internet commuter from <I><!--#echo var="REMOTE_HOST" --> (<!--#echo var="REMOTE_ADDR" -->)</I>
<!--#else -->
Greeting's <I><!--#echo var="REMOTE_IDENT" --> from <!--#echo var="REMOTE_HOST" --> (<!--#echo var="REMOTE_ADDR" -->)</I>
<!--#endif -->
</P>

</BODY>
</HTML>

You would upload your newly created master piece onto the server under your .public_html directory.
In order to view your .shtml document you would need to use your Web browser and surf to the following URL;

http://www.celestial.com.au/~username/SSI.shtml





Basic Elements

The document is parsed as an HTML document, with special commands embedded as SGML comments. A command has the syntax:
<!--#element attribute=value attribute=value ... -->
The value will often be enclosed in double quotes; many commands only allow a single attribute-value pair.

The allowed elements are:

config
This command controls various aspects of the parsing. The valid attributes are:
errmsg
The value is a message that is sent back to the client if an error occurs whilst parsing the document.
e.g. <!--#config errmsg="Oops, did I make a mistake. -->
sizefmt
The value sets the format to be used which displaying the size of a file. Valid values are bytes for a count in bytes, or abbrev for a count in Kb or Mb as appropriate.
e.g. <!--#config sizefmt="Kb" -->
timefmt
The value is a string to be used by the strftime(3) library routine when printing dates.
e.g.
<!--#config timefmt="%A %B %d, %Y" -->
<!--#echo var="DATE_LOCAL" -->

Ordinary characters placed in the format string are copied without conversion. Conversion specifiers are introduced by a `%' character, and are replaced as follows:

%a
The abbreviated weekday name according to the current locale.
%A
The full weekday name according to the current locale.
%b
The abbreviated month name according to the current locale.
%B
The full month name according to the current locale.
%c
The preferred date and time representation for the current locale.
%d
The day of the month as a decimal number (range 0 to 31).
%H
The hour as a decimal number using a 24-hour clock (range 00 to 23).
%I
The hour as a decimal number using a 12-hour clock (range 01 to 12).
%j
The day of the year as a decimal number (range 001 to 366).
%m
The month as a decimal number (range 10 to 12).
%M
The minute as a decimal number.
%p
Either `am' or `pm' according to the given time value, or the corresponding strings for the current locale.
%S
The second as a decimal number.
%U
The week number of the current year as a decimal number, starting with the first Sunday as the first day of the first week.
%W
The week number of the current year as a decimal number, starting with the first Monday as the first day of the first week.
%w
The day of the week as a decimal, Sunday being 0.
%x
The preferred date representation for the current locale without the time.
%X
The preferred time representation for the current locale without the date.
%y
The year as a decimal number without a century (range 00 to 99).
%Y
The year as a decimal number including the century.
%Z
The time zone or name or abbreviation.
%%
A literal `%' character.
echo
This command prints one of the include variables, defined below. If the variable is unset, it is printed as (none). Any dates printed are subject to the currently configured timefmt. Attributes:
var
The value is the name of the variable to print.
e.g. <!--#echo var="DATE_LOCAL" -->
fsize
This command prints the size of the specified file, subject to the sizefmt format specification. Attributes:
file
The value is a path relative to the directory containing the current document being parsed.
virtual
The value is a (%-encoded) URL-path relative to the current document being parsed. If it does not begin with a slash (/) then it is taken to be relative to the current document.
flastmod
This command prints the last modification date of the specified file, subject to the timefmt format specification. The attributes are the same as for the fsize command.
include
This command inserts the text of another document or file into the parsed file. Any included file is subject to the usual access control.

An attribute defines the location of the document; the inclusion is done for each attribute given to the include command. The valid attributes are:

file
The value is a path relative to the directory containing the current document being parsed. It cannot contain ../, nor can it be an absolute path. The virtual attribute should always be used in preference to this one.
virtual
The value is a (%-encoded) URL relative to the current document being parsed. The URL cannot contain a scheme or hostname, only a path and an optional query string. If it does not begin with a slash (/) then it is taken to be relative to the current document.
A URL is constructed from the attribute, and the output the server would return if the URL were accessed by the client is included in the parsed output. Thus included files can be nested.
set
This sets the value of a variable. Attributes:
var
The name of the variable to set.
value
The value to give a variable.
For example: <!--#set var="category" value="help"-->

Include variables

In addition to the variables in the standard CGI environment, these are available for the echo command, for if and elif, and to any program invoked by the document.
HTTP_USER_AGENT
The remote client's Web browser.
REMOTE_HOST
The remote client's host name.
REMOTE_ADDR
The remote client's host name's address.
REMOTE_IDENT
The remote client's user name (only if the have a Unix account).
DATE_GMT
The current date in Greenwich Mean Time.
DATE_LOCAL
The current date in the local time zone.
DOCUMENT_NAME
The filename (excluding directories) of the document requested by the user.
DOCUMENT_URI
The (%-decoded) URL path of the document requested by the user. Note that in the case of nested include files, this is not then URL for the current document.
LAST_MODIFIED
The last modification date of the document requested by the user.

Flow Control Elements

The basic flow control elements are:
    <!--#if expr="test_condition" -->
    <!--#elif expr="test_condition" -->
    <!--#else -->
    <!--#endif -->

The if element works like an if statement in a programming language. The test condition is evaluated and if the result is true, then the text until the next elif, else. or endif element is included in the output stream.

The elif or else statements are be used the put text into the output stream if the original test_condition was false. These elements are optional.

The endif element ends the if element and is required.

test_condition is one of the following:

string
true if string is not empty
string1 = string2
string1 != string2
Compare string1 with string 2. If string2 has the form /string/ than it is compared as a regular expression. Regular expressions have the same syntax as those found in the Unix egrep command.
( test_condition )
true if test_condition is true
! test_condition
true if test_condition is false
test_condition1 && test_condition2
true if both test_condition1 and test_condition2 are true
test_condition1 || test_condition2
true if either test_condition1 or test_condition2 is true

"=" and "!=" bind more tightly than "&&" and "||". "!" binds most tightly. Thus, the following are equivalent:

    <!--#if expr="$a = test1 && $b = test2" -->
    <!--#if expr="($a = test1) && ($b = test2)" -->

Anything that's not recognized as a variable or an operator is treated as a string. Strings can also be quoted: 'string'. Unquoted strings can't contain whitespace (blanks and tabs) because it is used to separate tokens such as variables. If multiple strings are found in a row, they are concatenated using blanks. So,

     string1    string2  results in string1 string2
    'string1    string2' results in string1    string2

Variable substitution is done within quoted strings. You can put a dollar sign into the string using backslash quoting:

    <!--#if expr="$a = \$test" -->
[Colour Bar]
For problems relating to our web pages please feel free to contact
Celestial Enterprises Webmaster