Perl/CGI
Zakładając, że masz już serwer Apache (lub kompatybilny, który odczytuje linię "shebang!" - o tym później) oraz zainstalowanego Perla, całkiem łatwo uruchomić program Perla w Internecie.
Po pierwsze, potrzebujemy w jakiś sposób dostać się do programu. W tym rozdziale będziemy zajmowali się danymi formularza i wysyłaniem, więc zakładamy, że Twój kod formularza w HTML'u ma właściwość ACTION="nazwaprogramu.cgi".
Wstępne ustawienia
edytujSkrypty CGI, tak jak wszystkie inne programy Perla, zaczynają się "shebangiem", czyli np:
#!/usr/bin/perl
(więcej informacji w Perl/Pierwszy_program)
Następnie ładujemy moduł CGI:
use CGI;
Moduł CGI ułatwia nam pracę, ponieważ zawiera gotowe funkcje do pracy w Internecie. Następnie tworzymy uchwyt dla CGI - coś, co pozwoli nam dostać się do funkcji. Robimy to w ten sposób:
my $zapytanie = CGI->new();
Sprawia to, że zmienna $zapytanie zawiera standardowe funkcje CGI.
Nasz program jest teraz gotowy do pracy w CGI, powinno to wyglądać na przykład tak:
#!/usr/bin/perl use CGI; my $zapytanie = CGI->new();
Mamy więc program który do tej pory nic nie robi i tak naprawdę spowoduje błąd serwera ponieważ nic nie wyświetlono, a nawet gdyby tak się stało, serwer nie wie jakiego typu dane wyświetlić.
Odbieranie informacji
edytujZanim powiemy serwerowi jakiego typu dane ma wyświetlić, musimy odebrać dane. W tym celu używamy zmiennej $zapytanie, którą wcześniej zadeklarowaliśmy. Załóżmy, że w formularzu mamy pole nazwane "Nazwisko" I chcemy się dowiedzieć, co tam wpisano. Robimy to w ten sposób:
my $Nazwisko = $zapytanie->param('Nazwisko');
Uwaga: rozróżniane są wielkości liter - "Nazwisko" i "nazwisko" to dwa różne pola. Należy to wziąć pod uwagę projektując formularz. |
W tej linii użyliśmy funkcji param() (jej nazwa to skrót od "parameter", czyli "parametr"). Potrafi ona wykonać za nas kilka praktycznych trików, żeby zdobyć interesujące nas dane. Przetwarza ona całe kodowanie HTTP, więc to, co otrzymujemy to gotowa wartość zmiennej. Oczywiście, nie musisz nazywać zmiennej $Nazwisko - łatwiej jest po prostu zapamiętać jedną nazwę dla tej samej zmiennej. Wybór oczywiście należy do Ciebie.
Wyjście
edytujTeraz musimy utworzyć nagłówek HTTP. CGI ułatwia nam to zadanie: zamiast podawać deklaracje mime-type (oczywiście możesz to zrobić), wystarczy wykonać:
print $zapytanie->header();
...co wyświetli nam nagłówek HTTP.
W nawiasach możemy określić parametry takie jak ciastka wysyłane do przeglądarki użytkownika. Później okaże się, że jest to bardzo przydatna możliwość. Póki co jednak będziemy tylko wysyłać domyślny nagłówek. |
Na końcu możemy wyświetlić jakieś dane (chociaż obyłoby się bez tego, program wyświetliłby po prostu pustą stronę). Wyświetlmy więc po prostu użytkownikowi jego nazwisko. Wygląda to tak:
print "Podałeś nazwisko: ", $zapytanie->escapeHTML($Nazwisko);
Końcowy kod
edytujMamy więc gotowy skrypt CGI w zaledwie sześciu linijkach kodu. Końcowy kod wygląda tak:
#!/usr/bin/perl use CGI; my $zapytanie = new CGI; my $Nazwisko = $zapytanie->param('Nazwisko'); print $zapytanie->header(); print "Podałeś nazwisko: ", $zapytanie->escapeHTML($Nazwisko);
Widać tutaj wyraźnie, że $zapytanie jest ważnym elementem skryptu i mówi on Perlowi, że funkcje do których się odnosisz pochodzą z modułu CGI. Tak jak z nazwą zmiennej $Nazwisko, zmienną $zapytanie możesz nazwać inaczej - często stosuje się nazwy "$query" (ang. "zapytanie") lub po prostu "$q". W celu uniknięcia włamań typu HTML Injection, każdą zmienną pobraną od użytkownika należy zabezpieczyć poprzez escapeHTML(). | I na końcu: jeżeli na Twoim serwerze Perl nie znajduje się w /usr/bin/perl, należy zmienić pierwszą linię kodu, aby Perl mógł zostać uruchomiony poprawnie. |