 
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.