INTERNET Workshop Język Perl Apache

background image

Co jest grane

Wst p

Na bazie ASCII

Wy wietlanie wyniku wyszukiwania

Porównanie zapytania...

Sztuczki w HTML-u

Ksi ka go ci

Automatyczna poczta

Przepis na szybki skrypt

background image

Na bazie ASCII

W naszym przykładzie baza danych ma format pliku tekstowego, który mo e by utworzony za

pomoc najprostszego edytora tekstu. Mo emy równie posłu y si arkuszem kalkulacyjnym, któ-

ry potrafi eksportowa dane do pliku TXT.

Baza danych składa si z pewnej liczby wierszy. Ka dy z nich odpowiada jednemu rekordowi,

czyli pojedynczemu zestawowi danych opisuj cych jeden film. Ka dy rekord z kolei zawiera pola

oddzielone znakami |. Na potrzeby naszego repertuaru kinowego stworzymy nast puj ce pozycje:

data, godzina, tytul_filmu, opis. Nasza baza b dzie miała wówczas posta :

05.04.2000|20:00|Dr iwago|Wyciskacz łez05.04.2000|23:00|Godzina duchów|Horror

Po przygotowaniu informacji musimy je w odpowiedniej postaci zaprezentowa go ciom od-

wiedzaj cym nasz witryn . W tym wypadku u ytkownik chc cy znale film musi wpisa w for-

mularzu strony WWW dat i godzin planowanego wyj cia do kina. Nast pnie wy wietlana jest

lista filmów spełniaj cych podane kryteria. Je li o danej porze nic nie jest grane, powinien pojawi

si odpowiedni komunikat.

Formularz umo liwiaj cy zadanie pytania znajduje si na stronie wyszukiwanie.html i ma nast -

puj c posta :

<form method="post" action="/cgi-bin/szukaj.pl"><p>Prosz poda dat w postaci
dd.mm.rrrr</p><p> <input type="text" name="data_wyszukiwania" size="10"
maxlength="10"></p><p> <input type="submit" name="Submit" value="Submit"> <input
type="reset" name="Submit2"value="Reset"></p></form>

Po wysłaniu formularza na serwerze uruchamiany jest skrypt szukaj.pl, który - razem z demon-

stracyjn baz danych i plikami HTML - znajduje si na płycie CD- -ROM doł czonej do bie cego

numeru CHIP-a. Pami tajmy o tym, e w skryptach musimy poda poprawne cie ki dost pu do

folderu instalacyjnego Perla i do pliku bazy danych.

Serwer WWW wył cznie przekazuje dane do skryptu CGI oraz je od niego odbiera. Obsługa

zapytania zadanego przez u ytkownika (przeszukanie bazy danych, odpowiednie sformato-

wanie znalezionych informacji) nale y do skryptu CGI.

Przyjrzyjmy si teraz skryptowi szukaj.pl uruchamianemu przez formularz. Podobnie jak w

przykładzie z pierwszej cz ci kursu, przesłane dane musz zosta przetworzone przez procedur

GetFormInput do postaci nadaj cej si do dalszej analizy. W naszym przypadku jej wynik zapisy-

wany jest w zmiennej o nazwie $data_wyszukiwania

Na pocz tku skryptu, w cz ci konfiguracyjnej, podana jest lokalizacja pliku bazy danych. W

przypadku Linuksa wpis ten mo e wygl da na przykład tak:

$program='/usr/local/apache/htdocs/dane/program.dat';

W systemie Windows mo emy spotka si z nast puj cym zapisem:

$program='c:\programy\apachehtdocs\dane\program.dat';

Wa ne jest, aby w wierszu tym u y apostrofów, poniewa tylko wtedy Perl nie b dzie próbo-

wał interpretowa tre ci w cudzysłowie. Odwrotny uko nik (backslash) jest tak zwanym znakiem

specjalnym, wi c je li chcemy wpisa go pomi dzy znakami cudzysłowu, musi by poprzedzony

znakiem \. Cały wpis wygl da wówczas nast puj co:

$program="c:\\programy\\apache\htdocs\\dane\\program.dat";

Zalet takiego zapisu jest mo liwo wyra enia fragmentu cie ki dost pu za pomoc zmiennej,

background image

któr oczywi cie wcze niej musimy zdefiniowa . Mamy wówczas do czynienia z konstrukcj w

rodzaju:

$program="serverroot\\dane\program.dat";

Pomi dzy znakami apostrofu Perl zinterpretowałby symbol $ jako zwykły znak tekstowy, a nie

jako pocz tek zmiennej.

Je li korzystamy z programu Active Perl przedstawionego w pierwszej cz ci kursu, wówczas

pod Windows równie powinni my zapisywa cie ki dost pu w formacie linuksowym, czyli:

$program='c:/programy/apache/htdocs/dane/program.dat';

U ytkownicy Linuksa i Windows NT/2000 musz pami ta o nadaniu wła ciwych praw dost pu

plikom oraz folderom. Je li chcemy, aby wła ciciele kin mogli samodzielnie uzupełnia baz da-

nych przez Internet za po rednictwem formularza, wówczas u ytkownik, z którego uprawnieniami

pracuje serwer WWW, musi mie prawo zapisu do pliku program.dat

Szczególn ostro no nale y zachowa , je eli skrypty Perla tworz , modyfikuj i kasuj pliki.

Nigdy nie powinni my zezwala na wykonywanie takich operacji w katalogu ródłowym serwera

(zazwyczaj jest to folder o nazwie htdocs lub wwwroot). Tak jak w naszym przykładzie, musimy

utworzy do tego celu specjaln kartotek .

Zanim skrypt rozpocznie przeszukiwanie bazy danych, odpowiednia procedura sprawdza, czy

u ytkownik wpisał dat we wła ciwy sposób. W naszym przykładzie powinna ona mie form

dd.mm.rrrr, czyli dwie cyfry.dwie cyfry.cztery cyfry. Je li wpisany został inny ci g znaków, wy-

wietlony zostanie odpowiedni komunikat.

background image

wietlanie wyniku wyszukiwania

W kolejnym kroku przygotujemy dokument HTML słu cy do prezentowania rezultatów przeszu-

kiwania bazy danych. Strona b dzie w cało ci tworzona dynamicznie przez skrypt, wobec czego

musimy pami ta , aby przed wypisaniem jej zawarto ci wysła tzw. nagłówek HTTP. O tym, jak

si go tworzy, pisali my w pierwszej cz ci kursu.

Nast pnie skrypt generuje kod HTML-a odpowiadaj cy tabeli. Na pocz tku umieszczamy nazwy

poszczególnych kolumn:

Lp., Godzina, Tytuł i Opis. Wła ciwe wiersze tabeli dodawane s sukce-

sywnie w trakcie znajdowania kolejnych pozycji.

Najpierw skrypt otwiera do odczytu plik okre lony w zmiennej $program. Je li operacja otwar-

cia bazy si nie powiedzie, zostanie wykonana procedura znajduj ca si za znakiem || (lub). Funkcja

die zapisuje odpowied do standardowego wyj cia dla komunikatów bł du. W przypadku skryptów

CGI informacje o bł dach s dopisywane do pliku error-log serwera WWW. Je li wynik działania

programu nie odpowiada naszym oczekiwaniom, powinni my sprawdzi zawarto tego zbioru.

Matt's Script Archive to jedno z najlepszych ródeł darmowych skryptów CGI.

Open(DANE,"<$program") || die"Otwarcie pliku $program nie powiodło si \n";

Zmienna DANE pełni tutaj funkcj tak zwanego uchwytu plików (file handler), czyli identyfiku-

je otwarty zbiór. Za po rednictwem DANE uzyskujemy dost p do zawarto ci pliku, którego nazwa

jest okre lona w zmiennej $program. Symbol < umieszczony przed nazw zbioru oznacza, e

otworzymy plik do odczytu. Gdyby my zast pili go znakiem > lub nie wstawili w tym miejscu ni-

czego, zbiór zostałby otwarty do zapisu. Z kolei u ycie >> spowodowałoby, e dane przekazywane

do zmiennej DANE byłyby dopisywane do pliku. Kombinacja +< lub +> pozwala na jednoczesny

zapis i odczyt.

W pierwszym przykładzie chcemy odczytywa dane i porównywa je z tre ci zapytania u yt-

kownika. Proces ten podzielony jest na wiele małych kroków.

background image

Porównanie zapytania z zawarto ci bazy

Zawarto pliku okre lonego w DANE jest wczytywana do listy @lista_danych. Ka dy wiersz na-

szej bazy danych stanowi jeden element listy. Poniewa wszystkie linie zawieraj znaki ko ca wier-

sza (\n), za pomoc polecenia chop odcinamy ostatni znak od ka dego elementu listy. W naszym

przypadku mogliby my zrezygnowa z tej operacji, jednak nie robimy tego po to, by zapozna si z

konstrukcj p tli foreach @element_listy (@lista) {blok programu} oraz z poleceniem chop

@lista_danych=<DANE>;foreach $wiersz(@lista_danych){ chop $wiersz;

Teraz rozpoczyna si wła ciwe wyszukiwanie. Poniewa w pierwszej cz ci poznali my ju

sposób działania p tli for(licznik) {}, a przed chwil zetkn li my si z konstrukcj foreach{}, dlate-

go tym razem u yjemy p tli while{}.

Wcze niej zdefiniujemy jeszcze dwie zmienne: $i b dzie licznikiem p tli, dzi ki któremu b -

dziemy mogli odczyta ka dy element listy @lista_danych. Poniewa do pierwszego elementu tej

listy odwołujemy si za pomoc @lista_danych[0], p tla rozpoczyna si od warto ci $i=0. Druga

zmienna $zgodne informuje nas, czy wyszukiwanie zostało zako czone sukcesem. Pocz tkowa

warto tej zmiennej równa jest zero i nie zmienia si , dopóki nie zostanie znaleziony element speł-

niaj cy kryteria wyszukiwania.

Działanie programu mo na wytłumaczy nast puj co: dopóki warto zmiennej $i jest mniejsza

lub równa liczbie wszystkich elementów tablicy ($# lista_danych), wykonuj polecenia podane w

p tli. Utwórz tablic zawieraj c elementy $data_projekcji, $godzina, $tytul, $opis, dziel c wska-

zywany przez $i element tablicy $lista_danych wsz dzie tam, gdzie znaleziony zostanie znak |. Na

zako czenie licznik p tli $i zwi kszany jest o 1.

$i=0;$zgodny=0;while($i<=$#lista_danych){($data_projekcji,$godzina,$tytul,
$opis)=split/\|/,$lista_danych[$i]; $i++;

Znak | ma specjalne znaczenie. Je li chcemy, eby w funkcji split/znak_podziału/wyra enie był

on traktowany zwyczajnie, jako znak podziału - musimy przed nim wstawi odwrotny uko nik.

Podobna sytuacja dotyczy innego znaku specjalnego - @. Z tego powodu adres e-mail w kodzie

Perla zapisujemy w postaci: konto\@domena

background image

Sztuczki w HTML-u

Szczególna ostro no wymagana jest równie wtedy, gdy skrypt ma wygenerowa kod HTML-a.

Je li chcemy wypisa znaki cudzysłowu, musimy to zrobi tak, eby nie oznaczały one ko ca ła -

cucha znaków, lecz jego cz

. Polecenie print

"<A HREF="Index.html">\n"; powoduje wy-

wietlenie odno nika. Aby temu zapobiec, musimy przekształci to wyra enie do postaci

print '<A

HREF=\'Index.html\'>\n'; albo print '<A HREF='Index.html'>'. '\n';.

Teraz mo emy sprawdzi , czy w bazie danych wyst puj pozycje o interesuj cej nas dacie. W

tym celu musimy porówna dat wpisan w formularzu z zawarto ci pola data ka dego elementu

naszej bazy. Wykorzystamy do tego konstrukcj if (warunek) {blok programu}, któr poznali my

ju w pierwszej cz ci kursu. Je li oba ła cuchy tekstowe s takie same (eq), licznik zgodnych ele-

mentów zwi kszany jest o jeden i do tabeli na stronie WWW zostaje dopisny wiersz.

If ($data_szukana eq $data_projekcji) { $zgodne++; print"<TR>\n"; print
"<TD>$zgodne</TD>\n"; print "<TD>$godzina</TD>\n"; print "<TD>$tytul</TD>\n";
print "<TD>$opis</TD>\n"; print" </TR>\n";}#To jest koniec konstrukcji #warun-
kowej If}#To jest koniec p tli While

Je li program sprawdził wszystkie rekordy, a licznik zgodnych elementów nadal wynosi 0,

wówczas na monitorze u ytkownika wy wietlany jest komunikat, e w bazie nie ma adnego filmu

spełniaj cego kryteria.

W ostatnim kroku ko czymy budow tabeli i strony HTML oraz zamykamy plik:

if ($zgodne==0) print "<TR>\n"; print "<TD COLSPAN=\"4\"> Nie znaleziono

adnego filmu wy wietlanego dnia $data </TD>\n"; print

"<TR>\n";close(DANE);

Dobrze byłoby, gdyby wła ciciele kin mogli samodzielnie uzupełnia swoje repertuary przez

Internet. Funkcj tak realizuje drugi z zał czonych skryptów. Za po rednictwem formularza da-

ne_wejsciowe.html dane dotycz ce filmów przekazywane s do skryptu dodaj.pl.

Zwró my uwag , e w przypadku problemów z otwarciem pliku skrypt nie wysyła do przegl -

darki informacji o bł dzie, tylko za pomoc polecenia die zapisuje komunikat w pliku error-log

serwera WWW.

Open(DANE, ">>$program")||die "Nie mo na otworzy pliku $program\n";print DATEN
$data_projekcji."|";print DATEN $godzina."|";print DATEN $tytul."|";print DATEN
$opis."\n";close(DANE);

Za pomoc polecenia print dane nie s przekazywane do standardowego wyj cia (czyli przegl -

darki), ale do znacznika pliku DANE i tym samym do skojarzonego z nim pliku program.dat, który

został otwarty za po rednictwem znaków >>.

background image

Ksi ka go ci

Je li u ytkownikom z Internetu chcemy zezwoli na zapisywanie plików, na przykład w ksi ce

go ci, musimy pami ta o blokowaniu dost pu do pliku z danymi. W ten sposób unikniemy sytu-

acji, e kilku u ytkowników zapisuje co w bazie danych w jednej chwili. Mo emy to zrobi w pro-

sty sposób. Pierwszy u ytkownik otwieraj cy zbiór tworzy na serwerze plik o okre lonej nazwie, na

przykład ksiazka.lock. Przed ka dym otwarciem ksi ki go ci konstrukcja if(-e

/ cie ka/ksiazka.lock) {p tla opó niaj ca} sprawdza obecno zbioru blokuj cego (lockfile). Je li

plik ju istnieje, oznacza to, e kto wła nie korzysta z bazy danych. Kolejny u ytkownik b dzie

wi c musiał zaczeka w p tli opó niaj cej. Kiedy pierwszy go wpisze si ju do ksi ki, jego plik

ksiazka.lock jest kasowany. Teraz nast pny u ytkownik po opuszczeniu p tli opó niaj cej b dzie

mógł otworzy zbiór z ksi k go ci, po wcze niejszym zało eniu własnego pliku ksiazka.lock

Podali my tu jedynie ogólny opis metody blokowania pliku, poniewa w rzeczywisto ci wyst -

puje wiele ró nych rozwi za , które w du ym stopniu uzale nione s od systemu operacyjnego.

Przykłady znale mo na w obszernych zbiorach archiwum skryptów w Internecie (patrz: ramka

obok).

Polecenie open pozwala nie tylko otwiera pliki, ale tak e uruchamia programy. Mo liwo ta

jest szczególnie przydatna, je li chcemy wysyła listy za pomoc programu Sendmail.

Zanim jednak zezwolimy na wykonywanie takich operacji, musimy pomy le o ewentualnych

zagro eniach, jakie wi

si z mo liwo ci uruchamiania programów przez u ytkowników z Inter-

netu. Dotyczy to szczególnie takich przypadków, kiedy razem z programem uruchamiana jest po-

włoka (shell).

Tekstowe bazy danych maj swoje naturalne ograniczenia. Znacznie wi cej mo liwo ci oferuj

serwery baz danych. O tym, w jaki sposób uzyska dost p do tego typu baz za pomoc gotowych

modułów Perla, powiemy w nast pnej cz ci naszego kursu.

background image

Automatyczna poczta

Istnieje wiele skryptów, które obsługuj wysyłanie poczty. S one wykorzystywane do dzi kowania

za wpis do ksi ki go ci, potwierdzenia zlece lub zamówie zło onych w sklepie albo przesłania

zawarto ci formularzy zgłoszeniowych. Standardowo w ka dej dystrybucji Linuksa znajduje si

serwer pocztowy - najcz ciej jest nim Send-mail. Niestety, Windows 9x ani NT nie oferuj tego

przydatnego narz dzia. Wła nie wysyłanie poczty było dotychczas głównym ródłem problemów,

jakie wyst powały podczas próby uruchamiania skryptów Perla na komputerach z Windows.

Na szcz cie od pewnego czasu dost pny jest Sendmail w wersji okienkowej. Jego podstawow

zalet jest to, e pracuje z takimi samymi komendami tekstowymi jak jego uniksowy przodek. Pro-

gram ma istotn wad : nie jest bezpłatny. Po upływie 30-dniowego okresu próbnego musimy zapła-

ci około 50 USD za licencj na ka d stacj robocz . Freeware'ow alternatyw dla Sendmaila jest

Blat (patrz: ramka Info). Jednak ta aplikacja ma inny zestaw komend, co sprawia, e konieczna jest

modyfikacja skryptów.

Instalacja Sendmaila pod Windows przebiega bardzo szybko. Wa ne jest, aby w jej trakcie po-

da poprawn cie k dost pu do katalogu /cgi-bin serwera WWW. Standardowo podaje si w tym

przypadku cie k dost pu do folderu skryptów Microsoft Personal Webserver. Po instalacji nale y

uruchomi program konfiguracyjny, który prosi o podanie takich parametrów, jak nazwa serwera

SMTP (np. mail.yourprovider.com), adres e-mail (np. nazwa@yourprovider.com) i adres zwrotny

dla odpowiedzi. Pozostałe dane, takie jak numer portu i czas oczekiwania na poł czenie (timeout),

maj domy lne warto ci i z reguły nie ma potrzeby ich zmieniania. W folderze ze skryptami znajdu-

je si dokumentacja z trzema przykładowymi programami oraz opis komend. Od teraz u ytkownicy

Windows mog korzysta z Sendmaila tak samo jak fani Linuksa.

Aby móc u ywa program pocztowy, najlepiej zdefiniowa zmienn zawieraj c cie k dost -

pu. W rodowisku Linux mo na to zrobi w nast puj cy sposób:

$mail_prog='/usr/sbin/sendmail';

Poniewa okienkowego Sendmaila zainstalowali my w folderze /cgi-bin serwera, to je li uru-

chamiamy skrypty w tym samym folderze, wystarczy napisa :

$mail_prog='sendmail.exe'

Je eli programy znajduj si w ró nych katalogach, podaj c cie k dost pu, musimy przestrze-

ga opisanych wcze niej zasad obowi zuj cych przy u ywaniu znaku \.

Wystarczy tylko jeden wiersz, aby uruchomi program, który wy le maila pod adres okre lony w

zmiennej $mail_adress

$open (MAIL,"|$mail_prog -t");

W tej linii znak | nie słu y do rozdzielania pól bazy danych, ale do sterowania przepływem tek-

stu. Je li | umieszczony jest przed nazw programu, wszystko, co drukowane jest do znacznika pli-

ku MAIL, zostaje przekazane do programu pocztowego. Je eli znak | znajduje si po prawej stronie,

wówczas dane wyj ciowe z programu przekazywane s do znacznika pliku albo do standardowego

wyj cia.

W naszym przykładzie chcemy zapisywa dane do programu. Najpierw do Sendmaila trafi na-

główek. U ywaj c adresów pocztowych w kodzie Perla, pami tajmy o tym, e znak @ musi by

poprzedzony symbolem \. Wa ne jest te , aby nie zapomnie o dwóch pustych wierszach (print

"\n\n") pod nagłówkiem. W przeciwnym razie program nie b dzie wiedział, gdzie ko czy si na-

główek, a gdzie zaczyna tekst. Na zako czenie drukujemy wiadomo i zamykamy plik.

print MAIL "To:$mail_adress\n";print MAIL "Reply-to: na-
zwa\@yourprovider.com\n";print MAIL "From: nazwa\@yourprovider.com\n";print MAIL
"Subject: Kurs Perla\n";print MAIL "\n\n";print MAIL "Szanowny adresa-
cie,\n";print MAIL "\n";print MAIL "To jest demonstracja automatycznego
wysyłania listów.\n";print MAIL "\n";print MAIL "Z pozdrowieniami\n";print MAIL

background image

"\n";print MAIL "\n";print MAIL "Od Sendmail\n";print MAIL "\n";print MAIL
"\n\n";close (MAIL);

Przepis na szybki skrypt

Po co wywa a otwarte drzwi? Poniewa Perl rozpowszechniany jest w formie Open Source, rów-

nie wielu programistów udost pnia bezpłatnie napisane przez siebie skrypty. Taka sytuacja jest

bardzo dobra dla innych u ytkowników, gdy mog je oni wykorzysta . Bardzo cz sto nie jest do

tego wymagana niemal adna wiedza, bo w wielu programach wystarczy skonfigurowa jedynie

kilka wierszy. Mimo wszystko dobrze jest mie przynajmniej ogólne poj cie o działaniu Perla, po-

niewa tylko wtedy skrypty mo na dostosowa do własnych potrzeb - na przykład zmieni format

wynikowej strony HTML.

Skrypty pisane s niemal wył cznie dla rodowiska Unix (Linux), jednak wi kszo z nich dzia-

ła równie pod Windows. Wi kszo , ale nie wszystkie. Najcz ciej dlatego, e autorzy skryptów

odwołuj si cz sto do programów u ywanych w Linuksie, które nie wyst puj w Windows. Po-

cz tkuj cy adepci Perla, którzy chc uruchamia skrypty pod "Okienkami", mog rozpocz od

którego z prostych skryptów opisanych w naszym kursie, na przykład od ksi ki go ci.

Poszukiwania potrzebnego skryptu najlepiej jest rozpocz od archiwum. Jednym z najwi k-

szych i najbardziej popularnych na wiecie jest Matt's Script Archive. Oprócz własnych 20 prac

autor zamie cił tam niemal 3000 najró niejszych skryptów innych programistów. W porównaniu z

innymi zbiorami ten ma bardzo przejrzyst struktur pomimo swojej ogromnej obj to ci. U ytkow-

nicy mog nawet przyznawa oceny skryptom, a wszystkie programy da si posortowa pod wzgl -

dem redniej punktów.

Do autorów, którzy oprócz własnych udost pniaj równie skrypty napisane przez innych, nale-

y te Erlanger Wolfgang Wiese. Na stronie Realm of CGI znajduj si opisy skryptów oraz ich

wersje demonstracyjne.


Wyszukiwarka

Podobne podstrony:
Adverbs (zebrane patrz worksheets z internetu w folderze język angielski) 2
Internetowe Centrum, Język polski i szkoła podstawowa
INTERNET Workshop SklepInternetowyPerl MySQL
INTERNET Workshop BazaDanych ASP Płytoteka
INTERNET Workshop SklepInternetowyPerl1
INTERNET ZASTOSOWANIA Workshop PHP Apache Płytoteka
Czechy na polskich stronach internetowych, Język czeski
Como ganhar dinheiro por minuto conectado na Internet Convite Cadastro, Nauka języków, język hiszpań
VERBAL GROUPS, język polski jako język obcy, Polski. Worksheets
Formularze - slownictwo dla Holendrow, język polski jako język obcy, Polski. Worksheets
DEMONSTRATIVE PRONOUNS, język polski jako język obcy, Polski. Worksheets
Jerga de Internet, Język hiszpański, Słownictwo środowiskowe
Natura hipertekstu, język w internecie
Internet – śmietnik czy sezam kultury, Język polski, Czytanie ze zrozumieniem
MÓWIĆ, język polski jako język obcy, Polski. Worksheets
Como começar a ganhar dinheiro com o seu computador e a Internet, Nauka języków, język hiszpański,
Dni tygodnia, język polski jako język obcy, Polski. Worksheets

więcej podobnych podstron