Much of the information needed by CGI programs is made available via Unix environment variables. Programs can access this information as they would any environment variable (e.g., via the %ENV associative array in Perl). Table 12-1 lists the environment variables commonly available through CGI. However, since servers occasionally vary on the names of environment variables they assign, check with your own server documentation for more information.
Environment variable |
Content returned |
---|---|
The authentication method used to validate a user. See REMOTE_IDENT and REMOTE_USER. |
|
The length of the query data (in bytes or the number of characters) passed to the CGI program through standard input. |
|
CONTENT_TYPE |
The media type of the query data, such as text/html. See Chapter 17 for a listing of commonly used content types. |
DOCUMENT_ROOT |
|
GATEWAY_INTERFACE |
The revision of the Common Gateway Interface the server uses. |
HTTP_ACCEPT |
|
HTTP_COOKIE |
A list of cookies defined for that URL. (See Chapter 17 for more information.) |
HTTP_FROM |
The email address of the user making the query (many browsers do not support this variable). |
HTTP_REFERER |
The URL of the document the client points to before accessing the CGI program. |
PATH_INFO |
|
PATH_TRANSLATED |
The translated version of the path given by the variable PATH_INFO. |
QUERY_STRING |
The query information passed to the program. It is appended to the URL following a question mark (?). |
REMOTE_ADDR |
|
REMOTE_HOST |
|
REMOTE_IDENT |
|
REMOTE_USER |
|
REQUEST_METHOD |
The method with which the information request was issued (e.g., GET, POST, HEAD). See Chapter 17 for more information on request methods. |
SCRIPT_NAME |
The virtual path (e.g., /cgi-bin/program.pl ) of the script being executed. |
SERVER_NAME |
|
SERVER_PORT |
|
SERVER_PROTOCOL |
The name and revision of the information protocol the request came in with. |
SERVER_SOFTWARE |
The name and version of the server software that is answering the client request. |
Here's a simple Perl CGI script that uses environment variables to display various information about the server:
#!/usr/local/bin/perl print "Content-type: text/html", "\n\n"; print "<HTML>", "\n"; print "<HEAD><TITLE>About this Server</TITLE></HEAD>", "\n"; print "<BODY><H1>About this Server</H1>", "\n"; print "<HR><PRE>"; print "Server Name: ", $ENV{'SERVER_NAME'}, "<BR>", "\n"; print "Running on Port: ", $ENV{'SERVER_PORT'}, "<BR>", "\n"; print "Server Software: ", $ENV{'SERVER_SOFTWARE'}, "<BR>", "\n"; print "Server Protocol: ", $ENV{'SERVER_PROTOCOL'}, "<BR>", "\n"; print "CGI Revision: ", $ENV{'GATEWAY_INTERFACE'}, "<BR>", "\n"; print "<HR></PRE>", "\n"; print "</BODY></HTML>", "\n"; exit (0);
The preceding program outputs the contents of five environment variables into an HTML document. In Perl, you can access the environment variables using the %ENV associative array. Here's a typical output of the program:
<HTML> <HEAD><TITLE>About this Server</TITLE></HEAD> <BODY><H1>About this Server</H1> <HR><PRE> Server Name: oreilly.com Running on Port: 80 Server Software: NCSA/1.4.2 Server Protocol: HTTP/1.1 CGI Revision: CGI/1.1 <HR></PRE> </BODY></HTML>
Copyright © 2003 O'Reilly & Associates. All rights reserved.