background image

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 ksiazkinazwisko 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

background image

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.

background image

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).

background image

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:

background image

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.

background image

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

background image

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 .

background image

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.

background image

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/.

background image

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 kinazwisko 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

background image

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.

background image

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.