
Making Your CGI-scripts Server Independent
If your scripts contain server-dependent code, that is, code
which is specific to a particular server, you would need to rewrite code if you ever
decided to move your site to a different web server. One such occasion would be if you
decided to upgrade to or downgrade from a High Volume account, since these accounts reside
on high volume servers. Another occasion would be if you ever decided to reuse your
scripts for other accounts, or give your scripts to other people. You should always try to
write code that will run correctly regardless of what web server it runs on. This makes
the script extremely portable and very easy to maintain.
The most common kind of server-dependent code is code which
accesses files or programs using an absolute path (such as
"/www26/web/someid/somefile"). Instead of using the absolute path to your home
directory ("/www26/web/someid"), you should instead use the DOCUMENT_ROOT
environment variable ($ENV{DOCUMENT_ROOT} in Perl) to determine the path of your files or
programs within a script.
For example, if a guestbook script reads:
# Path to your guestbook file
$guestbook = "/www23/web/examp9/data/guest.html";
You should change it to:
# Path to your guestbook file
$guestbook = "$ENV{DOCUMENT_ROOT}/data/guest.html";
If you are writing scripts for others besides yourself to
use, you may wish to take advantage of the many other environment variables which allow
you to write server-independent code.
Other Commonly used Server-Independent Codes include:
- AUTH_TYPE
- * only works if you are viewing a password protected page. If
viewing a password protected web page, this will be the "authentication type".
- DOCUMENT_NAME
- This file's name.
- DOCUMENT_URI
- This document's URL (path and filename)
- GATEWAY_INTERFACE
- The name and version number of the gateway software running on
this server. (CGI/1.1)
- HTTP_USER_AGENT
- The "user agent" or web browser that the visitor is
using. (Mozilla/4.0)
- LAST_MODIFIED
- The last modification date of the current document. (Tue, 03
Mar 1998)
- PATH
- The paths available to the "nobody" user of the web
server.
- REMOTE_USER
- * only works if you are viewing a password protected page. If
viewing a password protected web page, this will be the "username".
- REQUEST_METHOD
- The method by which the visitor's web browser is retrieving
the web pages. Choices are GET and POST.
- REMOTE_HOST
- The translated name of your (the visitor's) machine.
- REMOTE_ADDR
- The IP number of your (the visitor's) machine.
- SCRIPT_NAME
- The name of the script running. (/www26/web/someid/somefile)
- SERVER_SOFTWARE
- The name of the web server software currently running.
- SERVER_NAME
- This machine's name, or rather, what this machine thinks its
name is.
- SERVER_PORT
- Standard http/web port.
- SERVER_PROTOCOL
- The name and version number of the protocol running on this
server. (HTTP/1.0)
(Note: if you are writing scripts or recipes for use with
procmail, you must use the HOME environment variable in place of DOCUMENT_ROOT. CGI
environment variables are not available while running under procmail.)
Back to Main Menu |