www.romver.ru
/ / Web-



( )

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. 
"/cgi-bin/@READ@?id=@NUMBER@">@TITLE@
@AUTHOR@, _
@DATE@

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

3
  ,
:
. +7(98I) 7608865

e-mail
icq 415547094  romver  mail.ru  romverinbox.ru
1997 - 2022 romver.ru

Display Pagerank