INTERNET:
Workshop: j zyk Perl
Mój mały sklepik
<IMGSRC=" border="0" alt="Kliknij by zobaczy
wi kszy..." 0001 knt_img 000325_0000.jpg? 0087
Wst p
Zmienne
Wymiana danych
Entomologia
Komunikat na monitorze
Instalujemy Apache'a...
Z Perl Builderem tworzenie...
Wskazówki dla programistów
Marcin Nowak
Perl to j zyk, którego pierwotnym zastosowaniem było przetwarzanie plików tekstowych. Obecnie jest on
najcz ciej wykorzystywany do tworzenia interakcyjnych stron WWW - ksi ek go ci czy sklepów
internetowych. Ten popularny j zyk skryptowy ma bardzo du e mo liwo ci, a jednocze nie łatwo jest si go
nauczy .
Pisanie w Perlu nie wymaga ani kompilatora, ani du ego do wiadczenia programistycznego. Na pocz tek wystarczy
prosty edytor tekstu, cho odpowiednie narz dzia mog ułatwi pisanie programów (patrz: ramka na stronie 151).
Niniejszy kurs stanowi wprowadzenie do Perla. W pierwszej cz ci stworzymy prosty sklep internetowy,
przygotujemy formularz zamówienia, sprawdzimy, czy został on poprawnie wypełniony, i wy lemy odpowied do
u ytkownika. Pliki wykorzystywane w tym przykładzie znajduj si na płycie CD-ROM doł czonej do bie cego
numeru CHIP-a. Wszystkie zbiory HTML powinni my skopiowa do folderu zawieraj cego pliki udost pniane
przez serwer WWW. W przypadku Apache'a (patrz: ramka na stronie 152) jest to katalog htdocs.
Plik zamow.html zawiera formularz zamówienia, gdzie klient naszego sklepu wypełnia pola ksiazki, nazwisko i e-
mail. To, co dzieje si z warto ciami podanymi w formularzu po jego wysłaniu, okre la znacznik <form>:
<form method= "post" action="/cgi-bin/demo.pl">
Po wysłaniu formularza
dane s przekazywane do skryptu demo.pl, który powinien znajdowa si w podkatalogu
cgi-bin w folderze naszego serwera. Plik demo.pl mo emy umie ci tam na dwa sposoby: kopiuj c skrypt
bezpo rednio do katalogu cgi-bin z płyty CD-ROM doł czonej do CHIP-a lub tworz c go samodzielnie w kilka
minut za pomoc Perl Buildera (patrz: ramka na stronie 151).
Kiedy skrypt znajduje si ju tam, gdzie by powinien, przed pierwszym uruchomieniem musimy przypisa mu
takie atrybuty, aby serwer WWW miał uprawnienia nie tylko do odczytu, ale równie do jego uruchamiania. W
przypadku bł dnie ustawionych praw podczas próby uruchomienia pojawi si komunikat w rodzaju: "You don't
have permission to execute /cgi-bin/
demo.pl..."
;. Po nadaniu odpowiednich uprawnie skrypt zacznie działa
poprawnie. Ka de zamówienie zło one w naszym sklepie powinno zosta potwierdzone informacj o przyj ciu
zamówienia lub komunikatem o bł dzie.
Wszystkie skrypty Perla rozpoczynaj si wierszem wskazuj cym lokalizacj interpretera. Z tego powodu zanim
umie cimy własne skrypty na serwerze WWW naszego dostawcy usług internetowych, musimy dowiedzie si , jaka
jest cie ka dost pu do katalogu, w którym znajduje si Perl.
W systemie Linux pocz tkowa linia zwykle ma nast puj c posta :
#!/usr/bin/perl. W Windows pierwsza linia
mo e wygl da na przykład tak:
#!c:\perl\bin\perl.exe
----
Info
Grupy dyskusyjne
Uwagi i komentarze do artykułu:
news://news.vogel.pl/chip.artykuly
Pytania techniczne:
news://pl.comp.lang.perl
news://comp.lang.perl
Internet
Perl Builder:
http://www.solutionsoft.com/perl.htm
Wszystko o Perlu:
ftp://sunsite.icm.edu.pl/pub/CPAN/
FAQ:
http://www.kt.agh.edu.pl/other/perl/faq/
Kursy Perla
http://www.kt.agh.edu.pl/other/perl/
http://pipeta.chemia.pk.edu.pl/Perl/
http://hostidc.idc.com.pl/~siwy/perl.htm
http://www.snj.digimer.pl/artykuly.html
CGI-FAQ:
http://web.pertus.com.pl/tech/perl-cgi-faq.htm
W dziale Internet | Workshop: j zyk Perl znajduj si Active Perl 5.6 oraz pliki omawianej bazy danych
Zmienne
Programy napisane w Perlu odstraszaj swoim wygl dem pocz tkuj cych adeptów programowania. S pełne
tajemniczych i niezrozumiałych symboli. Aby wej w wiat Perla, musimy si z nimi zapozna .
Znak dolara
$ słu y do definiowania zmiennych, które w danym momencie mog mie tylko jedn warto (w
odró nieniu od tablic - patrz: dalej). Zmienna taka mo e by liczb w dowolnym formacie lub ła cuchem
tekstowym i nosi nazw zmiennej skalarnej (w odró nieniu od tablic oraz tablic asocjacyjnych - patrz: dalej).
Obowi zuje tutaj jedna zasada: tekst musi by uj ty w cudzysłów, liczby - nie. Wa ne jest, aby ka de przypisanie
zako czyło si rednikiem (;).
$liczba=1.234567;$tekst="Witaj wiecie";
Raz zdefiniowan zmienn mo emy pó niej wykorzysta w dowolnym miejscu programu.
Print "To jest moje pozdrowienie: $tekst \n";
Powy sza komenda wy wietla na ekranie ( ci le mówi c na tzw. standardowym urz dzeniu wyj cia) tekst To jest
moje pozdrowienie: Witaj wiecie i przenosi kursor do nowego wiersza (\n). Taki sam efekt uzyskamy za pomoc
polecenia:
Print "To jest moje pozdrowienie:".$tekst. "\n";
Natomiast komenda
Print 'To jest moje pozdrowienie: $tekst \n';
sprawi, e na monitorze pojawia si napis To jest moje pozdrowienie: $tekst \n. U ycie apostrofów powoduje, e
znajduj cy si w ich wn trzu ci g znaków jest interpretowany wprost. Gdy u ywamy cudzysłowów, konstrukcje
oznaczaj ce zmienne (np. $tekst czy $lista[0]) oraz znaki specjalne (poprzedzone odwrotnym uko nikiem - np. \n)
s zamieniane na odpowiadaj ce im warto ci
W Perlu znak popularnej "małpy"
@ nie ma nic wspólnego z poczt elektroniczn , a słu y do definiowania tablic.
Tablica mo e zawiera liczby, ła cuchy tekstowe lub mieszank jednych i drugich. Poni ej definiujemy tablic o
nazwie lista, która przechowuje trzy ła cuchy znakowe.
@lista=("To jest", "moje poranne pozdrowienie", "moje wieczorne
pozdrowienie");
Pozycja zmiennej w obr bie listy okre lana jest przez liczb podawan w nawiasie kwadratowym. Numeracja
rozpoczyna si zawsze od zera. Polecenie
Print "$lista[0] $lista[2]";
wy wietla na ekranie monitora napis To jest moje wieczorne powitanie
Symbol procentu
% słu y do tworzenia tablic asocjacyjnych b d cych tabel par warto ci. Ka da taka para składa
si z klucza i warto ci. W tablicach do poszczególnych warto ci odwoływali my si , podaj c w nawiasach
kwadratowych liczb - tutaj nale y poda klucz w nawiasach klamrowych.
%para_warto ci=("nazwisko", "Cezar","imi ","Juliusz",
"narodowo
","Rzymianin", "wiek",2100);
Perl pozwala te zdefiniowa list par warto ci w bardziej przejrzystej formie:
%osoba=("nazwisko"=>"Caesar" ,"imi "=>"Julius","narodowo
"=>
"Rzymianin","wiek"=>2100);
Nast puj ce polecenia:
print "Nazwisko:% osoba{ 'nazwisko'}\n";print "Imi :% osoba{'imi '}\n";print
"Wiek:%para_warto ci{'wiek' }\n";
wy wietl tekst:
Nazwisko: CaesarImi : JuliusWiek: 2100
Gwiazdka
* okre la globalny typ danych i oznacza, e zmienna mo e mie dowolny format: skalarny, tablicy lub
tablicy asocjacyjnej.
Po zapoznaniu si z typami zmiennych mo emy przyst pi do napisania prostego skryptu w Perlu. Kod skryptu
piszemy, korzystaj c z edytora tekstu, i zachowujemy go w pliku, na przykład pod nazw test.pl. Nast pnie
przechodzimy do folderu, w którym zapisali my skrypt, i uruchamiamy go, wydaj c z linii komend (w Windows lini
polece trybu MS--DOS) komend
perl test.pl.
Mo emy tak post pi z przykładowym skryptem demo.pl. Poniewa jest on przeznaczony do uruchamiania za
po rednictwem serwera WWW i podczas r cznego uruchomienia nie s przekazane adne dane z formularza, w
oknie DOS-a pojawi si jedynie kod HTML z komunikatem o bł dzie.
Spróbujmy teraz przyjrze si dokładniej skryptowi demo.pl. Po pierwszym wierszu wyst puje kilka linii
komentarza wygenerowanych przez Perl Buildera i rozpoczynaj cych si symbolem #. Nie maj one adnego
wpływu na działanie programu.
Pierwszy wiersz, który nas interesuje, rozpoczyna si symbolem, z jakim jeszcze si nie zetkn li my: znak &
oznacza, e teraz nast pi odwołanie do podprogramu (procedury) o nazwie GetFormInput. Podprogram ten znajduje
si na ko cu skryptu i rozpoczyna si wierszem sub GetFormInput. Wszystko, co znajduje si poni ej, w nawiasach
klamrowych, mo e u nowicjusza wywoła ból głowy. Nie musimy jednak rozumie wszystkich detali skryptu.
Wiele procedur, jak na przykład te do obsługi formularzy, zostało ju przez kogo napisanych. Nie ma sensu pisanie
ich od nowa - wystarczy umie z nich korzysta (oczywi cie je li pozwalaj na to ich autorzy).
Wymiana danych
Mimo i najłatwiejsze jest korzystanie z gotowych procedur obsługi formularzy, warto zapozna si ze sposobem
komunikacji pomi dzy serwerem WWW a przegl dark . Na tym przykładzie poznamy tak e kolejne wła ciwo ci
Perla.
W odczytywaniu przez skrypt CGI informacji przysyłanych przez przegl dark wa n rol odgrywa zmienna
rodowiskowa %ENV, która - jak łatwo si domy li , widz c symbol % - jest tablic asocjacyjn . Znajduj si w
niej informacje m.in. o systemie operacyjnym komputera wysyłaj cego zapytanie i jego adresie IP. W ten sam
sposób do serwera dostarczane s informacje wpisane do formularza.
W przypadku adnej ksi ki zostanie wy wietlony odpowiedni komunikat.
Dost pne s dwie metody pozwalaj ce wysła dane do serwera. Pierwsza (POST) przesyła informacje z formularza
w sposób niewidoczny dla u ytkownika. Druga (GET) dodaje je do adresu wywoływanej strony:
www.xyz.pl/cgi-
bin/script.pl?wartosc1=przykład&wartosc2=demo
Informacja o tym, czy dane zostały wysłane za pomoc metody GET czy POST, przechowywana jest równie w
zmiennej rodowiskowej %ENV. W przypadku u ycia POST (tak jak to ma miejsce w naszym przykładzie) serwer
wysyła dane na tzw. wej cie standardowe programu. Gdy uruchamiamy program z linii polece , standardowym
wej ciem jest klawiatura.
local ($buf)if ($ENV{'REQUEST_METHOD'} eq 'POST'){ read (STDIN,$buf,$ENV{
'CONTENT_LENGTH'});}else{ $buf=$ENV{'QUERY_STRING'};}
Działanie tego kodu mo na wytłumaczy nast puj co: "Utwórz lokaln zmienn $buf. Je eli (if) metod
komunikacyjn jest (eq) POST, wówczas wykonaj polecenie podane w nawiasie klamrowym {}, a wi c przepisz
dane ze standardowego wej cia do zmiennej $buf, której długo dostosuj do długo ci odebranego ci gu danych.
Je eli metoda jest inna ni POST (else), wówczas wykonaj polecenie z drugiego nawiasu klamrowego {}: zmiennej
$buf przypisz warto {'Query_String'} zmiennej rodowiskowej $ENV, poniewa tam wła nie metoda GET
zapisuje dane".
Po wykonaniu procedury zmienna $buf przyjmuje nast puj c warto :
produkty=Perl+Workshop+-+Wstep& produkt=Podrecznik+hakera&
nazwisko=Marcin+Bieniek& mail=marcin%40domena.pl
Odrobina wysiłku wystarcza, aby odszyfrowa , co zamówił nasz klient, jak si nazywa i jaki ma adres e-mail.
W takiej postaci dane nie nadaj si jednak do dalszej analizy. Dlatego najpierw musimy je krok po kroku
uporz dkowa :
if ($buf eq ""){ return 0;}else{ @fval=split(/&/,$buf);}
Skrypt najpierw sprawdza, czy u ytkownik wysłał jakiekolwiek dane (czy zmienna eq nie jest pusta). Je li brakuje
danych, polecenie return zwraca do głównego programu warto 0. W przeciwnym razie ła cuch tekstowy
przechowywany w zmiennej $buf dzielony jest na fragmenty. Podział nast puje we wszystkich miejscach, w których
wyst puj znaki &. Poszczególne elementy zapisywane s nast pnie w tablicy @fval. W naszym przykładzie s to
cztery elementy:
$fval[0]: produkty=Perl+Workshop+ -+Wstep$fval[1]: produkty=Podrecznik+
hakera$fval[2]: nazwisko=Marcin+Bieniek$fval[3]: mail=marcin%40domain.pl
Uzyskane w ten sposób warto ci najkorzystniej jest zapisa w tablicy asocjacyjnej, do czego wykorzystamy
poni szy skrypt:
foreach $i (0...$#fval){ ($nazwa,$val)= split(/=/,$fval[$i],2); $val=~tr/+/
/; $val=~s/%(...)pack("c", hex($1))/ge; $nazwa=~tr/+/ /;
$nazwa=~s/%(...)pack("c", hex($1))/ge;}
Procedura wykonywana jest w p tli (for-each), w której zmienna $i przyjmuje warto ci od 0 a do warto ci
najwi kszego indeksu tablicy @fval ($#fval). W naszym przypadku $#fval wynosi 3. W kolejnych krokach p tli
przetwarzane s warto ci od $fval[0] do $fval[3]. Najpierw ła cuchy tekstowe s ponownie dzielone (split), tym
razem w miejscach, w których wyst puj znaki =. Tekst na lewo od miejsca podziału zapisywany jest w zmiennej
$nazwa, tekst z prawej strony w $val.
Entomologia
Cztery ostatnie polecenia z powy szego przykładu odpowiedzialne s za konwersj znaków + na spacje oraz
wyra e %kod wyst puj cych w zmiennych na odpowiadaj ce im znaki (np. %34 na plus). W obu przypadkach
wykorzystywana jest konstrukcja o składni: $zmienna=~ /znajd /zast p/. Takie operacje na tek cie nosz nazw
pattern matching i wyst puj w wielu ró nych wariantach.
if (!defined($field{nazwa})){
$field{$nazwa}=$val;}else{$field{$nazwa}.=",$val";}
Ostatni fragment podprogramu rozwi zuje problem, który pojawia si , kiedy
kilka pól w formularzu ma takie same nazwy. W naszym przykładzie dotyczy
to pola ksiazki, które mo e przyjmowa maksymalnie cztery ró ne warto ci.
Ka dorazowo przed utworzeniem nowej pary warto ci w tablicy asocjacyjnej
nale y sprawdzi , czy nie wyst puje ju para warto ci z takim samym
kluczem.
Potwierdzenie zamówienia zawiera powitanie oraz list pozycji,
które wybrał klient.
Jedynie w sytuacji gdy ten warunek nie jest spełniony (negacj uzyskujemy za pomoc wykrzyknika), tworzona jest
nowa para warto ci. W przeciwnym razie wykonywana jest procedura zapisana w nawiasie klamrowym za else: do
warto ci zapisanej w polu o takiej nazwie $nazwa dodawany jest przecinek, a za nim zawarto zmiennej $val. Taki
efekt uzyskujemy dzi ki operatorowi .=, doł czaj cemu now warto do starej.
W wyniku działania procedury do programu głównego przekazywane s nast puj ce dane:
%field=( produkty=>"Perl postawy, Programuj i ty", nazwisko=>"Marcin Nowak",
mail=>"nowak@chip.pl");
Informacje w takiej formie mog by ju poddane dalszej analizie.
Przygl daj c si naszym przykładowym programom, zwró my uwag na kilka konstrukcji cz sto
wykorzystywanych w Perlu. Za pomoc wyra enia if uzale niamy wykonanie bloku programu zamkni tego
nawiasami klamrowymi od spełnienia jednego lub kilku warunków. Buduj c wyra enia warunkowe, musimy
pami ta , e efekty działania operatorów logicznych mog by ró ne, w zale no ci od tego, czy zmienna zawiera
ła cuch tekstowy czy warto liczbow . Procedura:
If($wartosc==3){ Podprogram}
przed wykonaniem podprogramu sprawdza, czy warto liczbowa zmiennej równa jest 3. Z kolei wyra enie
If($wartosc eq "Witaj wiecie"){ Podprogram}
bada warto ła cucha tekstowego. Operatory != oraz ne oznaczaj "nie równa si " i przeznaczone s kolejno dla
liczb oraz ła cuchów znakowych.
Teraz dane wyj ciowe z podprogramu zostan poddane dalszej obróbce w programie głównym. Najpierw
przekształcimy je do bardziej u ytecznej postaci, a nast pnie sprawdzimy, czy informacje od u ytkownika nie
zawieraj bł dów. W tym celu utworzymy dwie puste zmienne ($message i $found_err). Je li w trakcie
wykonywania instrukcji warunkowej oka e si , e brakuje jakich danych wej ciowych ($nazwisko lub $produkty s
puste, czyli zawieraj warto ""), tym zmiennym zostan przypisane warto ci. Mo emy te zbudowa wyra enie
warunkowe sprawdzaj ce zawarto zmiennej tekstowej. W tym celu posłu ymy si pełn uko ników konstrukcj ,
której składnia jest podobna do znanego ju nam wyra enia /szukaj/. Za pomoc polecenia
$mail!~/.+\@.+\..+/)
sprawdzamy, czy w adresie e-mail wyst puje znak @ (\@) oraz kropka (\.) przed ostatnim członem domeny.
Kombinacja .+ zast puje zawsze dowolny ci g znaków. Odwrotne uko niki przed symbolami @ i kropk oznaczaj ,
e znaki te b d wyszukiwane w zmiennej tekstowej.
W razie wyst pienia bł du zmienna $found_err przyjmuje warto 1, co oznacza logiczn prawd , i po wyra eniu
warunkowym if($found_err) wykonywany jest podprogram PrintError. Je eli aden bł d nie zostanie znaleziony,
$found_err nie ma przypisanej adnej warto ci, czemu odpowiada logiczny fałsz. W takim przypadku program
główny wykonywany b dzie bez zakłóce .
Komunikat na monitorze
Niezale nie od tego, czy w zawarto ci formularza znaleziono bł dy, do klienta naszego sklepu wysyłany jest
komunikat. Aby przegl darka WWW mogła go wy wietli , musi on by zapisany w j zyku HTML. Dokumenty
zawieraj ce tre odpowiedzi i informacji o bł dzie znajduj si w plikach odpowiedz.html i blad.html. Perl Builder
pobiera znajduj cy si tam kod i po zmodyfikowaniu wstawia do swojego skryptu. Najwa niejsza zmiana dotyczy
pierwszego wiersza:
print "Content-type: text/html\n\n\";
Poniewa przegl darka musi wiedzie , jakie dane wysyła jej serwer, informacja o tym przekazywana jest w tak
zwanym nagłówku. My przesyłamy dokument HTML oznaczany text/html.
Nie mo emy zapomnie o dwóch parach znaków "\n" na ko cu wiersza. Wypisanie ka dego "\n" powoduje
przej cie do nowej linii, wi c mi dzy wierszem "Content-type..." a dalszymi danymi b dzie co najmniej jeden pusty
wiersz. Jest to niezb dne, aby zasygnalizowa przegl darce wyst pienie ko ca nagłówka. Je li tego nie zrobimy, w
przegl darce pojawi si komunikat Server-Error 500.
Pozostałe linie zawieraj zwyczajny kod HTML uzupełniony zmiennymi, które wcze niej za pomoc Perl Buildera
umie cili my w skrypcie. Polecenie
print "<p>Formularz zawiera bł d:<br>".$message. "\n";
wysyła do przegl darki komunikat o bł dzie. Exit 0 umieszczone na ko cu podprogramu ko czy działanie procedury
przed powrotem do programu głównego.
Byłoby te dobrze, gdyby wła ciciel sklepu mógł niezwłocznie informowa klientów o tym, e zamówienie zostało
przyj te. O tym, w jaki sposób wysyła e-maile za pomoc Perla, powiemy w drugiej cz ci kursu. Jako przykład
stworzymy wówczas prost baz danych z mo liwo ci czytania i zapisywania plików.
Instalujemy Apache'a i Perla
Serwer Apache i pakiet z Perlem s standardowymi elementami ka dej dystrybucji Linuksa. U ytkownicy innych
systemów operacyjnych musz najpierw zdoby odpowiednie aplikacje. Wersj instalacyjn Perla mo emy zdoby
na wiele ró nych sposobów. Najpro ciej jest pobra j ze strony
www.perl.org
. Dla Windows dost pne s te inne
pakiety, równie rozpowszechniane bezpłatnie. W naszym kursie korzystamy z Active Perl wyprodukowanego
przez Active State, który wyró nia si bardzo prost instalacj . Po uruchomieniu instalator tak modyfikuje
ustawienia Windows, e od razu, be adnej dodatkowej konfiguracji, mo emy uruchamia skrypty Perla.
Do tworzenia aplikacji internetowych potrzebny jest jeszcze serwer WWW, który b dzie rodowiskiem testowym
dla naszych skryptów. Proponujemy wykorzysta do tego celu najbardziej rozpowszechniony serwer Apache,
poniewa jest bardzo prawdopodobne, e korzysta z niego równie nasz dostawca usług internetowych. Przykłady
prezentowane w ramach kursu powinny oczywi cie działa tak e na wszystkich innych serwerach.
Apache mo e by zainstalowany jedynie wówczas, gdy przez komputer obsługiwany jest protokół TCP/IP. Warunek
ten jest spełniony w przypadku ka dego komputera dysponuj cego dost pem do Internetu. Dla pewno ci mo emy
jeszcze sprawdzi to we Wła ciwo ciach otoczenia sieciowego lub w oknie DOS wpisa komend ping
127.0.0.1
-
je li zadziała, wszystko jest w porz dku. Instaluj c Apache, musimy pami ta o zmianie domy lnej lokalizacji
plików, poniewa spacja w .../Apache Group/... nie pozwoliłaby na uruchomienie programu w trybie DOS.
Proponujemy zmieni cie k dost pu na przykład na c:\apache.
Po zako czonej instalacji przechodzimy do podfolderu /conf i modyfikujemy plik httpd.conf. Nie nale y przera a
si ogromn liczb zawartych w nim komend. Do naszych zastosowa testowych musimy zmieni tylko jeden wpis.
Nale y odnale wiersz zaczynaj cy si od #ServerName, usun pierwszy znak i zast pi wyraz Dummy nazw
naszego komputera. Nale y tu u y nazwy, któr nadali my komputerowi podczas instalacji Windows.
Zapisujemy zmodyfikowany plik i uruchamiamy Apache'a. Serwer powinien otworzy si w oknie DOS-a, w
którym pojawi si komunikat "Apache for Win32 is running...". W razie wyst pienia problemów spróbujmy
uruchomi program z okna DOS-owego, dzi ki czemu b dziemy mogli ledzi wszystkie komunikaty o bł dach.
Je li serwer działa poprawnie, po wpisaniu w przegl darce adresu http://nazwa_komputera wy wietlona zostanie
strona powitalna Apache, któr jest plik index.html w katalogu .../apache/htdocs. Je eli adna strona si nie pojawia,
spróbujmy przegl darce poda adres IP naszego komputera (localhost), czyli http://127.0.0.1/.
Z Perl Builderem tworzenie skryptów staje si proste
Samodzielne pisanie skryptów przy u yciu edytora tekstu jest czasochłonne, a przy tym łatwo jest si pomyli . Za
pomoc Perl Buildera mo emy nie tylko wygodnie zarz dza zmiennymi, ale tak e tworzy procedury do odczytu
danych z formularzy, budowy dynamicznych stron HTML czy te wysyłania e-maili.
Po zainstalowaniu programu musimy wprowadzi kilka zmian w oknie konfiguracyjnym, które otwieramy
poleceniem
Tools/Options. W polu Locations wprowadzamy odpowiednie cie ki dost pu do plików na dysku.
Zaznaczenie opcji
Save files in UNIX format na zakładce Preferences zapobiega dodawaniu przy zapisywaniu
skryptów pod Windows znaków ko ca wierszy. Znaki te s ródłem bł dów, je li skrypty uruchamiane s pó niej w
rodowisku Linux.
W zakładce
CGI-Wizard okre lony jest pierwszy wiersz, od którego rozpoczyna si ka dy skrypt. Na pocz tku tej
linii zawsze znajduj si znaki #!, a za nimi cie ka dost pu do interpretera Perla. W systemie Linux wiersz ten ma
zazwyczaj posta :
#!/usr/bin/perl, pod Windows mo e on zawiera : #!c:\perl\bin\perl.exe. Druga cie ka dost pu
wskazuje na program pocztowy, którym pod Linuksem jest zazwyczaj Sendmail. Zostawimy to pole nie zmienione
lub puste, rezygnuj c na razie z wysyłania poczty elektronicznej.
Perl Builder automatycznie odczytuje z podanego dokumentu HTML nazwy
pól, z których składa si formularz.
W niniejszym artykule przygotujemy skrypt, który b dzie wy wietlał prosty formularz zamówienia dla sklepu
internetowego. W przypadku niepoprawnego wypełnienia formularza klient powinien otrzyma informacj o
bł dzie. Je li nie b dzie adnych usterek, wy wietlone zostanie potwierdzenie przyj cia zamówienia. Wszystkie
pliki wykorzystywane w tym przykładzie znajduj si na płycie CD-ROM doł czonej do tego numeru CHIP-a.
Zbiory shop.htm, error.htm i odpowiedz.htm kopiujemy do podkatalogu htdocs w katalogu serwera.
Za pomoc komendy
File | New Script tworzymy plik demo.pl i zapisujemy go w katalogu /cgi-bin serwera WWW.
Uruchamiamy kreatora skryptów CGI, wybieraj c przycisk z paska narz dzi. Najpierw musimy poinformowa
program, który formularz ma zosta wykorzystany. Poleceniem
Select wybieramy plik shop.htm z folderu htdocs.
Perl Builder odczytuje z formularza nazwy pól, które pó niej pojawiaj si w lewym dolnym okienku w postaci
zmiennych. Nazwy ksi ki, nazwisko i e-mail zostaj zamienione na zmienne $produkty, $nazwisko i $e-mail.
Nast pnie musimy wybra sposób odczytania informacji z formularza. Mamy do wyboru wiele ró nych mo liwo ci
analizy danych. Posłu ymy si najcz ciej u ywan metod
Standard
Poleceniem
Next przechodzimy dalej. Aby klienci naszego sklepu nie mogli wypełnia formularza w sposób
zupełnie dowolny, dane przesłane do serwera podlegaj weryfikacji. By skonfigurowa t funkcj , przechodzimy na
zakładk
Validate Inputs. Najpierw do sprawdzenia wybierana jest zmienna $produkty. Poniewa przynajmniej
jedno pole produktu musi by zaznaczone, wybieramy warunek
non-blank. W oknie tekstowym do podania
komunikatu bł du wpisujemy na przykład:
Musisz wybra jedn z ksi ek. W identyczny sposób post pujemy ze
zmienn
$nazwisko. W przypadku zmiennej $e-mail sprawdzamy, czy jej zawarto ma form zgodn z formatem
adresu poczty elektronicznej - zaznaczamy pole
in E-mail address format.
Wybieraj c odpowiedni opcj , mo emy kontrolowa poprawno wprowadzanych danych.
W ostatnim kroku musimy na stronie error.htm umie ci komunikat o bł dzie. Za pomoc komendy
Select
wybieramy zbiór
blad.htm, a nast pnie polecenie Edit. Otworzy si edytor tekstu z kodem HTML zaznaczonej
uprzednio strony. W miejscu, w którym ma by wy wietlony komunikat, umieszczamy polecenie
[$message]. W
pliku znajduj cym si na CHIP-CD komenda ta jest ju wstawiona.
Ze wzgl du na u ytkowników Windows, którzy nie dysponuj Sendmailem, pominiemy na razie mo liwo
wysyłania poczty elektronicznej za pomoc skryptów Perla. U ytkownicy Linuksa nawet bez naszych wskazówek
powinni sobie z tym poradzi , korzystaj c z mo liwo ci Perl Buildera i Sendmaila.
Podobnie jak wcze niej, gdy za po rednictwem blad.html generowali my komunikat o bł dzie, tak i teraz
stworzymy formularz informuj cy o poprawnym wysłaniu zamówienia. Po przej ciu na zakładk
Display HTML
wybieramy przycisk
Edit, aby wy wietli kod strony odpowiedz.htm. Je li chcemy, eby pojawiły si tam warto ci
wybranych pól formularza, musimy u y wyra enia
[$zmienna]. Chc c zwróci si bezpo rednio do naszego
klienta, nale y umie ci polecenie Witaj
[$nazwisko]. Za pomoc zmiennej [$produkty] mo emy mu przypomnie ,
co zostało zamówione. W pliku umieszczonym na CHIP-CD wpisy te s ju dodane. Klikamy przycisk
Finish i
skrypt jest ju gotowy.
Przed wysłaniem skryptu na serwer powinni my sprawdzi jego działanie za pomoc odpluskwiacza (debugera)
zawartego w Perl Builderze. Przechodzimy w tym celu na kart
Input Values, gdzie jest przedstawiony formularz z
naszej strony HTML. Zaznaczamy jeden albo kilka produktów i wpisujemy imi , nazwisko oraz adres e-mail
(mo emy te nie wpisywa nic, aby sprawdzi , czy pojawi si komunikat o bł dzie). Nast pnie wydajemy polecenie
Run/Continue z menu Run/Debug lub przyciskamy klawisz [F9], który rozpoczyna wykonywanie programu. Na
zakładce
Output HTML/Text pojawia si to, co serwer wysłałby do przegl darki u ytkownika. Je li skrypt nie
działa poprawnie, mo emy spróbowa wł czy opcj
Check Syntax with-w Flag. Wówczas Perl sprawdzi składni
programu i w razie napotkania bł dów wy wietli komunikaty, które mog okaza si bardzo pomocne podczas
usuwania usterek.
Wskazówki dla programistów
Nawet do wiadczonym programistom nie udaje si napisanie programu, który zadziałałby od razu. Internal server
error, czyli bł d o numerze 500, b dzie nas prze ladował tak długo, a nauczymy si poprawnie wstawia znaki
cudzysłowu, zaczniemy pami ta o redniku na ko cu ka dego wiersza i b dziemy poprawnie otwierali i zamykali
nawiasy klamrowe w skomplikowanych konstrukcjach if i while. Bardzo rzadko zdarza si , aby bł d spowodowany
był powa n usterk w programie. W ponad 90 procentach przypadków bł dy s wynikiem prostych pomyłek.
Najłatwiej odnajdziemy wszystkie literówki, je li wywołamy skrypt z przeł cznikiem -w. W tym celu
modyfikujemy pierwszy wiersz skryptu nast puj co:
#! c:\perl\bin\perl.exe -w
W efekcie Perl wygeneruje w podkatalogu /logs katalogu instalacyjnego serwera Apache plik error.log, w którym
znajdziemy informacje o wszystkich nieprawidłowo ciach w działaniu skryptów.
Poniewa jest bardzo prawdopodobne, e stworzone przez nas skrypty b d w rzeczywisto ci pracowały na
serwerze z systemem Linux, w trakcie pisania kodu powinni my zwróci uwag na dwie najwa niejsze przyczyny
bł dów. W przeciwie stwie do Windows system Linux rozró nia małe i wielkie litery. Z tego powodu plik test.pl i
Test.pl to dwa zupełnie ró ne zbiory. Ponadto niektóre edytory tekstu, takie jak Wordpad czy Word, wstawiaj
znaki formatuj ce. W efekcie po uruchomieniu skryptu pojawi si server error 500. Ten ostatni problem nie dotyczy
z reguły tekstowych edytorów HTML.