You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Wilfredo Sanchez <ws...@apple.com> on 1998/11/11 01:02:35 UTC
CGI Tweak Take IV
New script below.
>From Roy:
| 1. All the comments should be at the bottom of the file, prefaced
| by a single __END__ on a line by its own (saves parser time)
I moved the big honkin' apache goop down.
I left the note as to what it does up top.
This is an example; I don't see huge performance concerns for a
script that you should only use for testing anyway, sure, OK.
| 2. Many of the print statements can be condensed into a single print.
| There is no sense teaching CGI authors bad habits.
OK.
| 3. The script doesn't check the HTTP method first.
Neither does the current printenv, nor test-cgi. What should this test
do, exactly? I added a check which exists if the request method !=
| 4. bogus bits
Gone.
| 5. The original
| while (($key, $val) = each %ENV) {
| is considerably more efficient perl
Cool.
>From Ralf:
| 6. The contents of variables should be split
Nifty... I pasted in your routine with minor tweaks. You have an
infinite loop, by the way, if ($sep == 0) which my $TERMCAP exposed.
-Fred
#!/usr/bin/perl -T
##
# Show CGI Process Environment
# Written by Wilfredo Sanchez | wsanchez@apple.com
##
# This perl program shows you how to access the process environment
# for CGI programs on your web server.
# It is also a useful debugging tool, as it shows you all of the
# available environment variables.
##
exit unless ($ENV{'REQUEST_METHOD'} eq "GET");
# CGI programs must print their own HTTP response headers
print "Content-type: text/html\n\n";
# Declare the SGML application as HTML
print "<!doctype html public \"-//W3C/DTD HTML 4.0/EN\">\n";
# Begin HTML
print "<html>\n";
# A minimal document must include a header region with a title
print "<head>\n".
"<title>CGI Process Environment</title>\n".
"</head>\n\n";
# Start document body
print "<body>\n\n";
# Put values in a table for readability
print "<table border>\n\n";
# Caption the table
print " <caption>CGI Process Environment</caption>\n\n";
# Include table headers
print " <tr>\n".
" <th align=\"right\">\n".
" Variable\n".
" </th>\n".
" <th>\n".
" Value\n".
" </th>\n".
" </tr>\n";
# Print each key/value pair as two column in a row
while (($var, $val) = each %ENV)
{
# Quote special HTML characters
$var =~ s/&/&/g; $var =~ s/</</g; $var =~ s/>/>/g;
$val =~ s/&/&/g; $var =~ s/</</g; $val =~ s/>/>/g;
print "\n".
" <tr>\n".
" <td align=\"right\">\n".
" ".splitstring($var,30)."\n". # Wrap variable names at 30 chars
" </td>\n".
" <td>\n".
" <code>".splitstring($val,80)."</code>\n". # Wrap variable values at 80 chars
" </td>\n".
" </tr>\n";
}
print "\n";
# End table
print "</table>\n\n";
# End document body
print "</body>\n";
# End HTML
print "</html>\n";
exit 0;
##
# Borrowed from Ralf S. Engelschall, rse@engelschall.com:
# The contents of variables should be split with a whitespace around every
# 80-100 chars when the length of the content is really larger then 80-100
# chars _and_ no whitespaces are contained.
##
sub splitstring {
my ($str, $col) = @_;
my $out = '';
while ($str ne '')
{
if (length($str) <= $col) {
$out .= $str;
last;
}
my $sep = rindex($str, " ", $col);
$sep = rindex($str, " ", $col) if ($sep == "\t");
if ($sep == -1) {
my $prefix = substr($str, 0, $col);
$str = substr($str, $col);
$out .= "$prefix—<br>";
}
elsif ($sep == 0) {
my $prefix = substr($str, 0, 1);
$str = substr($str, 1);
$out .= "$prefix";
}
else {
my $prefix = substr($str, 0, $sep);
$str = substr($str, $sep);
$out .= "$prefix<br>";
}
}
return $out;
}
__END__
## Copyright (c) 1998 The Apache Group. All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions
## are met:
##
## 1. Redistributions of source code must retain the above copyright
## notice, this list of conditions and the following disclaimer.
##
## 2. Redistributions in binary form must reproduce the above copyright
## notice, this list of conditions and the following disclaimer in
## the documentation and/or other materials provided with the
## distribution.
##
## 3. All advertising materials mentioning features or use of this
## software must display the following acknowledgment:
## "This product includes software developed by the Apache Group
## for use in the Apache HTTP server project (http://www.apache.org/)."
##
## 4. The names "Apache Server" and "Apache Group" must not be used to
## endorse or promote products derived from this software without
## prior written permission. For written permission, please contact
## apache@apache.org.
##
## 5. Products derived from this software may not be called "Apache"
## nor may "Apache" appear in their names without prior written
## permission of the Apache Group.
##
## 6. Redistributions of any form whatsoever must retain the following
## acknowledgment:
## "This product includes software developed by the Apache Group
## for use in the Apache HTTP server project (http://www.apache.org/)."
##
## THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
## EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR
## ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
## NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
## STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
## OF THE POSSIBILITY OF SUCH DAMAGE.
## ====================================================================
##
## This software consists of voluntary contributions made by many
## individuals on behalf of the Apache Group and was originally based
## on public domain software written at the National Center for
## Supercomputing Applications, University of Illinois, Urbana-Champaign.
## For more information on the Apache Group and the Apache HTTP server
## project, please see <http://www.apache.org/>.
##
---
Wilfredo Sanchez | wsanchez@apple.com | 408.974-5174
Apple Computer, Inc., 1 Infinite Loop 302.4K, Cupertino, CA 95014
(Mac OS X) Core Operating Systems Group | BSD