Perl CGI - Szybki start¶
Perl do chwili obecnej często jest nazywany „klejem łączącym sieć web”, dzięki możliwością przetwarzania tekstu (głównie chodzi o bardzo zaawansowane wyrażenia regularne) bardzo dobrze nadaje się do pisania aplikacji konwertujących dane tekstowe.
Rozpoczęcie przygody z Perlem oraz serwisami internetowymi jest dosyć proste (zakładam, że czytelnik ma jakiekolwiek obycie z systemem Linux - w tym wypadku Debian i coś tam słyszał o Apache).
By móc wykonywać skrypty Perla po stronie serwera należy:
Skonfigurować serwer http np. Apache 2 (zakładamy, że moduł CGI jest ładowany automatycznie do apache - isnieje plik:
/etc/apache2/mods-enabled/cgi.load
)Napisać skrypt CGI oraz go umieścić na serwerze
Konfiguracja wirtualnego hosta¶
Pliki znajdują się w katalogu /etc/apache2/hosts-enabled/
.
<VirtualHost *:80>
ServerAdmin admin@host.pl
DocumentRoot /home/services/service
ServerName service.0x1fff.com
ServerSignature Off
LogLevel warn
TransferLog /var/log/apache2/cgi_service_access.log
ErrorLog /var/log/apache2/cgi_service_error.log
AddHandler cgi-script .cgi .pl
#ScriptAlias /cgi-bin/ /home/services/service/cgi-bin/
<Directory "/home/services/service/cgi-bin">
SetHandler cgi-script
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
W powyższym przykładzie VirtualHosta
należy zmodyfikować odpowiednie dane.
Prosty skrypt CGI¶
Skrypt ten wykorzystuje kodowanie UTF8, oraz pozwala na proste debugowanie poprzez obserwację logów
(żadne błędy nie są widoczne w przeglądarce użytkownika). Dodatkowo skrypt ten wykorzystuje moduły
(apt-get install libcgi-perl libcgi-pm-perl
):
Fatal - pozwala na zmniejszenie ilości sprawdzanych warunków np. przy otwieraniu plików
CGI - usprawnia pracę programisty w środowisku WEB np. przetwarzanie argumentów
CGI::Debug - ułatwia debugowanie aplikacji sieciowych
Funkcje ceil i floor są również imporotwane (zobacz: zaokrąglanie wartośći w Perlu)
#!/usr/bin/perl
use utf8;
use warnings;
use strict;
use Fatal qw{ open close mkdir };
use POSIX qw(ceil floor); # short url
use CGI; # CGI Stuff
# Ten moduł musi być zainstalowany z CPAN :(
# ale do debugowania chyba jest jednym z lepszym
#use CGI::Debug(
# report => [
# 'everything', 'errors', 'empty_body', 'time',
# 'params', 'cookies', 'environment',
# ],
# on => [ 'fatals', 'warnings' ],
# to => {
# browser => 0,
# log => 1,
# },
# #header => 'control',
# set => { error_document => 'html/error.html' },
#);
# jesli nie ma mozliwosci jego instalacji pozostaje CGI::Carp;
# Global variables:
my $page = new CGI;
$page->charset('utf-8');
$CGI::POST_MAX = 1024 * 5000;
# Jeśli nie ma moduły CGI sami musimy zadbać o Content-Type.
# Ponizsze dwie linie dokonują przekierowania na mój blog.
#print "Content-type: text/plain\n";
#print "Location: http://blog.0x1fff.com/\n\n";
# wypisz całą sekcję head
print $page->header;
print '<table>';
foreach my $var (sort(keys(%ENV))) {
my $val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "<tr><td>".${var}."</td><td>".${val}."</td></tr>\n";
}
print '</table>';
my $test = $query->param("test");
print $page->escapeHTML($test);
Skrypt ten należy umieścić w pliku: /home/services/service/cgi-bin/test.pl
.
Strona wygenerowana przez skrypt może być znaleziona pod adresem:
http://service.0x1fff.com/cgi-bin/test.pl
(oczywiście po odpowiednich modyfikacjach).
Często podczas tworzenia aplikacji przydaje się zmodyfikować plik /etc/hosts
żeby od razu móc działać „pod właściwym adresem”.
Ale to każdy powinien już sobie sam zrobić.
Frameworki ułatwiające pisanie skryptów CGI w Perlu¶
Jak można inaczej generować dynamiczne strony w Perlu?¶
Fast CGI - w stosunku do CGI pozwala na znaczne zwiększenie wydajności (howto)
mod_perl - w stosunku do CGI - znacznie prościej zacząć tworzenie kodu i jest również wydajniejszy - opis instalacji i prosty przykład użycia mod_perl
Co ciekawe CGI to nie tylko Perl - ale także C, C++, Bash i wiele innych języków.