ÀÁÐÀÊÀÄÀÁÐÀ (Òîæå ñàìîå íî â ÷èòàåìîì âèäå)
Izo dna v den' rabotaa nad obnovleniem soderjimogo svoego Web-sayta, nasi6aa
ego interesnimi materialami, vi, veroatno, zadumivaetes' o tom, 4to ejednevno
sozdautsa sotni novix Web-saytov, kotorie takje ejednevno popolnautsa sotnami
novix dokumentov. Kak sozdautsa vse eti novie massivi stranic i kakim obrazom
oni tak bistro obnovlautsa? Vse eto ne tak slojno, kak kajetsa na perviy
vzglad, poskol'ku zdes' ispol'zuetsa koncepcia dinami4eskix Web-stranic.
V etoy stat'e mi rassmotrim etapi sozdania mexanizma publikacii na Web-sayte
press-relizov. Na6 sayt budet soedinat' «na letu» press-relizi, xrana6iesa v
baze dannix, s 6ablonnimi Web-stranicami. Mi ne stavili cel'u oznakomit'
4itateley s osnovami sredstv razrabotki Web-saytov, poskol'ku ob etom napisano
mnojestvo knig i statey. Dannaa stat'a prednazna4ena v osnovnom dla tex
pol'zovateley, kotorie uje imeut opit sozdania Web-stranic i prostix saytov.
Na6a glavnaa cel' — pokazat', kak na4at' razrabativat' svoy perviy dinami4eskiy
Web-sayt. Dla ponimania stat'i jelatel'no imet' bazovie znania ob arxitekturax
informacionnix sistem, o azike razmetki giperteksta (HTML) i azike programmirovania
Perl . Dla sozdania etogo sayta mi vospol'zuemsa trema mo6nimi otkritimi
texnologiami: Apache, MySQL i Perl/DBI.
4to takoe stati4eskiy Web-sayt?
Pered tem, kak pogruzit'sa v razrabotku dinami4eskogo Web-sayta, vajno
ponat', 4to predstavlaut soboy stati4eskiy Web-sayt i stati4eskie Web-stranici,
sostavlau6ie ego osnovu. Stati4eskie Web-stranici sozdautsa vru4nuu, potom
soxranautsa i zagrujautsa na sayt. Vsakiy raz, kogda trebuetsa izmenit'
soderjimoe takoy stranici, pol'zovatel' modificiruet ee na svoem rabo4em
komp'utere, primenaa, kak pravilo, HTML-redaktor, soxranaet ee i zatem zanovo
zagrujaet na Web-sayt. Vnimatel'no prismotrev6is' k kakomu-nibud' portalu,
dopustim k CNN.com ili BBC.co.uk, mojno podumat', 4to dla obnovlenia soderjimogo
svoix saytov eti kompanii privlekaut armiu verstal'6ikov. Na samom je dele
su6estvuet lu46iy sposob — ispol'zovanie koncepcii dinami4eskogo Web-sayta.
4to takoe dinami4eskiy Web-sayt?
Kajdaa otobrajaemaa stranica dinami4eskix Web-saytov osnovana na 6ablonnoy
stranice, v kotoruu vstavlaetsa postoanno menau6eesa informacionnoe napolnenie,
kotoroe obi4no xranitsa v baze dannix. Kogda pol'zovatel' zapra6ivaet stranicu,
sootvetstvuu6aa informacia izvlekaetsa iz bazi, vstavlaetsa v 6ablon, obrazua
novuu Web-stranicu, i peresilaetsa Web-serverom v pol'zovatel'skiy brauzer,
kotoriy i otobrajaet ee doljnim obrazom. Krome informacionnogo napolnenia,
dinami4eski mogut sozdavat'sa takje i elementi navigacii po Web-saytu. Takim
obrazom, esli vam nujno obnovit' soderjimoe svoego sayta, vi prosto dobavlaete
tekst dla novoy stranici, kotoriy zatem vstavlaetsa v bazu dannix s pomo6'u
opredelennogo mexanizma. V rezul'tate polu4aetsa, 4to Web-sayt kak bi sam seba
obnovlaet.
Po4emu dinami4eskie sayti lu46e
Srazu posle togo kak dinami4eskiy sayt sozdan i zapu6en v rabotu, na4inaut
proavlat'sa ego preimu6estva. Teper' v va6em rasporajenii imeetsa sravnitel'no
nebol'6oe koli4estvo 6ablonnix stranic, s pomo6'u kotorix generiruutsa sotni, a
mojet bit', i tisa4i Web-stranic. Vid (dizayn) sayta mojet bit' legko izmenen s
pomo6'u modifikacii etix 6ablonov. Izmenenie soderjimogo bazi dannix mojno
proizvodit' 4erez Web-interfeys s ispol'zovaniem HTML-formi, ne vtorgaas' pri
etom v texni4eskie detali kajdoy specifi4eskoy SUBD.
Sozdanie dinami4eskogo sayta
Pervoe, 4to nujno dla sozdania dinami4eskogo sayta, — eto Web-server,
naprimer Apache.
Web-server mojet ispol'zovat'sa dla obslujivania elektronnogo magazina,
servera novostey, poiskovogo mexanizma, sistemi distancionnogo obu4enia i daje
dla vsey sovokupnosti pere4islennix sfer. Vibor Web-servera zavisit ot togo,
kakim vidom deatel'nosti 4astnoe lico ili organizacia sobiraetsa zanimat'sa v
Internete.
Nemnogie iz prinimaemix v biznese strategi4eskix re6eniy stol' je zna4imi,
kak vibor platformi dla Web-servera. Xarakteristiki servera — eto 4rezvi4ayno
vajniy faktor, opredelau6iy nadejnost' uzla, ego «otziv4ivost'» na zaprosi
klientov, a takje to, kakie usilia neobxodimo predprinimat' dla podderjania ego
v rabo4em sostoanii. Pri pravil'nom vibore komponentov i ka4estvennom proekte
Web-uzel mojet stat' dla klientov i partnerov novim, bolee udobnim sposobom
vzaimodeystvia s va6ey kompaniey. Peregruzka Web-servera mojet privesti k tomu,
4to server baz dannix ili kakoy-libo inoy resurs stanet nedostupnim dla
klientov.
Krupnie kompanii do nedavnego vremeni delali stavki na Microsoft Internet
Information Server, Netscape FastTrack, IBM WebSphere, a Apache v osnovnom
ispol'zovalsa nebol'6imi kompaniami. Odnako sey4as situacia neskol'ko
izmenilas', i Apache na4inaet podderjivat' rabotosposobnost' nekotorix krupnix
Internet-proektov, v 4astnosti Yahoo.
Polnuu versiu stat'i vi mojete nayti na na6em CD-ROM.
Apache predostavlaet bogatie vozmojnosti, pozvolau6ie nastroit' Web-server v
sootvetstvii s potrebnostami individual'nix i korporativnix pol'zovateley.
Nastroyka proizvoditsa s pomo6'u direktiv, soderja6ixsa v konfiguracionnix
faylax. Apache pozvolaet sozdavat' virtual'nie Web-uzli, a takje vipolnaet
funkcii proxy-servera. Esli nujno predostavit' dostup k soderjimomu servera
li6' ograni4ennomu krugu lic, Web-server mojno nastroit' tak, 4tobi pri
obra6enii k ukazannim katalogam server proveral registracionnie imena i paroli
v sobstvennoy ili v odnoy iz podklu4ennix k nemu baz dannix.
Dalee vam nujno re6it', kak vi sobiraetes' xranit' informacionnoe napolnenie
(kontent), kotoroe otobrajaetsa na Web-stranice. V dannoy stat'e na konkretnom
primere mi pokajem, kak sozdat' bazu dannix v SUBD MySQL, kotoraa pozvolit nam
razbit' Web-kontent na tablici, soderja6ie pola i zapisi s dannimi. Pole — eto
diskretnaa edinica dannix v tablice. Naprimer, mi mojem sozdat' tablicu
tbl_news_items s polami col_title, col_date, col_fullstory, col_author. SUBD
MySQL — otli4niy vibor dla sozdania takoy bazi dannix vsledstvie prostoti v
ispol'zovanii i administrirovanii, svobodnoy rasprostranaemosti dla raznix
platform, vklu4aa Linux i Windows, i bistro rastu6ey popularnosti.
Posle etogo mi sozdadim dinami4eskie 6ablonnie stranici na HTML. 4tobi
razrabotat' prilojenia dla vzaimodeystvia s bazoy dannix i 6ablonami, mi
vospol'zuemsa azikom Perl.
Na samom dele nam neobxodimo sozdat' tri Perl-programmi, ili skripta: odin
budet otobrajat' ssilki na vse imeu6iesa press-relizi (pr-list-dbi.pl), drugoy
— soderjimoe vibrannogo press-reliza (pr-content-dbi.pl), a tretiy pozvolit nam
dobavit' svejiy press-reliz v bazu dannix (pr-add-dbi.pl). Rabotu po verstke
mojno vozlojit' na lubimiy HTML-redaktor, naprimer, Allaire HomeSite (http://www.allaire.com/).
Tol'ko pomnite, 4to pri sozdanii 6ablona neobxodimo ostavlat' pustie oblasti, v
kotorie budet vstavlat'sa dinami4eskoe napolnenie (estestvenno, peremennoy
dlini).
Posle razrabotki ob6ego dizayna dla svoix press-relizov prosto vstav'te v
ukazannie vi6e pustie oblasti special'nie klu4evie slova (sm. ob etom nije).
Kak tol'ko pol'zovatel' zaprosit kakoy-libo press-reliz, Web-server obrabotaet
Perl-kod i zamenit klu4evie slova v 6ablonax informacionnim napolneniem,
izvle4ennim iz bazi dannix, to est' kakim-to konkretnim press-relizom.
I poslednee, 4to nujno sdelat', — zagruzit' va6i 6abloni na Web-server v
opredelennie direktorii. Mojno vospol'zovat'sa FTP-klientom CuteFTP (http://www.cuteftp.com/), no
mi predpo4itaem ispol'zovat' faylovuu obolo4ku FAR. Dve vajnie ve6i, kotorie
sleduet zapomnit': pervoe — fayli 6ablonov doljni soderjat' imena, okan4ivau6iesa
na .pl, i vtoroe — oni doljni imet' pravo na vipolnenie (v UNIX-sistemax nado
vipolnit' komandu chmod 0755 ima_6ablona.pl). Eto vse!
Dobavlenie funkcional'nosti
Ne predstavlaet osobix slojnostey dobavlenie funkcional'nix vozmojnostey k
mexanizmu publikacii press-relizov. Mojno otsortirovat' ssilki na dostupnie v
baze dannix press-relizi po date ili nazvaniu, gruppirua ix po godam. Ili,
naprimer, vi zaxotite otobrazit' slu4ayniy press-reliz na va6ey Web-stranice,
vrema ot vremeni predostavlaa ego informaciu posetitelam nezavisimo ot togo,
kogda on bil real'no opublikovan. No skoree vsego samoy vajnoy i poleznoy
funkcional'nost'u budet dobavlenie HTML-formi dla vvoda soderjimogo
press-reliza i razrabotki CGI-programmi na Perl v celax obrabotki etoy formi i
posleduu6ego razme6enia dokumenta v baze dannix. Napomnim, 4to CGI (Common
Gateway Interface) — protokol, mexanizm, ili formal'noe sogla6enie mejdu
Web-serverom i otdel'noy programmoy. Server kodiruet vxodnie dannie, naprimer
HTML-formi, a programma CGI dekodiruet ix i generiruet potok vixodnix dannix. V
specifikacii protokola ni4ego ne skazano o kakom-libo opredelennom azike
programmirovania. Poetomu programmi, sootvetstvuu6ie etomu protokolu, mogut
bit' napisani prakti4eski na lubom azike — na C, C++, Visual Basic, Delphi,
Tcl, Python ili, kak v na6em slu4ae, na Perl.
Podvedem nekotorie itogi. Nadeemsa, 4to eta stat'a pomojet vam ocenit'
preimu6estva koncepcii dinami4eskix Web-stranic pered stati4eskimi. Primenenie
dannoy koncepcii privedet k sokra6eniu ru4noy raboti, pomojet raspredelit'
rabo4uu nagruzku servera i pozvolit bistro uveli4it' koli4estvo informacionnogo
napolnenia sayta. Kombinacia iz Apache, MySQL i Perl predostavit prakti4eski
besplatnuu, prostuu v ispol'zovanii, gibkuu v ustanovke i nastroyke
kross-platformennuu i mas6tabiruemuu sredu razrabotki. Zdes' mi ne budem
rassmatrivat' osobennosti ix ustanovki, tak kak, vo-pervix, na eto poprostu ne
xvatit mesta, otvedennogo dla dannoy stat'i, a vo-vtorix, kajdoe iz etix
sredstv postavlaetsa vmeste s ves'ma podrobnoy dokumentaciey.
Sozdanie bazi dannix v SUBD MySQL
Razrabotka modeli bazi dannix
Pervim i naibolee vajnim deystviem pri sozdanii bazi dannix avlaetsa
razrabotka ee modeli. Itak, pristupaem.
6ag 1
Nam nujno kak-to nazvat' bazu dannix. Nazovem ee db_website.
6ag 2
Neobxodimo opredelit', 4to imenno budut soderjat' tablici bazi dannix. V BD
mogut vxodit' sotni tablic. Sna4ala nam potrebuetsa vsego odna tablica dla
xranenia na6ix press-relizov. Nazovem ee tbl_news_items.
6ag 3
Sleduet opredelit' pola, kotorie budet soderjat' na6a tablica. Eti pola
budut avlat' soboy vse elementi press-reliza. V na6em primere ispol'zuutsa pat'
poley: col_id (4islovoy identifikator press-reliza), col_title (nazvanie),
col_date (data publikacii), col_fullstory (soderjimoe), col_author (ima
avtora). Pole col_id budet soderjat' unikal'niy identifikator, po kotoromu
pol'zovatel' smojet zapra6ivat' soderjimoe opredelennogo press-reliza.
Sozdanie bazi dannix
Teper' nam neobxodimo ustanovit' soedinenie s SUBD MySQL i sozdat' na6u bazu
dannix. Nije mi pokajem, kak sdelat' eto iz komandnoy stroki. Odnako su6estvuet
mnojestvo sistem upravlenia, ili menedjerov SUBD MySQL, kotorie pozvolaut
administrirovat' ee, ispol'zua drujestvenniy grafi4eskiy interfeys.
Prejde vsego vam obazatel'no sleduet znat' osnovi azika zaprosov SQL
(Structured Query Language). V postavku SUBD MySQL vxodit polnoe opisanie
podderjivaemoy specifikacii SQL. Etot azik neslojen dla postijenia, poskol'ku
ego operatori i ix konstrukcii legko ponat' i zapomnit'. Dla raboti vam
potrebuutsa operatori sozdania (CREATE ili INSERT), viborki (SELECT) i udalenia
(DROP ili DELETE) dannix, a takje ix izmenenia (UPDATE, MODIFY). V konkretnix
primerax mi vospol'zuemsa tol'ko nekotorimi iz nix.
4tobi ne rassmatrivat' ustanovku pol'zovatel'skix u4etnix zapisey (user
accounts) i nazna4enie neobxodimix prav dostupa, predpolojim, 4to vi
ispol'zuete u4etnuu zapis' administratora (root).
6ag 1
Otkroyte terminal'noe okno (esli vi rabotaete v grafi4eskoy obolo4ke X
Window OS Linux ili v OS Windows 9x/NT/2000) i ustanovite soedinenie s SUBD
MySQL, vveda v komandnoy stroke mysql. V otvet vi doljni polu4it' prigla6enie
dla vvoda komand mysql>.
6ag 2
Sozdadim na6u bazu dannix, vveda:
CREATE DATABASE db_website;
Posle vvoda kajdoy komandi ne zabivayte pe4atat' simvol (;). On o4en' vajen,
poskol'ku posilaet MySQL signal konca vvoda komandi.
6ag 3
Dalee neobxodimo poslat' komandu, ukazivau6uu sisteme MySQL, kakuu konkretno
bazu dannix mi sobiraemsa ispol'zovat'. Vvedite:
use db_website;
6ag 4
Sozdadim tablicu tbl_news_items, gde opredelim tip dannix, kotorie budut
xranit'sa v ee polax. Vvedite:
1. CREATE TABLE tbl_news_items ( 2. col_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 3. col_title VARCHAR(100), 4. col_author VARCHAR(100), 5. col_body TEXT, 6. col_date DATE 7. );
6ag 5
Teper', kogda mi sozdali tablicu dla xranenia na6ix dannix, nam nujno
zapolnit' ee kakimi-to primernimi dannimi. Zamet'te, 4to v nijesleduu6ey
komande mi ne budem opredelat' pole col_id, potomu 4to ono zapolnaetsa
avtomati4eski po mere dobavlenia novix dannix. Takje imeyte v vidu, 4to
sintaksis dla dati — <god/mesac/den'>. Itak, v komandnoy stroke mysql>
vvedite sleduu6uu komandu.
8. INSERT INTO tbl_news_items (col_title, _ col_author, col_body, col_date) 9. VALUES ( 10. ‘Moy perviy press-reliz’, 11. ‘Va6e Ima’, 12. ‘Etot press-reliz xranitsa v BD MySQL’, 13. ‘2001/4/15’ 14. );
Vvedite e6e neskol'ko podobnix zaprosov dla vstavki. 4tobi prosmotret' to,
4to xranitsa v baze dannix, v komandnoy stroke mysql> vvedite:
SELECT * FROM tbl_news_items;
Sozdanie dinami4eskix Web-stranic na Perl
Podgotovka k rabote
Dla zapuska Perl-programm ponadobitsa interpretator Perl versii 5.005 ili
5.6 distributivov Perl Standard ili ActiveState Perl dla UNIX ili Win32. Esli
vi budete zanimat'sa razrabotkoy prilojeniy dla funkcionirovania pod Win32, to
paket ot ActiveState neskol'ko udobnee v ispol'zovanii, k tomu je v nego vxodit
utilita PPM dla ustanovki dopolnitel'nix moduley.
Dla organizacii vzaimodeystvia na6ix Perl-programm s SUBD MySQL neobxodimo,
4tobi v postavku Perl vxodil modul' DBI. Poskol'ku modul' v osnovnom ni4ego sam
ne delaet, a perekladivaet vse operacii po vzaimodeystviu s bazami dannix na
sootvetstvuu6iy im drayver, to trebuetsa ustanovka biblioteki DBD-Mysql
(drayver k BD MySQL dla modula DBI). Kak zaavil Tim B'uns (Tim Bunce), avtor i
razrabot4ik ukazannogo modula, «DBI — eto API-interfeys dla organizacii dostupa
k bazam dannix iz Perl-programm. Specifikacia DBI API opredelaet nabor funkciy,
peremennix i pravil, ispol'zuemix dla prozra4nogo interfeysa s bazami dannix».
Koncepcia drayverov baz dannix ves'ma udobna, poskol'ku v svoem
Perl-prilojenii vi ispol'zuete standartnie dla DBI vizovi, kotorie zatem
pereadresuutsa moduli sootvetstvuu6emu drayveru, a tot, v svou o4ered', uje
napramuu budet vzaimodeystvovat' s BD, ne trebua ot vas izu4enia texni4eskix
osobennostey kajdoy konkretnoy SUBD. Takim obrazom, su6estvuut drayveri
DBD::Sybase, DBD::Oracle, DBD::Informix i t.d. (ris. 1, 2).
Ris. 1. Arxitektura DBI
Ris. 2. Potok dannix 4erez
interfeys DBI
Nemnogo viydem za ramki tematiki stat'i. Dopustim, 4to v postavku DBI ne
vxodit drayver dla specifi4eskoy SUBD. V dannom slu4ae na pomo6' pridet most
DBD-ODBC. Dostato4no sozdat' noviy isto4nik dannix (Data Source Name) dla
drayvera ODBC (Open DataBase Connectivity), gde nujno vibrat' tip etoy SUBD,
adres xosta, po kotoromu nado ustanovit' soedinenie, ima bazi dannix i
avtorizacionnie dannie, to est' ima pol'zovatela i parol' (ris. 3). I zatem,
ispol'zua modul' DBI, vzaimodeystvovat' s bazoy dannix. Krome togo, kak
pravilo, v standartnuu postavku ActiveState Perl vxodit modul' Win32::ODBC
(Win32-ODBC). Rabota s nim nemnogo otli4aetsa ot raboti s DBI, no v celom o4en'
poxoja. Raznica li6' v tom, 4to Win32::ODBC — modul' tol'ko dla Win32-sistem i
pozvolaet rabotat' s «rodnimi» funkciami ODBC bolee effektivno, 4em DBD::ODBC.
Ris. 3. Dobavlenie novogo
isto4nika dannix 4erez ODBC-administrator
Mejdu ODBC i DBI mojno provesti parallel'. DBI — eto analog ODBC
Administrator (menedjera drayverov baz dannix). Kajdiy DBD-drayver po svoim
funkciam sootvetstvuet ODBC-drayveru. Mojet smutit' li6' tot fakt, 4to
su6estvuet, kak govorilos' vi6e, drayver DBD::ODBC. No on vsego li6' pozvolaet
ustanovit' svaz' DBI s ODBC-drayverami.
Dla ustanovki DBI i DBD-Mysql, s pomo6'u utiliti PPM v srede Win32 vvedite v
komandnoy stroke:
ppm install DBI
Obratite vnimanie, 4to v etot moment va6 komp'uter doljen bit' podklu4en k
Internetu. Esli je sootvetstvuu6iy modul' imeetsa u vas na lokal'nom diske,
vospol'zuytes' spravo4noy informaciey, vveda komandu:
ppm help install
Dla pol'zovateley UNIX-sistem ustanovka modula DBI budet proxodit' prakti4eski
tak je, kak i ustanovka drugix Perl-moduley:
tar –zxvf DBI-1.06.tar.gz cd DBI-1.06/ perl Makefile.PL make make test make install
Mojno takje vospol'zovat'sa obolo4koy CPAN. Esli je na va6em komp'utere
ustanovlena UNIX-versia paketa ot ActiveState, to mojno rabotat' i s
ustanovo4noy utilitoy PPM. Inogda bivaet, 4to obolo4ki CPAN i PPM ne
funkcioniruut, esli v seti predpriatia, k kotoroy podklu4en va6 komp'uter,
ustanovlen brandmauer, ili setevoy ekran (firewall). V dannom slu4ae vam
pomogut tol'ko moduli s isxodnimi tekstami, zagrujennie vru4nuu. Dla ix
ustanovki i podklu4enia k Perl ili Apache potrebuetsa interpretator Perl,
kompilator C/C++ ili GCC/PGCC i kakaa-libo iz utilit-sbor6ikov make (iz
postavki odnogo iz klonov UNIX, a takje Microsoft Visual C++), nmake ili dmake.
Takim obrazom, procedura ustanovki moduley neskol'ko uslojnaetsa. Po4ti s
kajdim iz nix postavlaetsa dokumentacia po «sborke», blagodara kotoroy u vas ne
doljno vozniknut' osobix trudnostey.
Vivod spiska statey
Teper', kogda u vas est' rabotau6aa baza dannix s press-relizami, mojno bez
osobix problem podklu4it' ee k Web-stranice. Na4nem s sozdania prostey6ey
stranici, kotoraa otobrajaet spisok vsex imeu6ixsa press-relizov. Zamet'te, 4to
po umol4aniu Web-server Apache «dumaet'», 4to vse va6i dokumenti doljni
naxoditsa v ego direktorii htdocs, a ispolnaemie fayli — v cgi-bin.
Sledovatel'no, neobxodimo pomestit' vse fayli s ras6ireniem .pl v katalog
cgi-bin. V svou o4ered', sozdavaemie fayli HTML-6ablonov nujno razmestit' v
kataloge tpl. Ierarxia katalogov budet vigladet' sleduu6im obrazom:
/ (koren' lubogo diska) /local /local/usr /local/usr/bin /local/usr/cgi-bin /local/usr/htdocs /local/usr/tpl
Dla sistem DOS/Windows put' k cgi-bin mojet vigladet' tak:
c:localusrcgi-bin
6ag 1
Ispol'zua svoy lubimiy tekstoviy redaktor, sozdayte fayl pr-list-tpl.htm:
15. 16. 17. 18. 19. 20. @BLOCK@ 21. 22.
Etot fayl prednazna4en dla otobrajenia spiska vsex dostupnix press-relizov.
6ag 2
Sozdayte fayl pr-list-block-tpl.htm, kotoriy budet otobrajat' kajdiy blok s
naydennim press-relizom v vide tablici:
23. "2" cellspacing="1"> 24. 25. 26.
6ag 3
Sozdayte fayl pr-content-tpl.htm, kotoriy budet otobrajat' soderjanie
press-reliza:
27. 28. 29. 30. 31. 32. @TITLE@ 33. 34. 35. 36. 37. @TITLE@ |
---|
Author: @AUTHOR@ Date: @DATE@ | @BODY@ |
38. Show the list of press-releases.. 39. 40.
6ag 4
Sozdayte Perl-skript pr-list-dbi.pl, kotoriy budet 4itat' dannie iz bazi
dannix db_website i, ispol'zua 6ablonnie HTML-fayli, otobrajat' spisok
press-relizov (tekst etogo skripta vi smojete nayti na na6em kompakt-diske).
A teper' proydemsa po listingu koda i rassmotrim, kak rabotaet programma
vivoda spiska press-relizov.
Stroki 1-9 predstavlaut soboy kak bi inicializiruu6iy blok, v kotorom
ob&avlautsa vse global'nie peremennie i konstanti:
41. #!/local/usr/bin/perl 42. 43. use DBI; 44. $dbh = DBI->connect(‘dbi:mysql:db_website’,’root’,’’); 45. $path = "/local/usr/tpl"; 46. $TPL_LIST = "$path/pr-list-tpl.htm"; 47. $TPL_LIST_BLOCK = "$path/pr-list-block-tpl.htm"; 48. 49. print "Content-type:text/htmlnn";
Sperva mi soob6aem Web-serveru Apache put', ukazivau6iy, gde naxoditsa
interpretator Perl, kotoriy zapuskaetsa pri zaprose skripta, proveraet ego na
o6ibki i zatem vipolnaet ego. Dalee mi ob&avlaem modul' DBI (DataBase
Interface), metodi kotorogo budut ispol'zovat'sa v programme dla vzaimodeystvia
s bazoy dannix (stroka 3). Zatem mi ustanavlivaem soedinenie s na6ey bazoy
dannix db_website (4), ukazivaa v ka4estve vxodnogo imeni pol'zovatela root
(administrator), a v ka4estve parola pustuu stroku (zna4enie, prinatoe po
umol4aniu). V peremennoy $path ukazivaem put', po kotoromu naxodatsa fayli
HTML-6ablonov (5). V peremennix $TPL_LIST i $TPL_LIST_BLOCK sootvetstvenno
ukazivaem ix imena (6, 7). Potom, soob6aem Web-serveru, 4to vse isxoda6ie
dannie doljni predstavlat'sa v MIME-formate text/html dla vivoda HTML-potoka v
pol'zovatel'skiy brauzer (9).
Stroki 11-22 predstavlaut soboy telo programmi:
50. 51. open (L, "$TPL_LIST"); 52. while ($line1=) { 53. chomp($line1); 54. if ($line1=~/@BLOCK@/) { 55. read_db(); 56. ins_data(); 57. } else { 58. print "$line1n"; 59. } 60. } 61. close(L); 62. 63. $dbh->disconnect;
Otkrivaem fayl-6ablon pr-list-tpl.htm (11) i v cikle (12-20) prosmatrivaem
ego, zapisivaa kajduu s4itannuu stroku v peremennuu $line. Vo vrema kajdoy
iteracii proizvodim proverku na nali4ie v etoy stroke klu4evogo slova @BLOCK@
(14-19), ozna4au6ego, 4to v dannom meste nado vstavit' blok s press-relizom.
Kak tol'ko ono naydeno, vizivaem proceduri read_db() i ins_data().
Stroki 26-39 — telo proceduri read_db(), prednazna4ennoy dla s4itivania
soderjimogo tablici tbl_news_items, v kotoroy xranatsa na6i press-relizi:
64. 65. 66. sub read_db { 67. $c=0; 68. my($sql) = "SELECT * FROM tbl_news_items"; 69. $rs = $dbh->prepare($sql); 70. $rs->execute; 71. while (my $ref = $rs->fetchrow_hashref()) { 72. $id[$c] = "$ref->{‘col_id’}"; 73. $title[$c] = "$ref->{‘col_title’}"; 74. $author[$c] = "$ref->{‘col_author’}"; 75. $date[$c] = "$ref->{‘col_date’}"; 76. $c++; 77. } 78. $rs->finish(); 79. }
Inicializiruem s4et4ik $c=0, sostavlaem zapros viborki vsex dannix iz
tablici (28), vipolnaem zapros (29, 30) i polu4aem dannie v rekordset
(recordset — nabor zapisey) $rs. Zatem v cikle (31-37) izvlekaem dannie iz
rekordseta, ispol'zua metod fetshrow_hashref i vozvra6aa ssilku na
associativniy massiv %ref (31), soderja6iy imena i zna4enia poley teku6ey
zapisi. Zapisivaem izvle4ennie dannie (32-35) v sootvetstvuu6ie ix tipam
obi4nie massivi @id, @title, @author i @date. Zakrivaem rekordset (38).
Stroki 41-53 — telo proceduri ins_data(), realizuu6ey vstavku izvle4ennix iz
BD dannix v isxoda6iy potok dannix; stroki 55-63 — telo proceduri pr_block(),
vizivaemoy v cikle iz proceduri ins_data():
80. 81. sub ins_data { 82. $toread = "pr-read-dbi.pl"; 83. for ($i=0; $i<$c; $i++) { 84. $line = &pr_block; 85. 86. $line =~ s/@NUMBER@/$id[$i]/; 87. $line =~ s/@TITLE@/$title[$i]/; 88. $line =~ s/@AUTHOR@/$author[$i]/; 89. $line =~ s/@DATE@/$date[$i]/; 90. $line =~ s/@READ@/$toread/; 91. print "$line"; 92. } 93. } 94. 95. sub pr_block { 96. my($block) = ‘’; 97. open (B, "$TPL_LIST_BLOCK"); 98. while ($line=) { 99. $block = $block.$line; 100. } 101. close(B); 102. return ($block); 103. }
Itak, polu4iv v rezul'tate vipolnenia proceduri read_db() maksimal'noe
zna4enie s4et4ika $c, v cikle (43-52) mi zapuskaem proceduru pr_block(),
kotoraa 4itaet soderjimoe HTML-6ablona pr-list-block-tpl.htm i zapisivaet ego v
peremennuu $block (59), zna4enie kotoroy zatem vozvra6aetsa (62) v peremennuu
$line (44) proceduri ins_data(). Dalee v etom je cikle mi zamenaem (46-50)
naydennie v isxoda6em potoke $line klu4evie slova @NUMBER@, @TITLE@, @AUTHOR@,
@DATE@, @READ@ na sootvetstvuu6ie dannoy iteracii cikla ($i) zna4enia massivov
@id, @title, @author, @date i peremennoy $toread.
Vivod teksta press-reliza
Posle togo kak mi viveli spisok vsex imeu6ixsa v baze dannix press-relizov
(ris. 4), nujno dat' pol'zovatelu vozmojnost' prosmotret' tekst kakogo-nibud'
iz nix (sootvetstvuu6iy skript vi takje smojete nayti na na6em kompakt-diske).
Ris. 4.
Noviy skript pr-read-dbi.pl budet nezna4itel'no otli4at'sa ot uje sozdannogo
nami pr-list-dbi.pl.
Danniy listing na 98% poxodit na listing 1, xota, imeet nekotorie
nezna4itel'nie otli4ia:
- podklu4ena biblioteka CGI
dla s4itivania parametra id (9) iz stroki zaprosa (naprimer,
http://localhost/cgi-bin/pr-content-dbi.pl?id=1);
- primenaetsa vsego odin
HTML-6ablon (pr-content-tpl.htm);
- zapros k baze dannix
dopolnen uslovnim SQL-operatorom WHERE dla viborki vsex dannix,
sootvetstvuu6ix opredelennomu press-relizu po identifikatoru col_id;
- iz BD takje s4itivaetsa
pole col_body s tekstom vibrannogo press-reliza.
Sozdanie novogo press-reliza
Ras6irim funkcional'nost' na6ey sistemi, dobaviv vozmojnost' sozdania novix
press-relizov, bez neobxodimosti neposredstvennoy raboti s bazoy dannix dla
popolnenia tablici tbl_news_items novoy informaciey.
Itak, novaa Perl-programma (kotoraa, kak i predidu6ie dve, naxoditsa na
kompakt-diske) budet otli4at'sa ot predidu6ix prejde vsego tem, 4to
prednazna4ena ne dla otobrajenia dannix, a dla ix dobavlenia v BD.
Sledovatel'no, mi doljni neskol'ko izmenit' 4ast', otve4au6uu za vzaimodeystvie
s BD, primeniv SQL-zapros INSERT i sootvetstvuu6ie emu operatori modula DBI.
Stroki 12-18 — eto telo osnovnoy programmi:
12. if ($cmd ne "add") { 13. &show_form; 14. } else { 15. $dbh = DBI->connect(‘dbi:mysql:db_website’, _ ’root’,’’); 16. &add_pr; 17. dbh->disconnect; 18. }
Zdes' mi proveraem, postupila li komanda na dobavlenie press-reliza v bazu
dannix. Kak tol'ko ona postupila, ustanavlivaem soedinenie s BD (15), vipolnaem
podprogrammu app_pr() (16) i zaver6aem soedinenie (17). Esli je komandi ne
bilo, to prosto otobrajaem formu zapolnenia (13) dla dannix press-reliza —
procedura show_form().
Stroki 20-36 — eto telo proceduri dobavlenia press-reliza pr_add():
19. 20. sub add_pr { 21. $title = $q->param("pr_title"); 22. $author = $q->param("pr_author"); 23. $body = $q->param("pr_body"); 24. $body =~ s/rn/ /g; 25. 26. my($sql) = "INSERT INTO tbl_news_items (col_title,col_author,col_body,col_date) VALUES (’$title’,’$author’,’$body’,CURDATE())"; 27. $rs = $dbh->do($sql); 28. 29. if ($@) { 30. $rc = $dbh->rollback; 31. } else { 32. $rc = $dbh->commit; 33. } 34. 35. print "Location: /cgi-bin/pr-list-dbi.plnn"; 36. }
Sperva obrabativaem dannie formi (22-25), sostavlaem SQL-zapros (27) i
vipolnaem ego (27) s pomo6'u DBI-metoda $dbh->do(). Poskol'ku zdes'
proizvoditsa procedura vstavki dannix v BD, to nujno pozabotit'sa o vozmojnosti
otmeni operacii v slu4ae sboev. Dla etogo mi vstavili kod otmeni tranzakcii i
otkata v predidu6ee sostoanie (30-34). Pri sboe pri vipolnenii $dbh->do()
otmenaem sdelannie izmenenia (31). Esli je sboa ne proizo6lo, to podtverjdaem
sdelannie izmenenia (33). Dalee posle vsex deystviy prosto perexodim na
stranicu so spiskom vsex press-relizov (36).
Stroki 37-55 — eto telo proceduri vivoda formi dla vvoda informacii o novom
press-relize (ispol'zuetsa HTML-6ablon, ima kotorogo zadano v peremennoy
$TPL_INSERT, pr-add-tpl.htm):
37. 38. sub show_form { 39. print "Content-type:text/htmlnn"; 40. 41. open (L, "$TPL_INSERT"); 42. while ($line=) { 43. chomp($line); 44. if ($line=~/@/) { 45. if ($line=~/@ADD@/) { 46. $toadd = "pr-add-dbi.pl"; 47. $line =~ s/@ADD@/$toadd/; 48. } else { 49. $tolist = "pr-list-dbi.pl"; 50. $line =~ s/@LIST@/$tolist/; 51. } 52. } 53. print "$linen"; 54. } 55. close(L);
Peregruzka sistemi
Poskol'ku vi razrabativaete dinami4eskiy Web-sayt, to sootvetstvenno
koli4estvo informacii na nem mojet rasti ves'ma bistro. Krome togo, po mere
rosta popularnosti va6ego resursa rastet i 4islo ego posetiteley, 4to mojet
privesti k peregruzkam servera, to est' k ponijeniu proizvoditel'nosti sistemi.
Pered tem kak na4at' poiski putey uveli4enia mo6nosti apparatnix sredstv i
pitat'sa nayti konfiguraciu novoy sistemi, mojno poprobovat' ustranit' odnu iz
vozmojnix pri4in 4rezmernogo potreblenia operativnoy pamati. Vinovnikom mojet
okazat'sa tot je Perl. Delo v tom, 4to kajdiy raz pri obra6enii k tomu ili
inomu Perl-skriptu, Web-server zagrujaet interpretator v operativnuu pamat' (on
zanimaet ot 500-1000 Kbayt na jestkom diske), a posledniy razbiraet programmu
ot na4ala do konca v poiskax sintaksi4eskix o6ibok. Posle etogo on vnov' 4itaet
ee, inicializirua peremennie i funkcii, s4itivaet vvodimie dannie (parametri),
obrabativaet i vozvra6aet rezul'tati. Predstavlaete, 4to proisxodit, esli
odnovremenno press-relizi xotat prosmotret' sotni posetiteley va6ego sayta?
Dla uskorenia etogo processa sozdani special'nie re6enia, predstavlau6ie
soboy dopolnitel'nie moduli dla Web-servera Apache — mod_fastcgi i mod_perl.
Modul' FastCGI (mod_fastcgi) predpolagaet 6irokoe primenenie sredstv obmena
dannimi mejdu rabotau6imi processami (zada4ami) operacionnoy sistemi. V na4ale
svoey raboti Web-server aktiviruet CGI-programmu i ostavlaet etu programmu i
neskol'ko ee kopiy rabotau6imi v fonovom rejime. Lubie zaprosi k programme
budut prosto peredani uje aktivnim kopiam, 4to izbavit server ot dopolnitel'noy
nagruzki, svazannoy s povtornoy aktivaciey processa.
Modul' mod_perl pozvolaet zagruzit' Perl v operativnuu pamat' v to je
adresnoe prostranstvo, 4to i sam Web-server Apache, i ostavit' Perl v pamati do
zaver6enia raboti poslednego, ne pozvolaa zagrujat' o4erednuu kopiu
interpretatora pri obra6enii k CGI-programme. Etot modul' primenaetsa 4a6e, 4em
FastCGI, poskol'ku ne trebuet nikakix izmeneniy v programme.
Dopolnitel'naa informaci
Apache
Apache pozicioniruetsa na rinke kak mo6niy i gibkiy Web-server, sovmestimiy
so standartom HTTP/1.1. Primerno 60% vsex Web-serverov v Internete
funkcioniruut pod upravleniem Apache. Funkcional'nost' Apache mojno legko
uveli4it', ustanoviv svobodno rasprostranaemie moduli ras6irenia. Isxodnie kodi
etogo Web-servera dostupni prakti4eski dla luboy platformi. E6e odnoy ego
poleznoy osobennost'u avlaetsa tot fakt, 4to Apache pozvolaet rabotat' s
mnojestvom azikov programmirovania, a takje zagrujat' nekotorie iz nix v svoe
adresnoe prostranstvo, uveli4ivaa takim obrazom skorost' vzaimodeystvia
Internet-pol'zovatela s sistemoy.
MySQL
MySQL — kross-platformennaa sistema upravlenia relacionnimi bazami dannix
(RDBMS, Relational DataBase Management System) s ispol'zovaniem azika zaprosov
SQL (Structured Query Language). Sna4ala MySQL, kak i Apache i daje Perl,
vipuskalas' tol'ko v versii dla UNIX-sistem, poetomu do six por soxranaet
interfeys komandnoy stroki. Odnako za poslednee vrema vipu6eno ogromnoe
koli4estvo grafi4eskix menedjerov, kotorie obleg4aut zada4i administrirovania.
Krome togo, v postavku MySQL dla Linux i Windows vxodit menedjer, grafi4eskiy
interfeys kotorogo sxoj s tem, 4to ispol'zuet okonniy menedjer KDE v obolo4ke X
Window OS Linux.
Perl, ili PERL
PERL (Practical Extraction and Report Language) — azik, kotoriy bil
razrabotan glavnim obrazom dla sintaksi4eskoy obrabotki teksta. Odnako v
poslednie neskol'ko let blagodara novim i modulam ras6irenia, on primenaetsa ne
tol'ko kak tekstoviy obrabot4ik, no i kak mo6niy instrument razrabotki
Internet/Intranet-prilojeniy i Web-robotov. Interpretator Perl postavlaetsa,
kak pravilo, vmeste s isxodnimi kodami, kotorie mogut bit' skompilirovani
prakti4eski na luboy platforme — DOS, OS/2, UNIX ili Windows.
Poleznie ssilki
Apache:
http://www.apache.ru/
http://apache.lexa.ru/
http://www.apache.org/
MySQL:
http://www.mysql.com/
http://www.mysql.ru/
Perl:
http://www.perl.org/
http://www.perl.com/
http://perl.oreilly.com/
http://www.activestate.com/
ftp://ftp.activestate.com/
http://www.cpan.org/
http://www.perl.ru/ citforum.ru/internet/articles/dyn_web.shtml Mixail Evdokimov Komp'uterPress
|