[Inhalt] -> [CGI] |
[info] |
||
Zum sicheren Anlegen des CGI-Objektes sollte der folgende Code verwendet werden:
#!/usr/bin/perl -wT use strict; use CGI; BEGIN { ## error handling sub _error { my $error = shift; # print error message # take this as an example print "Content-Type: text/html\n\n"; print $error; # exit exit 0; } $SIG{__DIE__} = \&_error; ## cgi security and others $CGI::DISABLE_UPLOADS = 1; ## disable uploads $CGI::POST_MAX = 1_024 * 1_024; ## max post size $CGI::HEADERS_ONCE = 1; ## ignore multiple headers ## taint mode $ENV{PATH} = "/bin:/usr/bin"; ## restrict path delete @ENV{ qw(IFS CDPATH ENV BASH_ENV) }; } my $q = CGI->new; $q->cgi_error and die "Problem detected: Possibly file upload too large"; print $q->header; ....
Die Methode param()
des Moduls CGI liefert die an das Skript per GET oder POST übergebenen Parameter zurück:
use CGI; my $q = CGI->new; # direct my $type = $q->param("type"); my @checkbox = $q->param("boxes"); # if multiple values # get names of all parameters my @list = $q->param; # import parameters to own namespace $q->import_names('Q'); if ($Q::type) { # do something } # import parameters to hash my %vars = $q->Vars(); # setting a parameter by hand $q->param('name', $value); $q->param('name', @values); # if multiple values
Um cookies zu lesen und zu setzen kann die Methode cookie()
verwendet werden:
use CGI; my $q = CGI->new; # read cookie my %cookies = $q->cookie(-name => "test_foo"); my $name = $cookies{name}; my $foo = $cookies{foo}; # write cookie my $cookie = $q->cookie(-name => "test_foo", -value => { name => "zeitform", foo => "foo", bar => "bar", }, -expires => '+10m'); print $q->header(-cookie=>$cookie, -expires => "now");
Will man eine Datei zum Download anbieten kann der folgende header
-Aufruf
verwendet werden:
print $q->header( -type => 'application/octet-stream', -content_disposition => "attachment;filename=\"filename.ext\"", ); print $file_content;
Um Dateien über ein Formular auf den Webserver zu laden (Upload)
muß in der Formular-Deklaration der enctype
auf
"multipart/form-data"
gesetzt werden.
<form method="post" action="/cgi-bin/script.pl" enctype="multipart/form-data"> <!-- other optional fields --> <input type="file" name="foo" size="40"> <input type="submit" value="Upload"> </form>
Im Perl-CGI-Skript kann der Dateiname aus der Parameterliste ausgelesen werden. Er ist zugleich ein Dateihandle auf die hochgeladene Datei:
my $filename = $q->param('foo'); # print that file while (<$filename>) { print; } # Copy this file somewhere safe open (OUTFILE,">/path/to/somewhere/foo") or die('...'); while ( $bytesread = read($filename, $buffer, 1024) ) { print OUTFILE $buffer; } close OUTFILE; # avoid trouble with strict and use upload to get the file handle my $fh = $q->upload('foo'); while (<$fh>) { print; } # check Content-Type my $filename = $q->param('foo'); my $type = $q->uploadInfo($filename)->{'Content-Type'}; unless ($type eq 'text/html') { die "HTML FILES ONLY!"; }
Zusammengestellt von Alex Pleiner
© 2001-2003 zeitform Internet Dienste Bei Problemen wenden Sie sich bitte an den Webmaster
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1.