Acces Distant Dialogat In Internet
Introducere
În timpul de astăzi progresul tehnico-științific își are pași gigantici și a fi la curent și în rând cu toate tehnologiile noi apărute înseamnă a avea un venit din toate punctele de vedere ale acestui cuvânt.
În ultimii ani ai deceniului IX sec.XX dezvoltarea tehnologiilor informaționale din întreaga lume a cunoscut o direcție fundamental nouă cu apariția rețelei globale de calculatoare Internet. Prin intermediul acestei rețele sunt posibile orice tip de comunicații și schimb de informație : de la informație textuală până la video clipuri și videoconferințe în timp real. Iar informația este un fundament al tuturor valorilor create ulterior de către om în activitățile sale. Pe parcursul dezvoltării rețelei Internet, în cadrul ei a apărut serviciul World Wide Web (păiangenișul mondial WWW) cu ajutorul căruia se poate călători prin lumea întreagă în căutarea informației prin intermediul hyperlegăturilor între diferite documente (numite ancore). Însă, cu timpul, consultarea simplă a documentelor, referințele la care existau, nu îndestula necesitățile utilizatorilor. Uneori, pentru a determina locul, unde se află un document necesar trebuia de pierdut zile întregi. Din această cauză în dezvoltarea WWW a apărut o nouă direcție : Seviciile distant-dialogate.
Datorită acestor servicii căutarea informației prin Internet a devenit cu mult mai ușoară și comodă.
În cadrul acestei lucrări se efectuiază analiza tehnologiilor de acces distant – dialogat prin Internet.În particular se analizează tehnologiile CGI-BIN și ISAPI, care sunt folosite de majoritatea programatorilor din întreaga lume și sunt recunoscute ca cele mai efective.
Ca realizare practică a analizei din cadrul acestei lucrări se elaborează o aplicație de consultare distant-dialogată prin Internet a Legislației Republicii Moldova.
1 ANALIZA SARCINII
1.1 Evoluția Internet
În ziua de 2 ianuarie 1969 conducerea SUA a pus început existenței rețelei globale de calculatoare Internet. Această rețea își ia începutul din proiectul de cercetări științifice în domeniul comunicațiilor- ARPA(Advansed Research Projects Agency),care mai apoi a primit denumirea- DARPA(Defence Advansed Research Projects Agency).
Prima denumire a Internet-ului a fost ARPAnet(de la ARPA).La început ARPAnet avea în componența sa numai patru calculatoare și era destinată demonstrării posibilităților dezvoltării rețelelor de calculatoare aflate la distanțe destul de mari una de alta. În anul 1972, când pentru prima dată au fost demonstrate posibilitățile rețelei ARPAnet, la ea au fost unite 50 de Universități și Departamente de cercetare (majoritatea din care lucrau asupra unor proiecte militare). Una din destinațiile ARPAnet era cercetarea rețelelor distribuite de calculatoare. Instituțiile militare se stăruiau să asigure fiabilitate maximă rețelei. ARPAnet avea destinația transportării informației între calculatoare prin intermediul unei linii de legătură fiabilă și flexibilă.
ARPAnet trebuia să funcționeze și în cazul pierderii legăturii directe. Pentru mărirea fiabilității a fost creată o schemă de marșrutizare alternativă între calculatoarele rețelei.
Calculatoarele trebuiau să posede posibilitatea de a transmite informația prin intermediul oricărei căi accesibile. Cu timpul la ARPAnet au fost unite mai multe Universități și alte instituții. În rezultat prin intermediul ARPAnet circula numai informație științifică. Atunci conducerea SUA a creat o rețea nouă – MILnet, care se folasea numai în scopuri militare.
În 1980 Fondul Național Științific a creat rețeaua NSFnet, care includea câteva calculatoare, schimbul dintre care se efectua cu viteză maximal posibilă. Mai apoi NSFnet a intrat în componența Internet. În 1991 a fost creată rețeaua națională de cercetări științifice și învățământ NREN(National Research and Education Network), care a unit rețelele existente. În anii 80 ai sec.XX exista părerea, că Internet este pur și simplu o distracție pentru programatori. Însă în ultimii ani Internet a devenit un mediu foarte important de schimb de informație. Fără Internet viața de azi este de neînchipuit.
1.2 Suite de protocoale
Comunicarea prin Internet e bazată pe transmiterea pachetelor de mesaje similar transmiterii informației prin poșta obișnuită. Într-o rețea de calculatoare, pachetul este dat unui comutator de pachete, numit și ruter, care are un rol similar oficiului poștal și care îl transmite către destinatar. Pachetul traversează, eventual, mai multe comutatoare intermediare. Ultimul comutator livrează mesajul destinatarului.
Operațiile de dirijare a pachetelor sunt efectuate automat de rețea și respectă un set de reguli numit protocol. Rețelele de calculatoare pot folosi protocoale diferite, dar pentru a putea comunica între ele trebuie să adopte același protocol așa cum, pentru transmiterea poștei obișnuite într-un cadru internațional e necesară respectarea, în diferite țări, a aceloraș reguli de folosire a plicurilor. Rețelele din Internet folosesc protocolul IP(Internet Protocol).
Ca și sistemul poștal, IP nu asigură livrarea pachetelor, dacă în funcționarea rețelelor apar erori. Totodată, dacă un mesaj este prea lung, IP reclamă fragmentarea lui în mai multe pachete. În plus, IP face transmiterea pachetelor între calculatoarele gazdă și nu direct între programe de aplicație. Din aceste motive, protocolul IP este completat cu un altul, numit TCP(Transmission Control Protocol), care face fragmentarea și asigură transmiterea corectă a mesajelor între utilizatori. Pachetele unui mesaj sunt numerotate, putîndu-se verifica primirea lor în forma în care au fost transmise și reconstituirea mesajelor lungi formate din mai multe pachete. TCP este un protocol complicat. În unele cazuri, când se transmite un singur mesaj, suficient de mic pentru a fi conținut de un singur pachet, se poate folosi un protocol mai simplu, numit UDP(User Datagram Protocol). Ceea ce a fost descris mai sus constituie modul fundamental de lucru al rețelei. Funcțiile realizate sunt insuficiente pentru multe din necesitățile utilizatorilor. De exemplu, într-un sistem de poștă electronică sunt necesare operații suplimentare, cum ar fi:
– redactarea scrisorilor;
– păstrarea scrisorilor pentru un anumit interval de timp;
– inspectarea scrisorilor primite;
– transmiterea scrisorilor către mai mulți destinatari;
– scrierea răspunsurilor anumitor scrisori.
Operațiile menționate se derulează și ele conform unui protocol. În Internet acest protocol se numește SMTP(Simple Mail Transmission Protocol). Funcționarea lui se bazează pe serviciile oferite de protocoalele TCP și IP, cărora le adaogă funcții noi, creând servicii îmbunătățite.
Funcționarea protocoalelor TCP și IP presupune existența unei comunicări directe între noduri (rutere sau/și gazde) adiacente din rețea. Această comunicare este realizată conform unor tehnologii diverse și se supune unor protocoale specifice bine precizate. Deci, TCP și IP se bazează, la rândul lor, pe serviciile oferite de alte protocoale. Se obține, în ansamblu, o suită(ierarhie) de protocoale care depind unele de altele, dar care au ca punct central protocoalele TCP/IP. De aceea, ea este denumită suită de protocoale TCP/IP. Pentru o mai bună sistematizare, protocoalele sunt grupate pe niveluri, existând similitudini(de scop, funcții, structură etc.) între protocoalele aparținând aceluiaș nivel. Această grupare respectă principiul stratificării, care se poate enunța în felul următor: protocoalele sunt astfel proiectate încât nivelul N al destinației să primească(fără modificări) obiectul transmis de nivelul N al sursei.
Pentru respectarea acestui principiu, definiția oricărui protocol se referă la două aspecte esențiale:
formatul unităților de date manipulate;
acțiunile posibile ale entităților de protocol care concură la realizarea serviciilor specifice protocolului. În implementarea unui protocol, entitățile de protocol se materializează în module de programe sau de echipamente. Aceste module nu alcătuiesc întotdeauna o structură liniară, ca suita de protocoale.
1.3 Servicii Internet
Internet e compusă din mai multe părți componente, acestea fiind servicii de diferite tipuri și cu diferite posibilități. Cea mai mare parte din Internet o constituie informația, accesibilă prin rețea. Această informație e accesibilă datorită serviciilor, care asigură accesul la Internet. În continuare urmează numerotarea serviciilor accesibile în Internet:
World Wide Web – Lucrul cu hipertextul și multimedia.
E-mail – Poștă electronică.
Grupe de noutăți (newsgroups)- Grupe de discuții pe diferite teme.
FTP – Transmiterea fișierelor între calculatoare.
Telnet – Lucrul pe un calculator îndepărtat.
Archie – Sistem de căutare a informației, situată în fișiere și cataloage.
WAIS – Server de informație distribuită.
Gopher – Accesul la informație prin intermediul meniului.
Veronica – Sistem indexat pentru căutarea informației.
InterNIC – Serviciu informațional de rețea.
Finger – Sistem de căutare a oamenilor în Internet.
Iar acum mai concret despre fiecare serviciu în parte:
World Wide Web ( WWW sau Web) prezintă un depozit enorm de informație electronică(păstrată în formă de fișiere pe calculatoare) în întreaga lume. Cu alte cuvinte WWW prezintă milioane de documente legate între ele , care se află pe diferite calculatoare pe tot globul pământesc. Prin intermediul WWW e accesibilă informație de diferite tipuri și prezentată în diferite forme – text, grafică, audio, video (toate aceste forme de prezentare a informației se reunesc sub o noțiune – hipermedia).
Internet asigură legătura între calculatoarele lumii întregi pentru a face schimb de informație. Iar WWW prezintă un sistem comunicațional global, care organizează schimbul de date-hipermedia electronice între calculatoare în cadrul Internet.
Poșta electronică (e-mail) – este cel mai folosit serviciu din Internet. Sistemul de poștă electronică în Internet prezintă un sistem enorm în întreaga lume, care deseori e folosită pentru legătura între diferite sisteme incompatibile de poștă. Majoritatea mesajelor prezintă text simplu, însă prin intermediul poștei electronice e posibilă transmiterea mesajelor în formă de fișiere cu informație grafică, audio, video, fotografii.
FTP (file transfer protocol-protocol de transport a fișierelor)- prezintă un sistem, ce oferă posibilitatea de a copia fișiere de pe un calculator pe altul prin intermediul rețelei.
FTP ca atare prezintă un protocol împreună cu program și este unul din primele servicii Internet. FTP oferă posibilitatea copierii fișierelor de pe orice calculator din Internet cu ajutorul browser-ului Web. FTP a fost elaborat în anul 1971 anume cu scopul de transfer de fișiere între calculatoare. O proprietate pozitivă a FTP este faptul, că protocolul lucrează independent de tipul calculatorului. Programele standarde ftp asigură posibilitatea nu numai de transmitere a fișierelor, dar și de analiză a cataloagelor și a informației despre fișiere.
Telnet – este un program, ce oferă posibilitatea de a lucra la un calculator îndepărtat, (lucrând într-adevăr la calculatorul vostru), ca și cum acesta ar fi calculatorul ce se află în fața voastră. Necesitatea de a folosi Telnet poate apărea din mai multe pricini:
– Programul, ce doriți să-l lansați nu lucrează pe calculatorul dvs.
– Calculatorului dvs. nu-i ajunge resurse(memorie, viteză) pentru lansarea programului.
– Posedați fișiere ce sunt păstrate pe calculator îndepărtat și doriți să lansați un program ce folosește anume aceste fișiere.
Independent de cauza din care doriți să folosiți telnet, el oferă posibilitatea de a folosi calculatorul aflat la distanțe de sute și mii de kilometri.
Archie prezintă un sistem de căutare a informației în Internet. În Internet este accesibil un număr enorm de programe. Toate aceste programe sunt accesibile prin ftp, dar numărul lor este atât de mare, încât determ de cercetări științifice și învățământ NREN(National Research and Education Network), care a unit rețelele existente. În anii 80 ai sec.XX exista părerea, că Internet este pur și simplu o distracție pentru programatori. Însă în ultimii ani Internet a devenit un mediu foarte important de schimb de informație. Fără Internet viața de azi este de neînchipuit.
1.2 Suite de protocoale
Comunicarea prin Internet e bazată pe transmiterea pachetelor de mesaje similar transmiterii informației prin poșta obișnuită. Într-o rețea de calculatoare, pachetul este dat unui comutator de pachete, numit și ruter, care are un rol similar oficiului poștal și care îl transmite către destinatar. Pachetul traversează, eventual, mai multe comutatoare intermediare. Ultimul comutator livrează mesajul destinatarului.
Operațiile de dirijare a pachetelor sunt efectuate automat de rețea și respectă un set de reguli numit protocol. Rețelele de calculatoare pot folosi protocoale diferite, dar pentru a putea comunica între ele trebuie să adopte același protocol așa cum, pentru transmiterea poștei obișnuite într-un cadru internațional e necesară respectarea, în diferite țări, a aceloraș reguli de folosire a plicurilor. Rețelele din Internet folosesc protocolul IP(Internet Protocol).
Ca și sistemul poștal, IP nu asigură livrarea pachetelor, dacă în funcționarea rețelelor apar erori. Totodată, dacă un mesaj este prea lung, IP reclamă fragmentarea lui în mai multe pachete. În plus, IP face transmiterea pachetelor între calculatoarele gazdă și nu direct între programe de aplicație. Din aceste motive, protocolul IP este completat cu un altul, numit TCP(Transmission Control Protocol), care face fragmentarea și asigură transmiterea corectă a mesajelor între utilizatori. Pachetele unui mesaj sunt numerotate, putîndu-se verifica primirea lor în forma în care au fost transmise și reconstituirea mesajelor lungi formate din mai multe pachete. TCP este un protocol complicat. În unele cazuri, când se transmite un singur mesaj, suficient de mic pentru a fi conținut de un singur pachet, se poate folosi un protocol mai simplu, numit UDP(User Datagram Protocol). Ceea ce a fost descris mai sus constituie modul fundamental de lucru al rețelei. Funcțiile realizate sunt insuficiente pentru multe din necesitățile utilizatorilor. De exemplu, într-un sistem de poștă electronică sunt necesare operații suplimentare, cum ar fi:
– redactarea scrisorilor;
– păstrarea scrisorilor pentru un anumit interval de timp;
– inspectarea scrisorilor primite;
– transmiterea scrisorilor către mai mulți destinatari;
– scrierea răspunsurilor anumitor scrisori.
Operațiile menționate se derulează și ele conform unui protocol. În Internet acest protocol se numește SMTP(Simple Mail Transmission Protocol). Funcționarea lui se bazează pe serviciile oferite de protocoalele TCP și IP, cărora le adaogă funcții noi, creând servicii îmbunătățite.
Funcționarea protocoalelor TCP și IP presupune existența unei comunicări directe între noduri (rutere sau/și gazde) adiacente din rețea. Această comunicare este realizată conform unor tehnologii diverse și se supune unor protocoale specifice bine precizate. Deci, TCP și IP se bazează, la rândul lor, pe serviciile oferite de alte protocoale. Se obține, în ansamblu, o suită(ierarhie) de protocoale care depind unele de altele, dar care au ca punct central protocoalele TCP/IP. De aceea, ea este denumită suită de protocoale TCP/IP. Pentru o mai bună sistematizare, protocoalele sunt grupate pe niveluri, existând similitudini(de scop, funcții, structură etc.) între protocoalele aparținând aceluiaș nivel. Această grupare respectă principiul stratificării, care se poate enunța în felul următor: protocoalele sunt astfel proiectate încât nivelul N al destinației să primească(fără modificări) obiectul transmis de nivelul N al sursei.
Pentru respectarea acestui principiu, definiția oricărui protocol se referă la două aspecte esențiale:
formatul unităților de date manipulate;
acțiunile posibile ale entităților de protocol care concură la realizarea serviciilor specifice protocolului. În implementarea unui protocol, entitățile de protocol se materializează în module de programe sau de echipamente. Aceste module nu alcătuiesc întotdeauna o structură liniară, ca suita de protocoale.
1.3 Servicii Internet
Internet e compusă din mai multe părți componente, acestea fiind servicii de diferite tipuri și cu diferite posibilități. Cea mai mare parte din Internet o constituie informația, accesibilă prin rețea. Această informație e accesibilă datorită serviciilor, care asigură accesul la Internet. În continuare urmează numerotarea serviciilor accesibile în Internet:
World Wide Web – Lucrul cu hipertextul și multimedia.
E-mail – Poștă electronică.
Grupe de noutăți (newsgroups)- Grupe de discuții pe diferite teme.
FTP – Transmiterea fișierelor între calculatoare.
Telnet – Lucrul pe un calculator îndepărtat.
Archie – Sistem de căutare a informației, situată în fișiere și cataloage.
WAIS – Server de informație distribuită.
Gopher – Accesul la informație prin intermediul meniului.
Veronica – Sistem indexat pentru căutarea informației.
InterNIC – Serviciu informațional de rețea.
Finger – Sistem de căutare a oamenilor în Internet.
Iar acum mai concret despre fiecare serviciu în parte:
World Wide Web ( WWW sau Web) prezintă un depozit enorm de informație electronică(păstrată în formă de fișiere pe calculatoare) în întreaga lume. Cu alte cuvinte WWW prezintă milioane de documente legate între ele , care se află pe diferite calculatoare pe tot globul pământesc. Prin intermediul WWW e accesibilă informație de diferite tipuri și prezentată în diferite forme – text, grafică, audio, video (toate aceste forme de prezentare a informației se reunesc sub o noțiune – hipermedia).
Internet asigură legătura între calculatoarele lumii întregi pentru a face schimb de informație. Iar WWW prezintă un sistem comunicațional global, care organizează schimbul de date-hipermedia electronice între calculatoare în cadrul Internet.
Poșta electronică (e-mail) – este cel mai folosit serviciu din Internet. Sistemul de poștă electronică în Internet prezintă un sistem enorm în întreaga lume, care deseori e folosită pentru legătura între diferite sisteme incompatibile de poștă. Majoritatea mesajelor prezintă text simplu, însă prin intermediul poștei electronice e posibilă transmiterea mesajelor în formă de fișiere cu informație grafică, audio, video, fotografii.
FTP (file transfer protocol-protocol de transport a fișierelor)- prezintă un sistem, ce oferă posibilitatea de a copia fișiere de pe un calculator pe altul prin intermediul rețelei.
FTP ca atare prezintă un protocol împreună cu program și este unul din primele servicii Internet. FTP oferă posibilitatea copierii fișierelor de pe orice calculator din Internet cu ajutorul browser-ului Web. FTP a fost elaborat în anul 1971 anume cu scopul de transfer de fișiere între calculatoare. O proprietate pozitivă a FTP este faptul, că protocolul lucrează independent de tipul calculatorului. Programele standarde ftp asigură posibilitatea nu numai de transmitere a fișierelor, dar și de analiză a cataloagelor și a informației despre fișiere.
Telnet – este un program, ce oferă posibilitatea de a lucra la un calculator îndepărtat, (lucrând într-adevăr la calculatorul vostru), ca și cum acesta ar fi calculatorul ce se află în fața voastră. Necesitatea de a folosi Telnet poate apărea din mai multe pricini:
– Programul, ce doriți să-l lansați nu lucrează pe calculatorul dvs.
– Calculatorului dvs. nu-i ajunge resurse(memorie, viteză) pentru lansarea programului.
– Posedați fișiere ce sunt păstrate pe calculator îndepărtat și doriți să lansați un program ce folosește anume aceste fișiere.
Independent de cauza din care doriți să folosiți telnet, el oferă posibilitatea de a folosi calculatorul aflat la distanțe de sute și mii de kilometri.
Archie prezintă un sistem de căutare a informației în Internet. În Internet este accesibil un număr enorm de programe. Toate aceste programe sunt accesibile prin ftp, dar numărul lor este atât de mare, încât determinarea amplasării lor este foarte complicată, uneori chiar și imposibilă, din această cauză apare necesitatea de căutare a programelor necesare. În trecut, când Internet numai ce apăruse existau puține sisteme de calculatoare și respectiv puțină informație necesară de căutat.
Archie – este un bibliotecar, care regulat face analiza calculatoarelor și rețelelor, unite în Internet, automat creând liste indexate de fișiere și cataloage, accesibile utilizatorilor.
Din cauza că Archie regulat scanează Internet-ul, bazele lui de date se actualizează regulat. Dacă este cunoscut numele fișierului, care e necesar, se poate de-l găsit prin intermediul Archie fără nici o problemă. În cazul, dacă numele fișierului necesar nu este cunoscut, atunci există posibilitatea de a căuta acest fișier cu ajutorul cuvintelor cheie, ce se referă la temă dată.
WAIS(Wide Area Information Servers – Servere de informație distribuită) – prezintă un sistem destinat căutării informației în rețele de calculatoare. A fost elaborat pentru a fi accesate bazele de date comerciale, dar în timpul de față majoritatea informației accesibile prin WAIS este gratuită. Lucrând cu WAIS se poate culege câteva simboluri, care descriu ceia ce e necesar de găsit. Sistemul scanează nu numai denumirile fișierelor accesibile prin rețea, dar și conținutul acestor fișiere, efectuând o căutare cu mult mai detaliată decât Archie.
Gopher – prezintă un sistem-meniu, ce oferă posibilitatea de a călători prin Internet, selectând compartimentele meniului. Lucrând cu Gopher, se poate de călătorit prin Internet fără a selecta diferite comenzi, necesare în timpul lucrului cu alte programe.
Există păreri, că Gopher este un predecesor al Web. Aceste presupuneri posibil sunt corecte chiar din cauza că Gopher de asemenea conține o interfață cu meniuri plăcute, însă Web posedă mai multe posibilități și este mai comodă.
Veronica este folosită absolut numai împreună cu Gopher pentru simplificarea căutării informației.Veronica efectuiază regăsirea informației prin intermediul cheiei în majoritatea meniurilor serverelor Gopher. Aplicarea serviciului Veronica nu-i necesară, însă el simplifică cu mult căutarea. Acest serviciu indică lista nodurilor la care este unit Gopher și alegând un nod anumit căutarea se simplifică cu mult.
InterNIC – este un sistem de conducere a serviciilor informaționale de rețea. Se poate de făcut analogie între acest sistem și o carte telefonică. InterNIC e folosit mai puțin ca alte servicii, însă e folosit încă pentru accesul la Internet prin intermediul terminalului de text.
Grupele de noutăți(newsgroups)-este unul din cele mai populare servicii din Internet. Grupele de noutăți sunt ca și tablele electronice de anunțuri(buletin-board systems-bbs) însă deosebirea constă în faptul că ele se referă la un număr mai mare de teme. Grupele de noutăți nu sunt surse de noutăți, ci niște discuții pe teme concrete. Ideia principală în acest serviciu este reunirea oamenilor cu aceleași pasiuni și interese pentru a duce discuții pe aceste teme. O trăsătură pozitivă a grupelor de noutăți este faptul, că orice mesaj trimis nimerește în discuție lipsând o cenzură oarecare la teme și mesaje, faptul care face discuția mai interesantă.
Finger este un program ce oferă posibilitatea găsirii adreselor altor utilizatori ai Internet-ului. Ca minim finger poate afla cine folosește calculatorul dat și are o adresă determinată în Internet. Mai des finger e folosită la căutarea prietenilor de schimb a scrisorilor. De asemenea finger se folosește pentru a afla cât timp un utilizator concret lucrează în rețea. Finger e destinat căutării oamenilor în cadrul unor rețele relativ nu prea mari, din această cauză el e folosit din ce în ce mai rar în Internet.
1.4 World Wide Web
Păiengenișul mondial World Wide Web a fost elaborat în anul 1989.Tim Bernes-Li, elaboratorul Web, în timpul lucrului în laboratorul de fizică a institutului CERN (Centtre European de Recherche Nucleaire) din Jeneva, a simțit necesitatea de răspândire a informației legate de fizica energiilor înalte, în așa mod ca ea să fie accesibilă cercetătorilor din toată lumea. Și el a propus sistemul hipertext de legătură între calculatoare. Acest sistem oferea posibilitatea colegilor lui de a lega documentele prin intermediul rețelei de calculatoare cu scopul de a răspândi rezultatele cercetărilor sale. CERN a susținut acest proiect dezvoltând-l de la o rețea locală la rețeaua globală.
Pentru prima oară Web a fost folosită în ianuarie 1992 în Jeneva, unde colaboratorii laboratoarelor de cercetare puteau primi datele Web de pe nodul CERN. Bernes-Li a propus, ca păstrarea documentelor să fie efectuată pe calculatoarele numite servere Web. Adresarea la datele Web se făcea prin intermediul unui program special numit Browser Web. În timpul de față, folosind Internet, utilizatorii se unesc la serverele Web și apelează la diferite documente. Serverul, în rândul său, acordă documentul cerut utilizatorului, care îl poate vizualiza cu ajutorul browser-ului Web. O caracteristică pozitivă a serverului Web este faptul, că un server Web poate răspunde la mai mulți utilizatori simultan. În ultimii trei ani Web a devenit un depozit enorm de informație pe diferite teme. Acum informația nu-i limitată numai în cadrul cercetărilor științifice, ci se folosește in diferite scopuri, așa ca reclamarea producției, oferirea diferitor cursuri de studii, schimbul de date între orice calculator unit la rețea cu orice server. Baza Web este hipertextul. Folosirea tehnicilor hipertext în organizarea informației face ca aceasta să apară ca o țesătură ce permite navigarea cu ușurință de la un obiect la altul, prin numeroasele legături ale acestei structuri.
Hypertextul este o metodă de organizare a informației în care anumite cuvinte, marcate, dintr-un document sunt legate cu alte documente care conțin informații adiționale despre ele. În hypermedia (o exetenție a hypertextului) legăturile se pot face și la grafice, imagini, clipuri audio, imagini animate și altele. Metoda este asociată cu un mod specific de prezentare a informației în care cuvintele marcate sunt evidențiate printr-un format de afișare diferit de al restului textului. Selecționarea unui astfel de cuvânt are ca efect afișarea documentului legat(se mai spune că acest cuvânt este expandat la noul document).Cuvintele marcate, ce conțin legături de hypertext se mai numesc ancore.
Arhitectura serviciului WWW se bazează pe modelul client-server. Clientul permite utilizatorului să exploreze(browsing) documente locale sau situate în alte noduri din Internet. De aceea, el este denumit și program de exploatare sau, pe scurt, explorator (browser). Accesul la serviciile Web presupune folosirea browserului cum este, în ziua de azi, Netscape Navigator sau Internet Explorer. Acestea sunt două navigatoare puternice și cu mari posibilități, care au acaparat piața browserelor și duc o luptă între ele pentru monopolizarea acestei pieți. Exploratorul are acces la informații aflate atât în serverele WWW cât și în serverele WAIS, Gopher, Archie și altele. Acest acces mixt este posibil deoarece exploratorul cunoaște atât protocolul nativ de transfer al hyertextului HTTP(HyperText Transfer Protocol), cât și protocoalele FTP(File Transfer Protocol), NNTP (Network News Transfer Protocol), Gopher și alte protocoale din suita TCP/IP.
HTTP este protocolul utilizat pentru transferul documentelor hypertext între server și client. El are o funcționare deosebit de simplă. Ca urmare a selectării de către utilizator a unui cuvânt marcat, clientul determină adresa documentului legat, stabilește o conexiune cu un server Web (conexiune care are la bază un serviciu de transport singur, de obicei TCP/IP) și îi transmite o cerere în care specifică adresa documentului. Serverul transmite conținutul documentului solicitat, după care închide conexiunea.
Specificarea adresei documentului respectă o formă standard, denumită URL (Uniform Resurs Locator), având câmpurile următoare:
schema://gazda.domeniu[:port]/cale/nume_fișier . Aici:
schema – reprezintă metoda de acces (FTP, HTTP, Gopher, WAIS, News, Telnet);
gazda domeniu – este numele mașinii care păstrează documentul;
port – argument opțional, indică portul de acces utilizat;
/cale/nume_fișier – este identificatorul fișierului care conține documentul, în sistemul de fișiere al mașinii gazdă. Mai concret despre protocolul de bază Web va merge vorba în unul din punctele următoare.
Pentru crearea și recunoașterea documentelor, WWW folosește un limbaj specific, HTML (HyperText Markup Language). Acesta descrie modul de afișare a elementelor de text, cum ar fi paragrafe, liste etc. HTML are și o extensie, HTML+ care permite descrierea legăturilor la forme mult mai diverse, care includ imagini, tabele, formate de diferite stiluri. Documentele HTML pot fi create folosind un editor de texte obișnuit. Deoarece manipularea marcajelor în forma lor textuală este un procedeu anevoios, de obicei noile documente sunt create prin simpla modificare a documentelor mai vechi. Există însă și editoare HTML specifice, care permit selectarea marcajelor dintr-un meniu și care, în plus, permit verificarea funcționării legăturilor imediat după crearea lor.
În fine, există convertoare de la diferite formate de text la HTML.
Accesul la serviciile Web presupune folosirea unui program de navigare(numit browser) cum este, în ziua de azi, Netscape Navigator sau Internet Explorer. Acestea sunt două navigatoare puternice și cu mari posibilități, care au acaparat piața browserelor și duc o luptă între ele pentru monopolizarea acestei pieți. Folosirea limbajului HTML la concret se va analiza în unul din punctele următoare.
1.4.1 HTTP – protocolul Web de bază
În timpului călătoriei prin Web browser-ul face schimb de informație cu serverul Web, folosind protocolul HTTP. În fiece dată, când se efectuiază trecerea prin hyperlegături de la un resurs la altul, browser-ul se adresează la HTTP pentru acces la server, care păstrează informația necesară. Informația se păstrează pe server în diferite forme, cum ar fi fișiere textuale, imagini, clipuri video, fotografii, audio etc. Transmiterea acestor multimedia-date e descrisă de o specificație tehnică, numită MIME. MIME determină formatul fișierelor grafice, de sunet, binare, video etc. Folosind MIME, se poate de determinat formatul fișierelor și de le folosit în cadrul lucrului cu serverul Web (cu condiția că serverul poate lucra cu formatul dat.
1.4.2 Principiul de lucru HTTP
Spre deosebire de așa protocoale ca FTP, ce asigură legătura până când nu va apărea vreo greșeală sau nu va veni semnalul de închidere a legăturii, HTTP are alt principiu de lucru. Pentru fiecare operație HTTP browser-ul și server-ul fac o legătură, apoi o întrerupt. De exemplu, când se dace legătura cu nodul Web, browser-ul și server-ul fac legătură, ce permite serverului să transmită pagina HTML din nodul dat browserului. După ce browserul primește fișierul, serverul întrerupe legătura.
O operație HTTP de multe ori e numită tranzacție. HTTP folosește legătura TCP/IP, ce se stabilește pentru perioada de tranzacție. Nici browserul, nici serverul nu păstrează informația chiar despre ultima conexiune. În așa fel, călătoria prin Web prezintă niște tranzacții HTTP consecutive. După ce documentul a fost transmis clientului, serverul singur întrerupe legătura, fapt care permite serverului să deservească mai rapid clientul următor și mărește eficacitatea lucrului.
1.4.3 Trei operații de bază HTTP
Folosind HTTP, aplicațiile îndeplinesc trei operații de bază: căutarea, extragerea și controlul. În timpul căutării obiectului programul Web folosește HTTP pentru indicarea URL-ului obiectului pe server. Dacă obiectul există, aplicația folosește HTTP pentru primirea lui. După terminarea operației date HTTP anunță despre statutul ei. Cu alte cuvinte, HTTP transmite programului informația despre faptul: au fost cu succes sau fără succes îndeplinite operațiile de căutare/extragere a datelor.
1.4.3.1Căutarea informației
HTTP e bazat pe operațiile de interpelare(cerere) a clientului și de răspuns a serverului. Clientul instalează legătura TCP/IP cu serverul, trimițând mesajul despre interpelare la legătură prin Internet la server. Dacă serverul e accesibil el primește acest mesaj de la client și instalează legătura . În timpul folosirii browserului pentru căutarea informației în Web, el transmite cererea la server, unde se păstrează informația căutată. După ce serverul și clientul instalează legătura, browserul transmite un mesaj – cerere, în care se conține informația despre metoda de interpelare(cerere),URI(Uniform Resourse Identifier), versiunea protocolului și mesajul MIME. În mesajul MIME se indică parametrii interpelării, informația despre client și corpul obiectului.
1.4.3.2Extragerea informației
După ce browserul a instalat legătura cu serverul și a făcut cerere, se începe procesul de extragere a informației. Serverul răspunde cu mesajul, unde sunt indicate versiunea lui de protocol, codul erorii sau a legăturii cu succes și de asemenea un mesaj de tipul MIME, în care este prezentă informația despre server, titlul obiectului și conținutul corpului obiectului.
1.4.3.3 Informația despre statutul legăturii.
În timpul instalării legătutii cu serverul, în fereastra statutului legăturii se poate de urmărit după toate fazele procesului. Mesajele despre statutul obiectului permit determinarea volumului informației și începutul procesul de extragere a datelor.
Folosind această informație, e posibil, în caz de necesitate, de a întrerupe acest proces de copiere. În afară de aceasta, e accesibilă o informație mai amplă despre încercările căutării informației. Codurile statutului sunt indicate în fereastra corespunzătoare a browserului.
1.4.4 Patru etape ale unei tranzacții HTTP
Înainte de procesul de schimb a informație între server și client, e necesară instalarea legăturii între ei. În Internet aceasta se face cu ajutorul TCP/IP. Apoi clientul cere datele de la server, iar serverul trimite răspunsul. Clienții și serverele folosesc HTTP pentru efectuarea acestei operații. În afară de aceasta, astfel de legătură se instalează numai pentru o singură tranzacție și apoi este închisă de server după finisarea ei. Toate etapele unei tranzacții sunt descrise mai jos.
1.4.4.1 Pasul 1: Instalarea legăturii
În Internet TCP/IP se folosesc pentru organizarea interacțiunii între calculatoare. Pentru a deosebi protocoalele, aplicațiile folosesc pentru fiecare din ei numere unice. Protocoalele comune; așa ca FTP și HTTP, folosesc numere de porturi bine cunoscute. Valoarea standard pentru portul HTTP este 80, dar e posibilă legătura și prin intermediul altui port.
1.4.4.2 Pasul 2: Cererea clientului
Fiecare cerere a clientului se începe cu metoda, după care vine URL-ul obiectului.
Clientul completează această informație cu versiunea HTTP, apoi urmează simbolul de trecere în alt rând, după care pot urma datele. La sfârșit browserul mai adaogă un simbol de trecere în alt rând. Metoda HTTP prezintă o comandă a clientului, ce indică la scopul cererii către server. Așa metodă corespunde resurselor Web. Clientul de asemenea indică versia proprie a protocolului HTTP. Toate aceste componente: metoda, URL-ul și versiunea HTTP – sunt părți componente a rândului de cerere (Request-Line). Clientul folosește câmpul titlului cererii pentru indicarea informației despre cerere și despre sine.
1.4.4.3 Pasul 3: Răspunsul serverului
După ce serverul Web a primit și a prelucrat mesajul-cerere, el răspunde cu un mesaj-răspuns HTTP. Așa mesaj se începe cu versiunea HTTP, apoi urmează codul statutului și tema răspunsului(3 cifre), simbolul de trecere în alt rând și informație adăugătoare cu titlul respectiv. La sfârșit se mai adaogă simbolul de trecere în alt rând, după care urmează corpul obiectului. Codul statutului prezintă un număr de trei cifre, ce descrie, poate oare serverul să primească și să satisfacă cererea clientului. Tema răspunsului – este o descriere textuală scurtă a codului statutului. Versiunea HTTP, codul statutului și tema răspunsului împreună formează rândul statutului(status line). Titlul răspunsului poate conține informație despre resursul cerut și determinările MIME corespunzătoare. Când serverul trimite titlul răspunsului clientului, de obicei el coincide cu titlul, primit de la client.
1.4.4.4 Pasul 4: Întreruperea legăturii de către server
Prerogativa serverului este întreruperea legăturii TCP/IP cu clientul după prelucrarea cererii lui. Însă la fel ca și serverul, clientul trebuie să urmărească întreruperile ne planificate a legăturii . Cu alte cuvinte, dacă se clichează butonul Stop al browserului, atunci el trebuie să întrerupă legătura. În caz de deteriorare în hardul unui din calculatoare, celălalt trebuie să determine aceasta și să întrerupă legătura. În orice caz, întreruperea legăturii duce întotdeauna la întreruperea tranzacției curente, independent de statutul ei.
1.4.5 Metodele HTTP
Metode HTTP se numesc comenzile HTTP. Metoda HTTP anunță serverul, ce trebuie de făcut cu resursul URI. Lista metodelor pentru un resurs concret se poate schimba dinamic. Din codul statutului și rândul statutului răspunsului serverului browserul află despre faptul: poate oare serverul să execute metodele concrete asupra resursului dat. Serverul, în caz că metoda nu-i cunoscută sau nu-i executabilă, întoarce codul 501. Mai jos urmează descrierea completului metodelor de bază HTTP (GET,HEAD și POST).
1.4.5.1 Metoda GET
Metoda GET a protocolului HTTP trimite cerere-întrebare serverului despre existența informației, determinate de URI. Serverul o primește, folosind adresa URI din cererea clientului. Metoda GET se numește decondiție, dacă în titlul cererii clientului se întâlnește câmpul If-Modified-Since. În acest caz serverul propune clientului informația, dacă ea a fost schimbată după data, indicată în titlul cererii. Dacă clientul deja a primit aceste date și le-a păstrat, nu-i necesitate de le trimis încă o dată.
1.4.5.2Metoda HEAD
Metoda HEAD este aproape identică cu GET cu o difirență: serverul nu întoarce ca răspuns la cerere corpul obiectului. Aplicațiile folosesc această metodă pentru a primi informație despre resursul dat, neâncărcând-ul pe calculator. Această informație (metainformație) trebuie să fie identică cu titlul răspunsului la cerere cu metoda GET. Programele folosesc metoda HEAD pentru controlul legăturilor hypertextuale (ancore) cu scopul de a afla corectitudinea, accesibilitatea și schimbările. Mai există o diferență între metoda HEAD și GET: pentru metoda HEAD nu există conceptul de condiție. Amplasând câmpul If-Modified-Since în cererea HEAD, atunci rezultatul nu se va schimba (acest câmp va fi ignorat).
1.4.5.3 Metoda POST
Metoda POST a protocolului HTTP trimite cerere la server despre existența obiectului, adresa căruia e indicată în URI-ul cererii. Cu alte cuvinte, folosind această metodă, clientul îi dă indicații serverului precum că acesta este un resurs nou și e necesar de-l folosit cu URI-ul trimis de el. În majoritatea cazurilor metoda POST crează sau înscrie deasupra informației existente pe cea nouă, legată cu URI-ul din cerere. Dar o săvârșire corectă POST nu cere apariția obiectului ca resurs sau accesibilitatea lui pentru ancorele viitoare. Din această cauză operația cu metoda POST poate să nu ducă în rezultat la apăriția resursului cu URI-ul dat. În acest caz serverul va întoarce codul statutului în forma 200 (OK) sau 204 (nu există conținut), în dependență de faptul conține oare mesajul-răspuns al serverului obiectul, indicat în cerere.
În afară de metodele GET, POST și HEAD protocolul HTTP mai conține câteva metode mai puțin folosite: CHECKIN, CHECKOUT, DELETE, LINK, PUT, SEARCH, SHOW-METOD, STACEJUMP, TEXTSEARCH și UNLINK. Însă nu toate serverele susțin aceste metode.
1.4.6 HTML – limbajul de marcaj
HTML nu este un limbaj de programare iar un document HTML nu este un program de computer. În timp ce un program de computer înseamnă o serie de proceduri si instructiuni care se aplică unor date, un document HTML reprezintă chiar datele. Limbajul HTML specifică gramatica si sintaxa tag-urilor (etichetelor) care, inserate în date (de pildă text), spun browserului cum anume să citească documentul HTML. Din punct de vedere tehnic, HTML este un subset al SGML iar un document HTML este o instantă a unui document SGML.
SGML s-a născut sub numele GML (General Markup Language) la IBM, spre sfîrșitul anilor 60, într-o tentativă de a rezolva problemele ivite la transportul documentelor între diferite computere. Numele markup vine din lumea publiciștilor unde se referă la instructiunile codate inserate de editor în manuscris privind tipul caracterelor. SGML este generalizat (generalized) prin faptul că în loc să specifice exact cum anume trebuie prezentat un document el descrie tipuri de documente împreună cu modalitatea de marcare pentru formatarea si prezentarea instantelor fiecărui tip. GML a devenit SGML când a fost acceptat ca standard de către International Standards Organization (ISO) la Geneva (ISO 8879; 1986).
Un document SGML are trei părti. Prima descrie setul de caractere si, lucrul cel mai important, care sunt caracterele care vor fi folosite pentru a diferenția textul de tag-uri (etichete). Cea de a doua parte declară tipul documentului (Document Type Definition – DTD) si care tag-uri sunt considerate legale. A treia parte se numește instanta documentului și conține textul si tag-urile. Cele trei părți nu trebuie să se găsească în același fișier fizic, lucru fericit deoarece permite să se "uite" de SGML și să se lucreze numai cu HTML.
Toate browserele HTML presupun aceeași informație legată de setul de caractere și declarațiile legate de tipul documentului așa încât avem de a face doar cu instanțele HTML ale documentului, simple fișiere text. Setul de caractere de bază al unui document HTML este ISO 8859/1, cunoscut ca Latin-1. Este un alfabet pe 8 biti cuprinzând caractere pentru cele mai multe limbi americane și europene. ISO 646, cunoscut ca ASCII pe 7 biti, este subset al setului Latin-1. Nu există nici o obligație pentru a utiliza într-un document HTML mai mult decât cele 128 de caractere ASCII standard.
De fapt s-ar putea spune că este chiar încurajată rămânerea în cadrul US-ASCII deoarece documentele pot fi editate cu orice editor de text si "văzute" de cele mai rudimentare browsere. Caracterele Latin-1 care nu fac parte din US-ASCII sînt incluse în HTML sub forma unor "caractere entități". Caracterele entități încep cu semnul & (ampersand) care este urmat de numele sau numărul caracterului și de punct si virgulă. De pildă litera Ă este Ã, ă este ã, Î este Î, î î, Â Â, â â, etc.
Formele HTML sunt contribuția cea mai inovativă la versiunea 2.0. Ele permit autorului documentului web să prezinte cititorului un formular interactiv care include cîmpuri de intrare, butoane si meniuri pull-down. Formele permit implementarea unei clase noi de aplicatii web. Utilizarea lor se extinde de la furnizarea unor interfețe sofisticate pentru căutători pînă la înregistrări on-line și aplicații interactive în care input-ul în formular determină natura si conținutul documentului afișat. Formele sunt extrem de folositoare deoarece reprezintă mecanismul prin care un limbaj de descriere a paginii hypertext este transformat într-o unealtă pentru crearea de documente interactive.
Ceea ce a rezultat, documentul interactiv, va fi citit de cineva care va completa cîmpurile de editare. Un program va face ceva cu datele de intrare și va furniza ceva utilizatorului pe baza acelor date. Evident, autorul va trebui să scrie un program (practic în orice limbaj de programare) numit CGI (Common Gateway Interface) sau ISAPI, aplicatie care manipulează intrarea, (caută informatie, trimite un e-mail, etc).
Imaginile senzitive, o altă specificatie a limbajului HTML, au făcut posibilă depăsirea fazei în care imaginile erau utilizate doar pentru efectul decorativ. Extinderea HTML a constat în definirea unor zone "calde" care conectează diferite regiuni ale imaginii de diferite acțiuni. Când cineva face clic pe o anumită zonă, numai informația legată de acea zonă este afișată. Treaba se poate realiza fie cu ajutorul formularelor fie cu ajutorul variabilelor de mediu. Programul care implementează această facilitate citește informația din punctele calde ale unei imagini dintr-un fișier, caută "valoarea" asociată punctului cald x,y si furnizează utilizatorului documentul sau acțiunea asociată cu acel punct.
Folosirea HTML s-a început în anul 1990, când Tim Bernes-Li și Daniel W.Connoli au creat HTML. Folosind SGML în calitate de prototip, Bernes-Li a creat HTML, iar Connoli a scris pentru el DTD (Document Type Definition). HTML DTD este o descriere formală a sintaxei HTML în termeni SGML. HTML versiunea 2.0 de asemenea este standard. HTML este un sistem de formatare standardă, ce se folosește în Web. Ca și fiecare standard, HTML a avut mai multe versiuni, fiecare din ele având un număr mai mare decât cea precedentă. În timpul de față majoritatea browserelor folosesc versiunea 2.0. Însă de acum există versiunea 3.2 versiunea 3.0 a fost folosită foarte slab. Principalul element al HTML este <tag-ul>.
HTML de nivelul 0 a fost primul standard, care se folosea în Web. El conținea teg-uri de marcare a documentelor și determinările de marcare pentru tag-urile de ancoră (de legătură). Însă numărul de tag-uri și posibilitățile HTML erau destul de mici.
HTML 1.0 conținea toate posibilitățile versiunei 0 și adăugator susținea imaginile și marcarea lor și posibilitățile de formatare a simbolurilor. Acest nivel avea mari posibilități de formatare a textului.
HTML 2.0 este un standard mai comun pentru formatarea documentelor. Aici sunt prezente toate posibilitățile nivelurilor 0 și 1.0 și adăugător se asigură lucrul cu formele, care permit serverului interacțiunea cu utilizatorul. Anume folosind formele există posibilitatea de schimb dinamic de date între client și server.
În timpul de față versiunea HTML 3.2 e propusă în calitate de standard al Internetului, înlocuind versiunea 3.0. În HTML3.0 sunt prezente toate posibilitățile versiunilor precedente și sunt adăugate extinderile pentru figurile geometrice , tabele și elemente de conducere în forme. Nivelul 3.2 adăugător conține posibilități pentru alcătuire de aplete, scripte, instalarea ganei de culori ș.a. În timpul de față se duc lucrări asupra unei versiuni mai sofisticate HTML 3.5.
Dezvoltarea HTML nu s-a terminat, evoluția specificațiilor fiind corelată cu evoluția serverelor si browserelor Web. Aproape întreaga muncă de dezvoltare a HTML se face pe Web sub forma grupurilor de discuții. Specificatiile HTML urmează un model deschis de dezvoltare: se propune o nouă caracteristică, se implementează în câțiva clienți pentru testare și se fac testările pe câteva aplicații. Dacă există cerere suficientă pentru noua caracteristică atunci alți implementatori de browsere sînt încurajați să facă acest lucru si caracteristica se generalizează. În acest proces designul este revăzut si probabil modificat si îmbunătățit.
Deci, elementul principal în HTML este tag-ul. Folosind tag-urile se poate de alcătuit un document HTML.
Tag-urile HTML sînt delimitate de paranteze unghiulare < si >. Ele apar fie singular, cum este de pildă <P> care indică un paragraf nou în text fie în perechi marcând începutul si sfîrșitul textului asupra căruia au efect. De
pildă <B> Atentie!</B> reprezintă etichetarea cuvântului pentru a fi afișat îngroșat pe ecran. Există tag-uri pentru formatare, pentru specificarea legăturilor, pentru includerea fișierelor grafice, video sau sunet precum și tag-uri pentru definirea unor câmpuri de editare, interactive.
Numărul tag-urilor si al caracterelor entități creste în continuu făcând necesară redefinirea periodică a HTML.
Cel mai simplu document HTML este alcătuit din următoarele tag-uri: <html>și</html>,<head>și</head>,<title>și</title>,<body>și</body>. Aceste tag-uri se folosesc în felul următor:
<HTML>
<HEAD>
<TITLE>Titlul documentului</TITLE>
<HEAD>
<BODY>
Aici urmează a fi corpul documentului
</HEAD>
</HTML>
Tag-ul <HTML> indică clienților că documentul dat e alcătuit cu ajutorul HTML. El este totdeauna amplasat la începutul documentului.
</HTML> se numește stop-tag și limitează acțiunea standardelor HTML. Adică indică sfârșitul documentului HTML.
Elementul <HEAD> aflat la începutul oricărui document HTML înseamnă titlul sau partea introductivă. În titlu se poate de introdus diferită informație, așa ca o adnotare a documentului. Stop-tag-ul înseamnă sfârșitul titlului.
Elementul <TITLE> e folosit pentru indicarea denumirii documentului, adică a titlului.
Informația aflată între tag-urile <TITLE> și </TITLE> este afișată de către browser în partea de sus a ferestrei și indică denumirea documentului dat.
Elementul <BODY> indică începutul textului de bază a documentului. De obicei între tag-urile <BODY> și </BODY> se află altealmente HTML așa cum cele de formatare a textului, descriere a tabelelor, a formelor, a listelor și alte elemente HTML.
Formele în HTML au o însemnătate deosebită. Aplicând formele HTML se poate face o interfață de dialogare a clientului cu serverul Web. O formă HTML conține diferite obiecte de dirijare, câmpuri de redactare, comutatoare, liste și alte elemente, cu ajutorul cărora clientul trimite serverului o informație oarecare, care ajungând la server este analizată și prelucrată de un program special numit script, după ce este trimis răspunsul clientului în dependență de informația trimisă prin formă.
Pentru a crea o formă în HTML se folosește operatorul <FORM>, ce se folosește în pereche cu operatorul </FORM>. Între acești doi operatori se află organele de conducere cu forma, așa ca <INPUT>, <TEXTAREA>, <SELECT> și altele.
1.5 Servicii dialogate Web
Până în momentul de față a mers vorba despre documente HTML statice, adică documente, conținutul cărora nu se schimbă în timp fără intervenirea administratorului serverului Web. În acest caz așa server se numește server static. Fără îndoială este faptul, că serverele pasive sunt necesare în Web, deoarece există foarte multă informație, care nu necesită schimbare în timp. Însă sunt cazuri, când sunt necesare servere, care nu pur și simplu oglindesc informație multimedia, dar care pot intra în dialog cu clientul în regim interactiv, poate face adresare la baze de date și de asemenea pot să îndeplinească alt lucru analog. De exemplu: în cazul unui volum mare de informație căutarea documentului necesar cu ajutorul legăturilor între documente(așa numitele ancore) este destul de anevoioasă și îndelungată. În acest caz e binevenită posibilitatea de a căuta acest document cu ajutorul unui regim de căutare după cuvinte cheie, astfel timpul căutării se reduce la minim. Serverele, care duc dialog cu un utilizator îndepărtat sau îndeplinesc prelucrarea datelor utilizatorului, se numesc servere active. Necesitatea folosirii acestor servere a apărut odată cu dezvoltarea Internet și Web. Mărirea numărului de calculatoare unite la rețea a avut ca rezultat mărirea volumului de informație accesibilă prin rețea. Acest volum este atât de mare în ziua de astăzi, încât nu există posibilitatea de a duce o evidență strictă a tuturor documentelor accesibile. Această problemă se poate de o rezolvat cu aplicarea serverelor active. Cel mai aplicabil mod de creare a serverelor active în ziua de astăzi este folosirea aplicațiilor CGI. CGI este o interfață standardă de ecluză (Common Gateway Interface), care se folosește pentru lansarea programelor externe sub conducerea serverului Web. Corespunzător, aplicație CGI se numește un program, care , folosind această interfață, primește cu ajutorul protocolului HTTP informația de la utilizatorul îndepărtat, o prelucrează și întoarce rezultatul prelucrării înapoi în formă de ancoră la un alt document HTML sau alt obiect așa ca o imagine, care deja există, sau în formă de document format dinamic.
Pentru dialogarea între server și client există nu numai tehnologia CGI. E cunoscută aplicația ISAPI (Internet Server Application Programm Interface), care de asemenea acordă posibilitatea de dialogare între server și client. Realizarea tehnologiilor CGI și ISAPI se face folosind limbaje de programare așa ca C/C++, Perl, JScript, VBScript, care pot prelucra informația venită în cadrul cererii de la client și trimite răspuns în legătură cu această cerere.
1.6 Analiza sarcinii
În lucrarea de față se analizează serviciile dialogate în Internet și posibilitățile ce sunt accesibile aplicând aceste servicii, precum și tehnologiile CGI și ISAPI la concret ca instrumente de creare a serverelor active pentru dialogarea cu clientul. Se analizează toate etapele și principiile de lucru a aplicațiilor CGI și ISAPI. Etapele dialogării serverului și clientului prin aplicarea acestor tehnologii sunt următoarele:
trimiterea datelor către server.
primirea acestor date de către aplicație (CGI sau ISAPI).
prelucrarea datelor primite de către aplicație.
răspunsul aplicației.
De asemenea, în cadrul acestei lucrări se aplică în practică rezultatele analizei tehnologiilor date și etapelor lor. Analizând instrumentele de aplicare în practică a acestor rezultate și anume a limbajelor de programare, se alege un limbaj cel mai potrivit cu ajutorul căruia se realizează tehnologiile date. Folosind acest limbaj, și anume – limbajul Perl, se realizează accesul distant-dialogat prin Internet pentru consultarea legislației Republicii Moldova, selectată în baza de date "JURIST" , care conține un volum foarte mare de acte legislative. Această bază de date este inclusă într-un sistem informatic de consultare, care la rândul lui este realizat sub sistemul operațional MS-DOS.
Sistemul informațional pentru consultarea legislației R. Moldova "JURIST" este elaborat de Centrul Republican de Informatică conform Proiectului Director de informatizare a societății, (Hotărîrea Guvernului R.Moldova nr. 155 din 06.03.95) și Licenței nr.180 din 13.05.94 (elaborarea lucrărilor de proiectare in domeniul informaticii).
Bazele de date conțin legi si acte normative adoptate, începând cu 01.01.90 și alte legi importante, adoptate pină la 01.01.90, cum ar fi:
Codul penal, Codul civil, Codul de procedură penală, Codul muncii si altele.
Sistemul este elaborat in limba romană și rusă. Indiferent de limba aleasă la inceput orice act poate fi vizualizat și în cealaltă limbă.
Toate actele sunt in stare actuală (în stare de control),iar in arhivă se păstrează actele la momentul adoptării. Actele, care au fost modificate, conțin lista actelor care le-a modificat, și astfel se poate restabili conținutul actului la o anumită dată.
In varianta curentă toate actele legislative și normative sunt diviza te în următoarele compartimente:
– Legi adoptate de Parlament;
– Hotărîrile Parlamentului;
– Decretele Președintelui;
– Hotărîrile Guvernului;
– Dispozițiile Guvernului;
– Hotăririle Curții Constituționale;
– Hotăririle Ministerului de Finanțe;
– Hotăririle Băncii Naționale;
– Acorduri, Tratate Internaționale;
– Alte acte normative.
Consultarea acestor baze de date, pînă la momentul îndeplinirii lucrării date, se efectua numai la calculatoare personale sau în cadrul unei rețele locale. Odată cu dezvoltarea tehnico-științifică a sistemelor și rețelelor informaționale a apărut necesitatea de a consulta Legislația Republicii Moldova și în cadrul rețelei mondiale Internet. Mărirea volumului de acte legislative incluse în baza de date și dezvoltarea tehnologiilor de dialogare distanțată prin Internet a adus inevitabil la necesitatea elaborării unui sistem informațional în cadrul rețelei mondiale Internet, pe baza celui existent, care ar dialoga cu utilizatorii aflați la distanță și ar răspunde interactiv la cererile lor formând ca răspuns documente dinamice, ce ar conține ancore (legături) la actele legislative necesare utilizatorilor. Anume această problemă se rezolvă în cadrul lucrării prezente.
1.7 Analiza actualității lucrării date
După cum a fost menționat mai sus în această lucrare, serviciul World Wide Web al Internetului pentru prima oară a fost aplicat în practică în ianuarie 1992. Corespunzător, serviciul distant-dialogat în Web a apărut puțin mai tîrziu ca Web-ul. Aproximativ peste 1-2 ani a apărut necesitatea în așa fel de serviciu. Din aceste fapte rezultă, că orice cercetări și lucrări legate de tehnologiile serviciului distant-dialogat în Internet, care are o vârstă de nu mai mult de 4-5 ani sunt actuale în timpul de față. Mai mult ca atât, dezvoltarea cu pași giganți a tehnologiilor informaționale Internet obligă însușirea noilor tehnologii apărute în orice domeniu al acestuia. Serviciul distant-dialogat de asemenea este pe cale de dezvoltare și deci analiza și utilizarea lui în practică este mai mult decât actuală. Tehnologia ISAPI, care a apărut mai târziu ca CGI și acordă posibilități avansate programatorilor în comparație cu tehnologia CGI este detaliat cercetată și descrisă în lucrarea dată (de fapt, la fel ca și aplicația CGI).
Încă o demonstrare a actualității lucrării date este sistemul informațional de consultare a legislației Republicii Moldova aflată în baza de date "JURIST". Acest sistem informațional nu-și are analogii în întreaga lume. Se are în vedere sistemul legat de consultarea legislației anume a Republicii Moldova. Astfel de sistem complet și detaliat a legislației nu-și cunoaște, pînă când concurenți. Și deci rezultă, că asigurarea accesului distant-dialogat prin Internet la acest sistem informațional nu-și are analogii de asemenea, fapt, care redă lucrării date o actualitate destul de evidentă.
2 DESCRIEREA TEHNICA A REZULTATELOR
2.1 Analiza tehnologilor existente
2.1.1 Interfața CGI
Pentru ca serverul Web să fie întradevăr interactiv, el trebuie să realizeze schimb de informație cu clientul, dar nu numai să ofere posibilitatea de a călători prin ancore. Folosind programele Common Gateway Interface (CGI – scripturi), e posibilă realizarea paginilor Web active, a datelor dinamice. Folosind scritpul CGI, serverul poate primi cereri și răspunde la ele. Reieșind din faptul că CGI alcătuiește documente HTML în timpul lucrului sistemului, utilizatorul lucrează cu pagini Web dinamice. E posibilă chiar și generarea paginilor aleatoare, astfel ca fiecare utilizator ce vizitează serverul să primească cu totul altă pagină ca precedentul său, în (sensul designului paginii). Browserul interacționează cu serverul prin intermediul unei tranzacții HTTP, care constă din patru pași. Scriptul CGI se află pe server faptul, ce asigură o legătură directă dintre program și server. Acest proces permite scriptului CGI să primească datele dinamic și să le trimită serverului.
După cum s-a vorbit mai sus, pentru a trimite informație serverului Web, se folosesc formele HTML, care conțin elemente de conducere și diferite tipuri de elemente interogatoare. Când utilizatorul completează forma și clichează butonul de tipul Submit, datele din câmpurile acestei forme sunt transmise navigatorului Web împreună cu denumirile acestor câmpuri. În rândul său, serverul analizează aceste date și lansează programul CGI, calea către care este indicat în operatorul <FORM> de descriere a formei. Înainte de lansarea programului CGI serverul Web alege, în dependență de valoarea parametrului METHOD a operatorului <FORM>, una din două metode de transmitere a datelor primite pentru prelucrare. Aceste două metode sunt : GET și POST.
2.1.1.1 Metoda GET
Metoda GET presupune transmiterea datelor programei CGI prin intermediul variabilelor mediului (environment variables). Serverul Web creează pentru programul CGI destul de multe variabile ale mediului. Numele și valoarea fiecărei din ele se poate ușor de aflat în cadrul unei programe CGI. Dar cea mai importantă variabilă a mediului pentru identificarea datelor primite de la utilizator este variabila QUERY_STRING. Anume aici nimeresc datele din câmpurile formei. Aceste date se află în următorul format:
nume1=valoare1&nume2=valoare2& nume3=valoare&3
Aici în calitate de nume se folosesc valorile parametrilor NAME, care indică numele câmpurilor formei. Ca valori se trimit datele din câmpurile respective. Scanând conținutul rândului textual al variabilei mediului QUERY_STRING, programul CGI poate găsi în ea numele oricărui câmp necesar și corespunzător acestui nume valoarea câmpului. Trebuie de accentuat faptul că datele din câmpurile goale și comutatoarele întrerupte ale formei nu se trimit serverului, din această cauză nu întotdeauna se poate întâlni numele tuturor câmpurilor ce se conțin în formă. Adresa rândului dat al variabilei mediului se poate ușor de aflat în cadrul programului alcătuit în limbajul C, cu ajutorul funcției getenv:
char * szQUERY_STRING;
szQUERY_STRING = getenv("QUERY_STRING");
În cazul necesității modificării rândului variabilei mediului, e necesar de o copiat în buferul intern. Sistemul operațional al serverului Web poate să nu permită redactarea directă a blocului de memorie, în care se conțin variabilele mediului. Rândul transmis în variabila mediului QUERY_STRING este codificat cu ajutorul așa numitei codificări URL. În această codificare toate simbolurile de spațiu se înlocuiesc cu simbolul "+". În afară de aceasta, pentru prezentarea codurilor simbolurilor de conducere și a altor simboluri se folosește o consecutivitate de simboluri de tipul: %xx, unde simbolurile xx prezintă un cod hexazecimal al simbolului în formă de două simboluri ASCII.
2.1.1.2Metoda POST
În cazul folosirii metodei POST programul CGI primește datele prin șirul standard de intrare STDIN. Dacă programul CGI e alcătuită în limbajul C, atunci pentru a primi datele se poate de folosit funcțiile fread sau scanf.
Ceea ce privește volumul în baiți ale datelor, pe care trebuie de-l citit din șirul standard de intrare, această informație se transmite programului CGI prin variabila mediului cu numele CONTENT_LENGHT. Iată un mic exemplu:
int Size;
Size = atoi(getenv("CONTENT_LENGHT"));
(aici funcția atoi execută translarea rândului textual în valoare numerică.)
Iar datele de intrare pot fi primite, după aceasta, în felul următor:
fread(szBuf, Size, 1, stdin);
(aici funcției fread i se transmit adresa buferului pentru înscrierea datelor primite,volumul datelor, numărul de bufere necesare de citit și șirul stdin.
2.1.1.3 Diferența între metodele GET și POST
Diferența esențială între aceste două metode este volumul formei HTML de prelucrat.
Metoda GET de obicei se folosește pentru prelucrarea formelor nu prea mari, din cauza că
navigatoarele impun restricții pentru volumul datelor ce se transmit prin variabila mediului QUERY_STRING.
Iar metoda POST nu impune restricții asupra volumului datelor transmise. Din acest punct de vedere metoda POST are avantaje în comparație cu metoda GET. În lucrarea dată, după cum se va vedea mai departe, se folosește o formă HTML nu prea mare, ce conține câteva elemente. Din această cauză e preferabil de folosit metoda GET.
2.1.1.4 Transmiterea răspunsului din programul CGI
În dependență de metoda folosită de transmitere a datelor (GET sau POST) rezultatul lucrului său programul CGI trebuie să transmită în șirul standard de ieșire STDOUT. Dacă programul este scris în limbajul C, atunci aceasta se poate ușor de făcut cu ajutorul funcțiilor printf sau fwrite.
În majoritatea cazurilor programele CGI se folosesc pentru crearea documentelor HTML dinamice pe baza datelor primite din forme. În acest caz primul rând, necesar de introdus în șirul standard de ieșire STDOUT trebuie să fie următorul rând al titlului HTTP.
Content-type: text/html
Imediat după acest rând trebuie de introdus încă un rând gol ce va despărți titlul HTTP și datele documentului HTML. Mai jos e prezentat un exemplu, în care programul CGI formează un document HTML dinamic și îl scoate în șirul standard de ieșire STDOUT:
printf("Content-type: text/html\n\n");
printf("<!DOCTYPE HTML PUBLIC\"-//W3C//DTD HTML3.2//EN\">");
printf("<HTML><HEAD><TITLE>Exemplu</TITLE></HEAD>
<BODY BGCOLOR=#FFFFFF>");
printf("<Rezultatul prelucrării formei"); …..
printf("</BODY></HTML>");
2.1.1.5 Variabilele mediului programei CGI
Variabilele mediul au o însemnătate deosebită în cadrul serviciului distant – dialogat în Internet. Prin intermediul acestor variabile se transmite nu numai rezultatul îndeplinirii formei HTML, dar și alte date destul de importante. Mai jos sunt descrise variabilele valorile cărora sunt atribuite de către server în timpul îndeplinirii scriptului:
Variabila AUTH_TYPE. Este folosită de către script pentru identificarea utilizatorului, care încearcă să primească acces la script. În cazul configurării serverului ca să accepte identificarea utilizatorului, acesta din urmă trebuie să indice numele și parola.
Variabila CONTENT_LENGHT. E folosită pentru determinarea numărului precis de baiți ce se conțin în informația aderată.
Variabila CONTENT_TYPE. E folosită pentru interpelări, care conțin informația aderată. Așa tip de interpelare este și operația-HTTP POST. Informația ce se conține în această variabila indică tipul datelor aderate (MIME-tip/subtip).
Variabila GATEWAY_INTERFACE. E folosită pentru determinarea versiunea, numărul de fabricare a specificației CGI, care satisface serverul Web. Formatul numărului fabricării al specificației CGI este: CGI/număr.
Această variabila are caracteristică comună cu variabilile SERVER_SOFTWARE și SERVER_NAME în privința faptului că ele nu sunt o specificare pentru o interpelare oarecare și se instalează pentru toate interpelările odată. Variabilile următoare sunt specifice pentru fiecare interpelare, executată de script.
Variabila PATH_INFO. Se folosește pentru determinarea căilor asigurate pentru client. Cu alte cuvinte, server se poate adresa către script folosind calea virtuală către script, după care se află informație adăugătoare despre cale. Programa serverului trebuie să decodifice această informație adăugătoare, dacă ea a venit de la un URL oarecare, înainte ca serverul să o transmită scriptului. De obicei această informație indică resursa, pe care scriptul trebuie să-l întoarcă în caz de executare cu succes a cererii. Calea se scrie în formă relativă, unde ca bază se ia catalogul rădăcină a serverului.
Variabila PATH_TRANSLATED. Se folosește pentru primirea informației finale, viabile ce ține de cale. Serverul traduce informația acestei variabili prin modificările necesare ale căii.
Variabila QUERY_STRING. Se folosește pentru primirea informației în formă textuală, care e amplasată în partea dreaptă de la URL-ul, transmis de la utilizator scriptului pentru prelucrare. Acest rând textual conține intrare pentru script. Apoi serverul înlocuiește în cadrul acestui rând fiecare probel cu semnul +, iar toate simbolurile tipărite cu simbolul %dd, unde d este bază pentru sistema zecimală de numerație. Scriptul trebuie să conțină un cod pentru descifrarea acestui rând textual. Transmițând această informație scriptului, serverul nu trebuie s-o analizeze, nici s-o descifreze. Acest lucru este realizat de script.
Variabila REMOTE_ADDR. Se folosește pentru determinarea adresei IP a calculatorului (browserului) distanțat, ce efectuiază interpelarea către server.
Variabila REMOTE_HOST. E folosită pentru determinarea numelui nodului , de la care se efectuiază interpelarea. În cazul, când serverul nu știe numele nodului dat, el trebuie să atribuie variabilei REMOTE_ADDR o valoare și să nu-i atribuie variabilei REMOTE_HOST nici o valoare.
Variabila REMOTE_IDENT. Se folosește pentru identificarea numelui utilizatorului distanțat, care face interpelarea. Scriptul folosește această variabilă pentru înregistrarea utilizatorului.
Variabila REMOTE_USER. E folosită pentru identificarea numelui utilizatorului distanțat fără numele nodului dat. Dacă serverul susține identificarea utilizatorului și scriptul este apărat, atunci serverul va determina numele utilizatorului distanțat și-l va atribui acestei variabile .
Variabila REQUEST_METHOD. Se folosește pentru determinarea tipului cererii HTTP (GET,POST,HEAD), care a fost trimis de către browser la server și e folosit pentru chemarea scriptului.
Variabila SCRIPT_NAME. E folosită pentru determinarea căii virtuale către script, care va fi lansat de către server.
Variabila SERVER_NAME. Se folosește pentru determinarea numelui domenului sau a adresei IP a calculatorului pe care e instalat serverul Web.
Variabila SERVER_PORT. E folosită pentru determinarea numărului portului, care e folosit de către client pentru legătura cu serverul Web. Dacă se folosește portul HTTP tacit, atunci el are valoarea 80.
Variabila SERVER_PROTOCOL. Se folosește numele și numărul protocolului, folosit de către client pentru a trimite cerere către server. Analizând conținutul acestei variabile, scriptul poate identifica numele și numărul protocolului, care va fi folosit în timpul transmiterii datelor către server. Formatul numelui și numărului protocolului este următor: protocol/număr.
Variabila SERVER_SOFTWARE. Se folosește pentru determinarea numele programului serverului Web și numărul versiunei ei. Formatul numelui cerverului Web și a numărului versiunii trebuie să fie transmis de către script astfel : nume/versiune.
Variabila HTTP_ACCEPT. E folosită pentru determinarea tipurilor MIME, care pot fi folosite de către browser. Ele sunt determinate în titlurile HTTP, trimise serverului de către browser. Tipul MIME se identifică în felul următor: tip/extensie. Dacă sunt prezente mai multe tipuri, atunci ele se despart prin virgulă.
Variabila HTTP_USER_AGENT. E folosită pentru identificarea tipului browserului, care trimite cerere serverului.
Programul serverului, care cheamă scriptul, poate determina și alte variabile ale mediului. Aceste variabile sunt descrise în documentația serverului Web corespunzător.
2.1.1.6 Opțiunile rândului de comenzi CGI
De obicei scriptele CGI folosesc rândul de comandă în calitate de intrare cu scopul executării cererii ISINDEX, care permite adăugarea căutării interactive cu ajutorul cuvintelor cheie în documentul HTML. Însă nu toate programele de server susțin interpelarea ISINDEX. Browserul trimite cererea în formă de rând de comandă serverului. Programa serverului poate identifica rândul comandă de intrare, determinând faptul dacă a folosit browserul metoda-HTTP GET și conține oare rândul-comandă simboluri URI uuencoded=. Dacă browserul folosește metoda GET și rândul de căutare URI nu conține simbolurile uuencoded=, atunci interpelarea se face în formă de rând-comandă. Înainte de chemare de către server a scriptului CGI corespunzător, programa de server trebuie să împărțească rândul-comandă folosind semnul + pentru despărțirea parametrilor. Apoi serverul îndeplinește o decodificare adăugătoare (în caz de necesitate) pentru fiecare parametru, trimis în rândul URI de căutare și păstrează fiecare parametru-rând într-un masiv numit argv.
Decodificarea adăugătoare, îndeplinită de server, constă în despărțirea unor rânduri diferite, folosind ampersandul (&) în calitate de despărțitor. Apoi serverul desparte fiecare din aceste din aceste rânduri din nou, folosind simbolul (=) pentru despărțirea numelui variabilei, care se amplasează la stânga de la semnalul (=), de la valoarea variabilei, care e amplasată în dreapta semnalului (=). Serverul păstrează numărul elementelor, ce se conțin în masivul argc.
Dacă serverul a găsit semnalul de egalitate în componența rândului QUERY_STRING al variabilei mediului, atunci el nu va trimite un rând-comandă în calitate de intrare în scriptul CGI. De asemenea, dacă dintr-o cauză oarecare programul serverului nu poate trimite masivul argv scriptului CGI, el asigură informație necodificată a cererii în variabila mediului QUERY_STRING.
2.1.1.7 Intrarea standardă (STDIN)
Când browserul interpelează la server (de exemplu, folosind metoda-HTTP POST), informația primită de scriptul CGI, vine din descriptorul intrării STDIN. Programul de server trimite scriptului CGI variabila mediului CONTENT_LENGHT. Această variabilă conține numărul de baiți trimiși de către server scriptului prin acest descriptor. Scriptul CGI poate folosi valoarea variabilei CONTENT_LENGHT pentru determinarea volumului de date care trebuie să intre din intrarea standardă stdin. Serverul, de asemenea oferă scriptului variabila CONTENT_TYPE, care ajută scriptului să determine cum anume să prelucreze datele venite. La sfârșitul acestui șir de date serverul poate trimite (sau nu) marcatorul de sfârșit de fișier. Însă anume scriptul trebuie să determine volumul de date necesare de citit folosind variabila mediului CONTENT_LENGHT.
2.1.1.8 Ieșirea standardă (STDOUT)
După ce scriptul termină prelucrarea datelor primite de la server, el trebuie să trimită răspunsul său către server. Pentru aceasta el pur și simplu trimite răspunsul descriptorului de fișier al ieșirii standarde STDOUT. În caz general datele trimise de script serverului prezintă un răspuns HTTP, care include în sine titlul, după care urmează un rând gol și după el – cealaltă parte a răspunsului. De obicei ca ieșire de la script este un document HTML format de însăși scriptul.
2.1.1.9 Răspunsul direct al scriptului CGI browserului
De obicei scriptul CGI trimite răspunsul, care este interpretat de către server și trimis înapoi browserului. Un avantaj al trimiterii datelor de ieșirii de la script serverului este faptul, că scriptul, în acest caz, nu-i obligat să trimită titlul complet HTTP pentru fiecare interpelare. Însă există scripturi, care ușurează lucrul serverului și trimite datele direct browserului. Pentru a deosebi aceste scripturi de la cele care trimit datele browserului prin server, protocolul CGI cere ca numele scripturilor, ce efectuiază trimiterea directă a răspunsurilor către browser, să încapă cu literele nph- (care indică serverului Not to Parse the Header – nu analiza titlul). Dacă numele scriptului CGI se începe cu nph-, atunci serverul nu va include titlul în datele scriptului. În așa caz răspunderea pentru un răspuns HTTP corect browserului cade pe script.
2.1.1.10 Titluri CGI
Datele de intrare ale scriptului CGI se încep cu titlu. Acest titlu constă din rândul textual în acela format ca și titlul HTTP, terminându-se cu un rând gol. Dacă datele de ieșire ale scriptului CGI conțin titluri, ce nu sunt niște directive către server, atunci serverul trimite aceste titluri nemijlocit browserului în răspuns la cererea lui. Specificarea curentă CGI determină trei directive serverului :
– Content – type;
– Location;
– Status.
Câmpul Content-type în titlul CGI determină tipul/extensia datelor MIME, care sunt trimise de către script înapoi browserului. De obicei scriptul CGI trimite la ieșire un document HTML. În acest caz titlul CGI Content-type are valoarea :
Content-type: text/html
Câmpul Location al titlului CGI indică la document. De obicei scriptul folosește câmpul Location pentru a indica amplasarea documentului. În caz dacă documentul se află nu pe server și valoarea câmpului Location este URL, serverul indică browserului nodul Web corespunzător. Iar dacă documentul se află pe server și câmpul Location prezintă o cale virtuală, serverul trimite acest document browserului.
Câmpul Status al titlului CGI conține valoarea statutului HTTP, care este trimis de către server la browser de la script. Serverul, care cheamă scriptul CGI, folosește diferite coduri de statut HTTP.
2.1.1.11 Un exemplu de script CGI cu folosirea limbajului C
Pentru crearea scripturilor se poate de folosit câteva limbaje de programare printre care și C, C++, Perl ș.a. Datorită popularității limbajului C primul exemplu de script analizat în această lucrare este prezentat în limbajul C.
Scriptul de mai jos se numește CGI_ENV.C și îndeplinește vizualizarea variabilelor mediului ale serverului ce se transmit scriptului CGI.
//
// CGI example showing all environment variables
//
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
struct Environment {
char *Auth_Password;
char *Auth_Type;
char *Auth_User;
char *Content_Length;
char *Content_Type;
char *Gateway_Interface;
char *HTTP_Accept;
char *HTTP_From;
char *HTTP_Referer;
char *HTTP_User_Agent;
char *Path_Info;
char *Path_Translated;
char *Query_String;
char *Remote_Addr;
char *Remote_Host;
char *Remote_Ident;
char *Remote_User;
char *Request_Method;
char *Server_Name;
char *Server_Port;
char *Server_Protocol;
char *Server_Software;
char *Script_Name;
char *Server_Admin;
};
void main(void)
{
struct Environment EV;
EV.HTTP_Accept = getenv("HTTP_ACCEPT");
EV.Auth_Password = getenv("AUTH_PASSWORD");
EV.Auth_Type = getenv("AUTH_TYPE");
EV.Auth_User = getenv("AUTH_USER");
EV.Content_Length = getenv("CONTENT_LENGTH");
EV.Content_Type = getenv("CONTENT_TYPE");
EV.HTTP_From = getenv("HTTP_FROM");
EV.Gateway_Interface = getenv("GATEWAY_INTERFACE");
EV.Path_Info = getenv("PATH_INFO");
EV.Path_Translated = getenv("PATH_TRANSLATED");
EV.Query_String = getenv("QUERY_STRING");
EV.HTTP_Referer = getenv("HTTP_REFERER");
EV.HTTP_User_Agent = getenv("HTTP_USER_AGENT");
EV.Remote_Addr = getenv("REMOTE_ADDR");
EV.Remote_Host = getenv("REMOTE_HOST");
EV.Remote_Ident = getenv("REMOTE_IDENT");
EV.Remote_User = getenv("REMOTE_USER");
EV.Request_Method = getenv("REQUEST_METHOD");
EV.Script_Name = getenv("SCRIPT_NAME");
EV.Server_Admin = getenv("SERVER_ADMIN");
EV.Server_Name = getenv("SERVER_NAME");
EV.Server_Port = getenv("SERVER_PORT");
EV.Server_Protocol = getenv("SERVER_PROTOCOL");
EV.Server_Software = getenv("SERVER_SOFTWARE");
// Make a dynamic HTML file full of Environment
// Variables
printf("Content-type: text/html\n");
printf("\n");
printf ("<!DOCTYPE HTML PUBLIC \"-//W3O//DTD W3 HTML3.2//EN\">\n");
printf("<HTML>\n");
printf("<HEAD><TITLE>Show Environment Variables</TITLE></HEAD>\n");
printf("<BODY>\n");
printf("<H1>Environment Variables</H1>\n");
printf("<HR>\n");
printf("<B>\"Null\" values are empty</B>\n");
printf("<UL>\n");
printf("<LI>HTTP_ACCEPT is %s\n", EV.HTTP_Accept);
printf("<LI>AUTH_PASSWORD is %s\n", EV.Auth_Password);
printf("<LI>AUTH_TYPE is %s\n", EV.Auth_Type);
printf("<LI>AUTH_USER is %s\n", EV.Auth_User);
printf("<P><B>Content Type and Content Length are used with the HTTP POST method</B>\n");
printf("<LI>CONTENT_TYPE is %s\n", EV.Content_Type);
printf("<LI>CONTENT_LENGTH is %s\n", EV.Content_Length);
printf("<LI>HTTP_FROM is %s\n", EV.HTTP_From);
printf("<LI>GATEWAY_INTERFACE is %s\n", EV.Gateway_Interface);
printf("<LI>PATH_INFO is %s\n", EV.Path_Info);
printf("<LI>PATH_TRANSLATED is %s\n", EV.Path_Translated);
printf("<LI>QUERY_STRING is %s\n", EV.Query_String);
printf("<LI>HTTP_REFERER is %s\n", EV.HTTP_Referer);
printf("<LI>REMOTE_ADDR is %s\n", EV.Remote_Addr);
printf("<LI>REMOTE_HOST is %s\n", EV.Remote_Host);
printf("<LI>REMOTE_IDENT is %s\n", EV.Remote_Ident);
printf("<LI>REQUEST_METHOD is %s\n", EV.Request_Method);
printf("<LI>REMOTE_USER is %s\n", EV.Remote_User);
printf("<LI>SCRIPT_NAME is %s\n", EV.Script_Name);
printf("<LI>SERVER_NAME is %s\n",EV.Server_Name);
printf("<LI>SERVER_PORT is %s\n", EV.Server_Port);
printf("<LI>SERVER_PROTOCOL is %s\n", EV.Server_Protocol);
printf("<LI>SERVER_SOFTWARE is %s\n", EV.Server_Software);
printf("<LI>SERVER_ADMIN is %s\n", EV.Server_Admin);
printf("<LI>HTTP_USER_AGENT is %s\n", EV.HTTP_User_Agent);
printf("</UL>\n");
printf("</BODY>\n");
printf("</HTML>\n");
}
După cum se vede, acest program folosește structura limbajului C Environment pentru păstrarea indicatorilor la variabilile mediului. Programul folosește funcția getenv a bibliotecii de timp a executării pentru primirea valorii fiecărei variabile și păstrează aceste valori în masivul env.
Programul, de asemenea, trimite rândul Content-type: text/html descriptorului de fișiere STDOUT, după care urmează simbolul de trecere la începutul rândului și simbolul de trecere în alt rând, ceea ce face să apară după câmpul Content-type un rând obligator curat. Scriptul CGI nu va lucra corect, dacă după Content-type nu urmează un rând curat.
Apoi programul trimite în șirul standard de ieșire o declarație de tip document (cunoscută sub denumirea de identificator-HTML de text) cu scopul de a informa serverul (și browserul) despre faptul că scriptul creează un document HTML ce satisface specificația HTML 3.2. După aceasta programul scrie un tag-HTML standard în STDOUT, după care urmează valoarea fiecărei din variabilile mediului.
Scriptul CGI nu este unicul instrument în realizare a dialogării în Internet. Nodurile în Internrt folosesc pe larg scripturi scrise în limbaje de programare așa ca C/++, Perl ș.a. Însă folosirea scripturilor CGI nu este unicul instrument al realizării lucrului interactiv cu clientul. În afară de scripturi CGI acum se folosesc și alte tehnologii. Astfel Server-Side Assist (SSA) permite serverului singur să prelucreze intrarea utilizatorului și creează, în calitate de răspuns un document HTML, excluzând necesitatea pentru server să îndeplinească alt program, cum în cazul CGI. Adăugător, unele din servere, în loc de îndeplinirea programelor folosesc avantajele API ( Aplicative Programm Interface), care conțin funcții, ce prelucrează intrarea și generează un răspuns HTML. Dar independent de faptul, care metodă e folosită, procesul rămâne acela. Utilizatorul îndeplinește forma HTML și asigurarea soft a serverului o prelucrează generând răspunsul HTML. Fiecare din aceste trei posibilități își are avantajele și dezavantajele sale. Serverul prezintă un program foarte complicat. Și deci, modificarea codurilor de start ale serverului în fiece dată, când e necesar de schimbat prelucrarea formei, prezintă o problemă destul de complicată. E și mai rău faptul că o greșeală în așa fel de cod al serverului poate duce la amenințarea securității sistemului. Avantajul folosirii Server-Side Assist este viteza îndeplinirii. În majoritatea sistemelor operaționale procesul de lansare a programelor cere mult timp. Acordând serverului posibilitate singur să răspundă la cererea clientului, Server-Side Assist exclude necesitatea de lansare a diferitor programe.
Avantajul principal al scripturilor CGI este faptul, că ele sunt foarte simple în utilizare. Întradevăr, în multe surse se subliniază faptul, că scripturile CGI sunt într-atât de simple, că chiar și neprofesioniștii ar putea să scrie astfel de scripturi. Părerea aceasta este corectă în cazul unor scripturi simple și scurte.
În sfârșit, un avantaj al API-urilor , așa ca Microsoft Internet Server API (ISAPI), este faptul că nu-i necesitate de a instala pe server un soft special. Din această cauză procesul se simplifică.
2.1.2 Interfața ISAPI
Aplicațiile ISAPI (Internet Server Aplication Programm Interface) adaugă posibilități noi serverului Microsoft Information Server (și la alte tipuri de servere). Aceste aplicații se pot împărți în două grupe: extensii ISAPI și filtre ISAPI.
Extensiile ISAPI prin destinația sa amintesc programele CGI. Însă în comparație cu acestea extensiile sunt îndeplinite în formă de biblioteci dinamice DLL, fapt ce atribuie tehnologiei ISAPI un șir de avantaje. Analog programelor CGI , extensiile ISAPI primesc datele de la navigator (prin intermediul unei forme HTML îndeplinite), le prelucrează și trimit navigatorului răspuns. Însă în loc de citire a conținutului variabilelor mediului și a șirului standard de intrare STDIN, extensia ISAPI primește datele de la client cu ajutorul unor funcții speciale. Analogic, în loc de înscrierea datelor de ieșire în șirul standard de ieșire STDOUT, extensia ISAPI cheamă o funcție specială.
Filtrele ISAPI de asemenea sunt realizate în formă de biblioteci dinamice DLL, însă au o altă destinație. Filtrele ISAPI au posibilitatea de a controla tot șirul de date, ce trece prin server la nivelul protocolului HTTP. Din această cauză ele se pot aplica pentru extensia astfel de probleme ca cifrarea sau codificarea din nou a datelor, compresia informației, crearea procedurilor personale de conectare a utilizatorilor la sistem și autentificarea lor ( controlul identificării utilizatorilor), de asemenea pentru culegerea informației statice de folosire a resurselor serverelor de către utilizatorii distanțiați.
2.1.2.1Principiul de lucru și structura extensiei ISAPI
Extensia ISAPI e realizată în formă de biblioteci dinamice DLL. Adresarea la așa tip de bibliotecă se efectuiază în documentele HTML analog cu cazul adresării către programele CGI din forme sau ancore, create corespunzător cu ajutorul operatorilor <FORM> și <A>.
Cînd utilizatorul se adresează la extensia ISAPI, biblioteca DLL corespunzătoare se încarcă în spațiul de adrese al serverului Microsoft Information Server și devine o parte a lui. Din cauza că extensia ISAPI lucrează în cadrul procesului serverului Microsoft Information Server și nu în cadrul unui proces aparte (ca și în cazul lansării programelor CGI), ea poate folosi toate resursele accesibile serverului. Acest fapt duce la mărirea productivității.
Alt moment important, ce contribuie la mărirea productivității, este posibilitatea folosirii active a extensiei ISAPI de către mai mulți utilizatori în acelaș timp. Dacă, de exemplu, mai mulți utilizatori se adresează în acelaș timp la unul și același program CGI, atunci pentru fiecare utilizator în parte va fi creat un proces aparte pe server. Evident, acest fapt va duce la scăderea productivității și vitezei serverului. Însă, dacă pe server va apărea aceiași situație pentru extensia ISAPI, atunci în memoria procesului de pe server va fi încărcată o bibliotecă dinamică DLL a extensiei, care va lucra în regim multiactiv. Evident, cu așa regim de lucru , sunt excluse cheltuieli mari de resurse ale sistemului.
Continuând comparația programelor CGI și extensiilor ISAPI trebuie de accentuat faptul că, necătând la performanța în viteza de lucru a extensiei ISAPI în comparație cu programele CGI, ultimele de asemenea își au avantajele sale. Din cauza că extensia ISAPI se lansează și lucrează în cadrul unui proces pe server, există necesitatea de a exclude orice greșeală a ei. O greșeală, cât de mică în cadrul extensiei ISAPI poate duce la situație avariată a întregului server Microsoft Information Server. Programele CGI, care sunt lansate în cadrul unui proces aparte de server, în cadrul spațiului de adrese propriu, practic nu pot dace la unele defecte ale serverului, excluzând stoparea lui. Dacă în cadrul programului CGI apare o greșeală, atunci aceasta duce la terminarea avariată a unui proces aparte și nu a serverului întreg.
2.1.2.2 Chemarea extensie ISAPI de către server
Structura extensiei ISAPI este destul de simplă. Vorbind în termenii limbajului C, biblioteca DLL trebuie să exporte numai două funcții nu numele GetExtensionVersion și HttpExtensionProc. Prima e folosită de extensia ISAPI pentru a anunța serverului versiunea specificației ce-i corespunde și rândul de descriere a extensiei. Funcția HttpExtensionProc îndeplinește transmiterea datelor între extensie și server. Adăugător extensia ISAPI poarte exporta funcția TerminateExtension, care e chemată de server înainte de ștergerea din memorie a extensiei ISAPI care si-a terminat lucrul. Funcția TerminateExtension eliberează resursele ocupate dinamic în timpul inițializării extensiei ISAPI.
Funcția GetExtensionVersion. Această funcție este destul de simplă fapt, care este evident în cadrul următorului exemplu realizat în limbajul C:
// Funcția GetExtensionVersion
BOOL WINARI GetExtensionVersion(HSE_VERSION_INFO *pVersion)
{
pVersion->dwExtensionVersion =
MAKELONG(HSE_VERSION_MINOR, HSE_VERSION_MAJOR);
Istrcpyn(pVersion->IpszExtensionDesc,
"Remote File Upload", HSE_MAX_EXT_DLL_NAME_LEN);
return TRUE;
}
La chemarea funcției GetExtensionVersion se transmite un indicator la structura de tipul HSE_VERSION_INFO. Această structură și indicatorul ei LPHSE_VERSION_INFO sunt determinate în fișierul httpext.h în feșlul următor:
#define HSE_MAX_EXT_DLL_NAME_LEN 256
typedef struct _HSE_VERSION_INFO
{
DWORD dwExtensionVersion;
CHAR IpszExtensionDesc[HSE_MAX_EXT_DLL_NAME_LEN];
} HSE_VERSION_INFO, *LPHSE_VERSION_INFO;
Constantele HSE_VERSION_MINOR și HSE_VERSION_MAJOR indică versiunea curentă a interfeței extensiei ISAPI și deasemenea sunt determinate în fișierul httpext.h:
#define HSE_VERSION_MAJOR 2 // numărul de sus a versiunii.
#define HSE_VERSION_MINOR 0 //numărul de jos a versiunii.
Funcția HttpExtensionProc. Această funcție este exportată de către biblioteca DLL a extensiei ISAPI și își are următorul prototip:
DWORD WINARI HttpExtensionProc(EXTENSION_CONTROL _BLOCK *pECB);
Această funcție primește un singur parametru – indicatorul la o structură de tipul EXTENSION_CONTROL_BLOCK determinată în fișierul httpext.h :
typedef struct _EXTENSION_CONTROL_BLOCK
{
DWORD cbSize; // volumul structurii în baiți
DWORD dwVersion; //versiunea specificației ISAPI
HCON ConnID; //identificatorul canalului
DWORD dwHttpStatusCode; //codul de stare HTTP
CHAR IpszLogData[HSE_LOG_BUFFER_LEN];//rând textual închis cu
//un zero binar, în care se află informația de protocol, specifică //pentri extensia dată
LPSTR IpszMethod; //variabila REQUEST_METHOD
LPSTR IpszQueryString;
LPSTR IpszPathInfo;
LPSTR IpszPathTranslated;
DWORD cbTotalBytes; // volumul total de date primite de la navigator
DWORD cbAvailable; //volumul blocului de date accesibil
LPBYTE IpbData; // indicatorul blocul de date accesibil cu volumul de cbAvailable baiți
LPSTR IpszContentType; //tipul datelor pimite
//Funcția GetServerVariable pentru primirea valorilor variabilelor
BOOL (WINARI *GetServerVariable)(HCONN hConn,
LPSTR IpszVariableName, LPVOID IpvBuffer, LPDWORD IpdwSize);
//Funcția WriteClient pentru trimiterea datelor utilizatorului distanțiat
BOOL (WINARI * WtiteClient)(HCONN ConnID,
LPVOID Buffer, LPDWORD IpdwByres, DWORD dwReserved);
//Funcția ReadClient pentru primirea datelor de la utilizatorul îndepărtat
BOOL (WINARI * ReadClient) (HCONN ConnID,
LPVOID IpvBuffer, LPDWORD IpdwSize);
//Funcție ajutătoare ServerSupportFunction
// pentru îndeplinirea diferitor operații
BOOL (WINARI * ServerSupportFunction)(HCONN hConn,
DWORD dwHSERRequest, LPVOID IpvBuffer,
LPDWORD IpdwSize, LPDWORD IpdwDataType);
} EXTENSION_CONTROL_BLOCK, *LPEXTENSION_CONTROL_
BLOCK.
Acum vom analiza fiecare câmp al acestei structuri în parte.
– cbSize
La începutul structurii EXTENSION_CONTROL_BLOCK se află câmpul cbSize, în care serverul înscrie volumul în baiți a structurii în cazul chemării extensiei.
– dwVersion
Câmpul dwVersion conține numărul versiunei extensiei ISAPI. Valorile de sus și de jos a versiunei se poate afla cu macrocomenzile HIWORD și LOWORD.
– ConnID
În acest câmp serverul înscrie identificatorul canalului creat pentru extensie. Valoarea acestui câmp nu trebuie să fie schimbată de programator.
– dwHttpStatusCode
Acest câmp este îndeplinit de extensia ISAPI. Aici se înscrie rezultatul terminării operației. În caz de terminării cu succes în câmp se înscrie valoarea 200.
– lpszLogData
Este destinat pentru înscrierea mesajului despre îndeplinirea tranzacției în jurnalul sereverului Web. Acest mesaj trebuie să fie în formă de rând textual, închis cu un zero. Volumul rândului, în baiți, nu trebuie să depășească valoarea HSE_LOG_BUFFER_LEN.
– lpszMethod
Acest câmp e îndeplinit de server și conține denumirea metodei de transmitere a datelor de la utilizatorul îndepărtat către server în formă de rând textual, închis de un zero binar. Extensiile ISAPI folosesc aceleași metode folosite de programele CGI – GET și POST. Acest câmp e echivalent cu variabila mediului REQUEST_METHOD, folosită de programul CGI.
– lpszQueryString
Corespunde variabilei QUERY_STRING. Aici se înscriu datele primite de la utilizatorul îndepărtat prin intermediul metodei GET.
– lpszPathInfo
E folosit pentru păstrarea căii virtuale către fișierul de program al bibliotecii DLL a extensiei ISAPI. E analog cu variabila PATH_INFO.
– lpszPathTranslated
Conține calea fizică către fișierul de program al bibliotecii DLL a extensiei ISAPI. E analog cu variabila CGI – PATH_RTRANSLATED.
– cbTotalBytes
Aici se înscrie vulumul total de baiți necesar de primit de la utilizatorul distanțiat.
– cbAvailable
E folosit pentru păstraea volumului blocului de date primite de la utilizatorul distanțiat automat. Volumul acestui bloc nu trebuie să depășească valoarea de 48 Kb, ceea ce-i destul pentru prelucrarea datelor primite din forme HTML de mărime obișnuită.
– lpbData
Este un indicator la regiunea de date, în care este este înscris blocul de date primit de la client cu mărimea de cbAvailable baiți.
– lpszContentType
Conține tipul datelor primite. Ca exemplu: text/html.
– GetServerVariable
În afară de câmpurile de date structuraEXTENSION_CONTROL_ BLOCK conține indicatori la funcții. Cu ajutorul acestor funcții extensia ISAPI poate îndeplini diferite operații, așa ca primire adatelor de la client.
Câmpul GetServerVariable conține indicatorul la funcția cu ajutorul căreia extensia ISAPI poate primi informația accesibilă programelor CGI prin intermediul variabilelor mediului.
– WriteClient
În acest câmp se află adresa funcției, pe care extensia ISAPI trebuie s-o folosească pentru trimiterea datelor către client. Ceia ce-i mai simplu ca în cazul programelor CGI.
– ReadClient
Cu ajutorul funcției, adresa căreia se păstrează în câmpul dat, aplicația poate să citească datele adăugătoare ce nu au încăput în buferul de citire prealabilă cu adresa lpbData și volumul nu mai mare de 48 Kb.
– ServerSupportFunction
Aici se păstrează adresa funcției cu ajutorul căreia extensia ISAPI poate îndeplini diferite acțiuni așa ca transmiterea titlului standard al protocolului HTTP și altele.
În caz de îndeplinire corectă, funcția HttpExtensionProc trebuie să întoarcă valoarea HSE_STATUS_SUCCES, iar în caz de greșală – valoarea HSE_STATUS_ERROR. Constantele corespunzătoare sunt determinate în fișierul httpext.h
2.1.2.3 Primirea datelor de către extensia ISAPI
Programul CGI primește datele din variabilile mediului și șirul de intrare STDIN (în cazul metodei POST). Extensia ISAPI face acest lucru altfel.
Funcția HttpExtensionProc primește indicatorul structurii de tipul EXTENSION_CONTROL_BLOCK, unele câmpuri ale cărei se îndeplinesc de server și trebuie să se folosească pentru primirea datelor de intrare. Acestea sunt câmpurile lpszQueryString, lpszMethod și altele. Prin structura EXTENSION_CONTROL_BLOCK se transmit adresele funcțiilor GetServerVariable și ReadClient, special destinate pentru primirea datelor de la navigatorul utilizatorului distanțiat.
Funcția GetServerVariable.
Prototipul acestei funcții e determinat în structura EXTENSION_ CONTROL_BLOCK descrisă puțin mai sus.
//Funcția GetServerVariable pentru primirea valorilor variabilelor
BOOL (WINARI *GetServerVariable)(HCONN hConn,
LPSTR IpszVariableName, LPVOID IpvBuffer, LPDWORD IpdwSize);
Prin parametrul hConn programatorul trebuie să transmită acestei funcții identificatorul canalului, primit prin câmpul ConnID al structurii
EXTENSION_CONTROL_BLOCK.
Parametrul lpszVariableName trebuie să conține indicatorul la rândul numelui variabilei necesare. Conținutul acestei variabile va fi înscris în buferul, adresa căruia se transmite prin parametrul lpvBuffer, iar volumul – prin parametrul lpdwSize.
Mai jos sun enumerate valorile posibile ale rândurilor, transmise prin parametrul lpszVariableName.
– AUTH_TYPE
Variabila mediului AUTH_TYPE conține tipul identificării folosit de server.
– HTTP_ACCEPT
Conține tipurile datelor MIME, care pot fi primite de către navigator de la serverul Web.
– CONTENT_LENGHT
Conține volumul de baiți ale datelor, pe care trebuie să le primească extensia ISAPI de la client.
– CONTENT_TYPE
Tipul datelor, trimise de client.
– PATH_INFO
Calea către catalogul virtual în care se află biblioteca DLL a extensiei ISAPI.
– PATH_TRANSLATED
Calea fizică către biblioteca DLL.
QUERY_STRING
Rândul de parametre indicat în formă, se situiază dupu URL-ul bibliotecii DLL urmând simbolul "?".
– REMOTE_ADDR
Adresa IP a nodului unde lucrează navigatorul utilizatorului distant.
– REMOTE_HOST
Nmele de domen al nodului clientului. Dacă această informație nu-i accesibilă, atunci în loc de numele de domen se indică adresa IP, analog ca în variabila REMOTE_ADDR.
– REMOTE_USER
Numele utilizatorului folosit de navigator pentru autentificare.
– UNMAPPED_REMOTE_USER
Numele utilizatorului pentru prelucrare de către filtrul ISAPI, care se folosește de către navigator pentru autentificare.
– REQUEST_METHOD
Metoda de acces folosit pentru transmiterea datelor de la client la serverul Web.
– SCRIPT_NAME
Calea la catalogul virtual și numele bibliotecii a extensiei ISAPI. Analizând această variabilă extensia poate determina calea către fișierul său de încărcare.
– SERVER_NAME
Numele de domen al serverului sau adresa IP a serverului Web, dacă numele de domen nu-i accesibil sau nedeterminat.
– SERVER_PROTOCOL
Numele și versiunea protocolului folosit pentru interpelare la extensia ISAPI.
– SERVER_PORT
Numărul portului, la care clientul trimite cererea serverului.
– SERVER_PORT_SECURE
Dacă prelucrarea cererii se îndeplinește printr-un port protejat, atunci în acest rând este înscrisă valoarea 1, în caz invers – 0.
– SERVER_SOFTWARE
Denumirea și versiunea softului serverului Web. Versiunea urmează după denumire și e despărțită de ultima prin simbolul "/".
– ALL_HTTP
Această variabilă conține un rând, în care sunt înscrise valorile tuturor variabilelor legate de protocolul HTTP.
În caz de îndeplinire cu succes a operației funcția GetServerVariable întoarce valoarea TRUE. Iar în caz de greșală – valoarea FALSE.
Codul greșelei se poate determina cu ajutorul funcției GetLastError, chemând-o după funcția GetServerVariable.
Mai jos e prezentat un exemplu de folosire a funcției GetServerVariable pentru determinarea conținutului variabilei ALL_HTTP în buferul szTempBuf.
CHAR szTempBuf[4096];
DWORD dwSize;
dwSize = 4096;
IpECB->GetServerVariable(IpECB->ConnID,
(LPSTR)"ALL_HTTP", (LPVOID)szTempBuf, &dwSize);
strcat(szBuff, szTempBuf);
Funcția ReadClient.
Prototipul funcției ReadClient se află în determinarea structurii EXTENSION_CONTROL_BLOCK și arată în felul următor.
BOOL (WINARI * ReadClient) (HCONN ConnID,
LPVOID IpvBuffer, LPDWORD IpdwSize);
Prin intermediul parametrului hConn al funcției ReadClient trebuie de transmis identificatorul canalului, primit prin câmpul ConnID a structurii
EXTENSION_CONTROL_BLOCK.
Funcția ReadClient citește datele în bufer, adresa căruia se transmite prin parametrul lpvBuffer, iar volumul – prin parametrul lpdwSize.
În cazul succesului funcția întoarce valoarea TRUE, iar în cazul unei greșeli – FALSE. Codul greșelii se poate de primit cu ajutorul funcției GetLastError.
Lucrul cu funcția ReadClient își are particularitățile sale.
Când extensia ISAPI primește conducerea, atunci prin structura de tipul
EXTENSION_CONTROL_BLOCK se transmite adresa blocului de date, primit de la client, care a fost citit prealabil.
Însă volumul datelor citite prealabil nu poate depăși 48 Kb. Dacă toate datele nu au încăput în buferul de citire prealabilă, atunci e necesar de le citit cu ajutorul funcției ReadClient, ținând cont de următorul algoritm:
Întâi de toate trtebuie de comparat volumul datelor citite prealabil cu volumul întreg al datelor necesare de citit(acest volum se transmite în câmpul cbTotalBytes al structurii EXTENSION_CONTROL_BLOCK ).
Dacă toate datele au fost de acum citite, atunci funcția ReadClient nu trebuie chemată. Însă dacă valoarea transmisă prin câmpul cdTotalBytes depășește valoarea cbAvailable, atunci trebuie de folosit funcția ReadClient pentru citirea a (cbTotalBytes – cbAvailable) baiți de date de la utilizator.
După ce datele au fost citite cu succes, funcția ReadClient scrie volumul blocului de date citit în variabila, adresa căreia se transmite prin intermediul parametrului lpdwSize. Dacă la prima chemare valoarea acestui volum este mai mic ca valoarea (cbTotalBytes – cbAvailable) , atunci trebuie de chemat ReadClient încă o dată sau de mai multe ori pentru citirea datelor rămase.
2.1.2.4 Trimiterea datelor de către extensia ISAPI
În loc să înscrie datele de intrare în șirul standard de intrare STDIN, cum aceasta face scriptul CGI, extensia ISAPI folosește pentru transmiterea datelor funcțiile WriteClient și ServerSupportFunction care-și au indicatori ce se transmit către extensia ISAPI prin structura de tipul EXTENSION_ CONTROL_BLOCK.
Funcția WriteClient. Prototipul funcției WriteClient, luat din determinarea structurii EXTENSION_CONTROL_BLOCK, este prezentat mai jos :
BOOL (WINARI * WriteClient) (HCONN ConnID,
LPVOID Buffer, LPDWORD IpdwBytes, DWORD dwReserved);
Prin parametrul hConn al funcției WriteClient se transmite identificatorul canalului, primit prin câmpul ConnID al structurii EXTENSION_ CONTROL_BLOCK.
Funcția WriteClient trimite clientului datele din buferul Buffe totodată, volumul blocului ce se transmite trebuie să fie înscris în variabila de tipul DWORD, adresa căreia se transmite prin parametrul lpdwBytes. Parametrul dwReserved este rezervat pentru extinderea posibilităților funcției.
În cazul succesului funcția întoarce valoarea TRUE, iar în caz de greșeală – FALSE. Codul greșalei se poate de primit cu ajutorul funcției GetLastError.
Funcția ServerSupportFunction. Prototipul funcției ServerSupportFunction, determinat în structura de tipul EXTENSION_CONTROL_BLOCK este următorul :
BOOL (WINARI * ServerSupportFunction) (HCONN hConn,
DWORD dwHSERRequest,LPVOID IpvBuffer,
LPDWORD IpdwSize, LPDWORD IpdwDataType);
Prin intermediul parametrului hConn al funcției ServerSupportFunction se transmite identificatorul canalului primit prin câmpul ConnID al structurii
EXTENSION_CONTROL_BLOCK.
Cu ajutorul parametrului dwHSERRequest se poate de indicat unul dintre coduri de cerere ce determină operația îndeplinită de această funcție.
Prin parametrul lpvBuffer se transmite volumul buferului, care se folosește la îndeplinirea operației. Volumul acestui bufer trebuie să fie înscris în variabila DWORD, adresa căreia se transmite prin parametrul lpdwSize. După îndeplinirea operației de transmitere a datelor în această variabilă va fi înscris volumul blocului de date transmis cu succes.
Parametrul lpdwDataType se folosește pentru a indica rândul adăugator al titlului sau a datelor adăugatoare, care vor fi adăugate la titlul transmis clientului. În cazul dacă pentru parametrul lpdwDataType se indică valoarea NULL (ceea ce-i posibil ), atunci la titlu vor fi adăugate simbolurile de sfârșit al rândului \r\n.
2.1.2.5 Diferenta dintre CGI si ISAPI
Analizând detaliat aceste două tehnologii, care se folosesc pentru asigurarea accesului distant – dialogat prin Internet, CGI și ISAPI, acum va urma alegerea și argumentarea ei a unei tehnologii concrete pentru rezolvarea problemei practice din lucrarea dată : Asigurarea accesului distant – dialogat prin Internet la serverul de consultare a legislației Republicii Moldova.
Pentru a alege o tehnologie din cele două analizate, întâi de toate se va analiza încă o dată pe scurt avantajele și dezavantajele esențiale ale lor.
Deci, un avantaj important al scripturilor CGI este faptul, că ele sunt foarte simple în utilizare. Întradevăr, în multe surse se subliniază faptul, că scripturile CGI sunt într-atât de simple, că chiar și neprofesioniștii ar putea să scrie astfel de scripturi. Părerea aceasta este corectă în cazul unor scripturi simple și scurte.
La rândul lor extensiile ISAPI își au avantajul în faptul că nu-i necesitate de a instala pe server un soft special. Din această cauză procesul se simplifică.
În plus la aceasta : din cauza că extensia ISAPI lucrează în cadrul procesului serverului și nu în cadrul unui proces aparte (ca în cazul lansării programelor CGI), ea poate folosi toate resursele accesibile serverului. Acest fapt duce la mărirea productivității.
Alt moment important, ce contribuie la mărirea productivității, este posibilitatea folosirii active a extensiei ISAPI de către mai mulți utilizatori în acelaș timp.
Acestea au fost argumente puternice în demonstrarea performanței extensiilor ISAPI. Acum va urma analiza dezavantajelor acesteia.
Din cauza că extensia ISAPI se lansează și lucrează în cadrul unui proces pe server, există necesitatea de a exclude orice greșală a ei. O greșală, cât de mică în cadrul extensiei ISAPI poate duce la situație avariată a întregului server.
Programele CGI, care sunt lansate în cadrul unui proces aparte de server, în cadrul spațiului de adrese propriu, practic nu pot duce la unele defecte ale serverului, excluzând stoparea lui. Dacă în cadrul programului CGI apare o greșală, atunci aceasta duce la terminarea avariată a unui proces aparte și nu a serverului întreg.
Încă un plus pentru programele CGI este faptul, că în ziua de astăzi majoritatea serverelor active folosesc tehnologia CGI. Însă acest fapt are loc din cauza că tehnologia ISAPI a apărut comparativ nu demult.
Analizând bine poate argumentele de mai sus s-a ajuns la următorul rezultat: Din cauza că forma HTML, care va asigura interacțiunea interfața a utilizatorului cu serverul va avea un volum destul de mic și pentru o protejare a serverului de la erori, ce pot apărea în script se alege, în calitate de tehnologie pentru rezolvare practică a problemei din cadrul acestei lucrări, Interfața Standardă de Ecluză CGI ( Common Gatway Interface).
2.2 Limbaje de programare
Există câteva limbaje de programare care se pot folosi pentru a scrie scripturi CGI, printre care C/C++, JavaScript și Perl. în cadrul acestiu punct al capitolului se vor analiza aceste limbaje cu scopul de a alege unul mai comod și mai simplu pentru soluționarea problemei în cauză. Crearea scripturilor în limbajul C/C++ a fost analizată mai sus în exemplu concret.
2.2.1 JavaScript
Sunt mai multe metode cu care se poate de transformat o pagină web statică într-una dinamică. O soluție tipică este CGI care se execută pe servere. Utilizatorii interacționează cu o pagină web programată, completând un formular HTML si trimițând la o aplicatie CGI. Aplicația primește datele de intrare, execută niște operații si eventual returnează un rezultat. Acest tip de programare a aplicațiilor web este des folosit la operații cu baze de date, căutări sau vizualizări de cataloage.
Dezvoltarea aplicatiilor de partea serverului, cum ar fi Netscape API (NSAPI), Microsoft Internet Server Application Programming Interface (ISAPI) sau module de server Apache pot să elimine din lipsurile CGI -ului, dar o problemă fundamentală rămâne: serverul trebuie să facă toată munca. Mai mult, punând toate programele de partea serverului, este o soluție destul de ineficientă. Să presupunem că facem o comandă de pantofi via Internet, și din greșeală, în formular introducem un număr de pantof neexistent (în loc de 39 introducem 93). Este imposibil să avem un asemenea număr de pantof, dar formularul chiar si în acest caz este trimis la server, care pierde o vreme cu căutarea numărului cerut. Ar fi o soluție elegantă, ca datele din formular să fie verificate înainte ca ele să fie trimise la server. Rezultatul nu numai că ar fi mult mai prietenos cu privire la utilizator, dar ar economisi și din timpul serverului.
Cu toate că JavaScript a fost creat să prelucreze astfel de situații, este mult mai mult decât un limbaj de validare formulare. S-ar putea imagina JavaScript ca un „lipici" de partea clientului (si nu a serverului) care ține împreună elementele dintr-o pagină Web. El poate determina ce browser folosim, ce plug-in-uri sunt instalate și multe altele necesare pentru a crea o pagină dinamică. Iar cu introducerea tehnologiei Netscape LiveConnect, JavaScript a devenit un limbaj care poate fi utilizat pentru a controla și comunica între obiecte ca plug-in-uri, layere, frames, style sheets și appleturi în paginile Web. Rolul de „lipici" a lui JavaScript nu a fost realizat în întregime, dar are potențialul să devină mai important decât însăsi HTML-ul. JavaScript este un limbaj pentru scrierea scripturilor atât pe partea de server cît și pe partea de client. Netscape susține că JavaScript este destinat neprofesioniștilor în programare și autorilor HTML dar, deși este un mediu mai puțin riguros decît Java, JavaScript este un mediu complet, orientat obiect.
2.2.1.1 Puțină istorie
Nu sînt prea multe de spus despre suportul Java oferit de Netscape. Pe scurt, Netscape a fost primul navigator care a implementat apleturile Java și care a oferit suport pentru clasele de obiecte și un API (Application Progarmming Interface) pentru Java. Istoria JavaScript este și mai scurtă. Liderii de la Netscape povestesc despre primele lor contacte directe cu clienții și despre leitmotivul acestora: "Dați-ne un limbaj de programare suficient de simplu pentru a
putea fi folosit și de neprofesioniștii în programare ca să-și scrie aplicațiile atît pe partea de server cât și pe partea de client. Am auzit că Java este grozav dar limbajul este prea complicat pentru Webmasteri." Dorința lor, afirmă cei de la Netscape, era ca Netscape Corp. să producă limbajul dorit de clienți. Așa s-a născut Netscape Scripting Language. Deși navigatoarele sînt mari și au multe funcționalități, ele sînt în esență prea puțin inteligente. Ele pot aduce, afișa și naviga prin documentele Web și cu asta gata. Navigatoarele pot interacționa cu o mulțime de servere cum ar fi HTTP, FTP sau Gopher dar în esență ele nu sînt altceva decât instrumente de afișare multimedia. Pentru a le face mai inteligente, trebuie de adaugat ceva funcționalități pe partea de client care permit unui document încărcat de navigator să se modifice pe sine sau să producă schimbări în navigator. Scripturile (mici programe necompilate, format text, care sînt interpretete în momentul execuției), permit unui navigator Web să rezolve inteligent situațiile care altfel ar necesita un program care rulează pe serverul Web. În plus, percepția utilizatorului este că situația respectivă este "rezolvată" mult mai repede. Primul nume oficial al limbajului a fost LiveScript, aluzie la platforma LiveWire, un mediu integrat pe partea de server, pentru managementul siturilor Web, dezvoltarea aplicațiilor pe server și interfațarea cu bazele de date. Încă de la începuturi, liderii de la Netscape au afirmat ca LiveScript se bazează pe Java, de oarece o bună parte din sintaxă era împrumutată de la acest limbaj. Cei de la Sun se cam încruntau la această afirmație deoarece
Sun nu avea nici un fel de rol în nașterea LiveScript și nu erau prea optimiști cu privire la influența pe care LiveScript o putea avea asupra mult mai complexului și puternicului Java.
În cele din urmă, Sun și Netscape și-au unit eforturile și au începutdezvoltarea limbajului redenumit acum JavaScript. Foarte repede au primit sprijinul a peste 25 de alte companii care au anunțat că vor suporta JavaScript făcînd astfel din acest limbaj un standard Web de facto și, foarte probabil, în viitor, un standard oficial. Răspunsul Microsoft a fost promovarea unui limbaj pentru scripturi Web numit VBScript. Dezvoltarea acestui limbaj se poate urmări pe: http://www.microsoft.com/intdev/
2.2.1.2 Principiul de lucru JavaScript
Pe partea de client, navigatorul interpretează declarațiile JavaScript încorpoarate direct în paginile HTML. Aceasta înseamnă că un script poate fi executat pe loc, pe computerul client. Mutarea interactivității de pe server pe client aduce un spor de viteză în realizarea interactivității. Pe partea de server, LiveWire, mediul de dezvoltare Netscape, include un interpretor JavaScript care permite crearea aplicațiilor bazate pe server. Deci JavaScript este un limbaj interpretat. Aceasta înseamnă că codul JavaScript nu este compilat precum codul C sau Java. Deci se poate scrie cod JavaScript cu orice editor de text și se poate plasa direct într-o pagină HTML. Programele JavaScript pe partea de client pot face mai multe lucruri. De pildă:
– pot verifica local datele introduse într-un formular și pot notifica utilizatorul printr-o fereastră de dialog în cazul în care datele au fost incorecte, – pot crea mici aplicații stand-alone cum ar fi un calculator pentru operații matematice simple sau un selector de culori pe baza codului RGB, sau se poate utiliza JavaScript pentru a comunica cu apleturile Java și cu aplicațiile auxiliare care rulează direct în Netscape. Arhitectura "plugs-in" permite dezvoltatorilor să-și conecteze aplicațiile lor direct în Netscape. Rezultatele aplicațiilor auxiliare sînt afișate direct în documentul HTML. Această arhitectură face posibil ca un număr practic nelimitat de tipuri de medii și aplicații, inclusiv VR, multimedia, audio, video și interactivitate, pot fi incorporate direct în documentul HTML.
2.2.1.3 Limbajul JavaScript
Limbajul JavaScript a fost creat astfel încât să reflecte sintaxa limbajului Java, multe dintre cuvintele cheie fiind aceleași. La baza limbajului stau trei blocuri fundamentale: Valorile: tipurile de date suportate de JavaScript Obiectele: colecțiile de proprietăți care pot fi apelate cu un singur nume Funcțiile: procedurile care pot fi executate de o aplicație.
Funcțiile asociate cu un anumit obiect se numesc metodele obiectului. Deci ca și Java, JavaScript este construit pe metafora obiectelor deși într-un sens mai puțin riguros. În JavaScript, un obiect este o construcție cu proprietăți care sînt variabile sau alte obiecte. Limbajul vine cu un anumit număr de obiecte predefinite (cum ar fi math, date sau string) dar evident poate utiliza și obiecte ale navigatorului (window, location, history și document) care se creează ori de cîte ori se încarcă o pagină în navigator. În plus se pot construi și propriile obiecte. De pildă, obiectul câmp:
function: cîmp (prx, pry, prz) {
this.prx = prx;
this.pry = pry;
this.prz = prz;
}
O instanță a obiectului cîmp (cu componentele prx, pry, prz) se crează de
forma:
CîmpElectric = new cîmp ("valoarex", "valoarey", "valoarez")
Proprietățile obiectelor sînt afectate cu funcții care pot fi chemate și din interiorul paginilor HTML. O funcție se definește cu ajutorul cuvântului cheie function urmat de numele funcției, o listă a parametrilor și declarațiile care definesc funcția. Odată creată funcția, se poate crea o metodă care asociază funcția cu un obiect. Sintaxa este:
obiect.nume_metodă = nume_funcție
După crearea metodei, aceasta poate fi apelată din interiorul paginii HTML pentru a fi executată, cu o sintaxă simplă obiect nume_metodă (parametrii).
2.2.2 Limbajul Perl
Limbajul de programare Perl a fost elaborat de către Larry Wall în anul 1986 pentru efectuarea dărilor de seamă despre conținutul mulțimii de fișiere în mediul UNIX. Deoarece pe atunci nu existau instrumente pentru rezolvarea astfel de probleme, Wall a elaborat un instrument nou. Denumirea Perl provine de la : Practical Extraction and Report Language.
Cu timpul Wall a perfecționat limbajul și el a fost accesibil tuturor. Structura limbajului Perl este foarte asemănătoare cu limbajul C, în care lipsește instrumentul de prelucrare a fișierelor și informației textuale ce se conține în fișiere. Necătând la faptul că limbajul C este compilator, limbajul Perl este un interpretator. Limbajul Perl este foarte simplu în utilizare, ceea ce-i atribuie avantaje în fața altor limbaje.
2.2.2.1 Structuri de date in limbajul Perl
In Perl exista trei tipuri de variabile :
•- scalare;
•- tablouri de scalari;
•- tablouri asociative.
Datele scalare includ numere si situri de caractere. Unei aceleiasi variabile scalare i se poate atribui atât o valoare numerica, cât și un șir de caractere : $a = 45;
…$a = 'some text';
Numerele pot fi reprezentate prin șiruri de caractere, in maniera :
$p = '9';
Se pot face chiar operații aritmetice cu numere astfel reprezentate. Operatorii aritmetici sunt cei cunoscuți din C; pentru ridicarea la putere, avem operatorul "**" :
$a = 9 ** 3;
Pentru siruri de caractere, dispunem de operații de concatenare si multiplicare :
$a = $b . $c; # concateneaza $b cu $c
$a = $b x $c; # $b repetat de $c ori
Despre tablouri asociative se va vorbi intr-un paragraf ulterior. Variabilele scalare se pot recunoaște prin faptul ca numele lor este prefixat cu '$'. Deci, variabila "a" va fi "$a". Elementele tablourilor sunt scalare, deci ele vor fi referite tot prefixate cu '$'.
Operatori asupra tablourilor.
Tablourile sunt in Perl indexate incepand cu 0, similar C-ului. Astfel, primul element dintr-un tablou este referit ca : $v[0]. In vreme ce ultimului ii corespunde referinta : $v[$#v]; Adaugarea unui element la un tablou se poate face cu functia push(): push(@a, $val); Se permite de asemenea si adaugarea unui tablou la un alt tablou : push(@a, @b); Extragerea unui element dintr-un tablou este rezultatul apelului functiei pop() : $elm = pop(@a);
Contexte . Contextul determină modul in care este interpretată o operație sau o valoare in Perl. Exista doua contexte majore : contextul scalar si contextul de listă. O operație de atribuire de forma : L = R; comporta o discuție asupra contextului in care este executată. Astfel, daca L are context scalar, atunci expresia R este de asemenea evaluată intr-un context scalar. Daca L insă are context de listă, expresia R este evaluată intr-un context de listă. Spre exemplu, ($a, $b) = @f;
va pune in $a elementul $f[0], iar in $b elementul $f[1]. Daca scriem insă : ($a, @r) = @f;
in $a se va găsi $f[0], restul vectorului @f, începând cu $f[1], urmând a se găsi in tabloul @r. In fine, atribuirea :
(@r, $a) = @f;
va pune in @r tot vectorul @f (deci tablourile in Perl "inghit" tot ce este posibil), in timp ce $a va rămâne nedefinit.
Intr-un context scalar, un tablou se evaluează la lungimea sa. Deci, predicatul :
scalar(@v) == $#v + 1
este întotdeauna adevărat.
Fișiere.
Fișierele sunt in Perl reprezentate prin variabile denumite cu litere mari. In exemplul următor, se va deschide un fișier și se va stoca intr-un tablou informația din el :
$f = '/export/home/bogdan/foo.txt';
open(HANDLE, $f); # deschiderea fisierului
@v = <HANDLE>; # citirea efectiva din fisier in tablou
close(HANDLE);
print @v; # tipărirea conținutului tabloului
Programul de mai sus are deci efectul comenzii UNIX "cat".
Este posibila specificarea modului in care fișierul este deschis :
•- pentru intrare : open(HANDLE, $f);
•- pentru ieșire : open(HANDLE, ">$f");
•- pentru adăugare la sfârșit : open(HANDLE, ">>$f");
După deschiderea pentru scriere, scrierea efectivă într-un fișier se poate face cu : print HANDLE "Written directly into file\n";
Fișierele de intrare și ieșire standard pot fi deschise prin : open(INHANDLE, '-');
open(OUTHANDLE, '>-');
In exemplul de mai sus, se vor citi toate liniile din fișier, datorita faptului ca variabila @v este un tablou. Utilizarea unei variabile scalare $v ar fi condus la citirea unei singure linii, terminate printr-un caracter '\n' (newline).
2.2.2.2 Structuri de control in limbajul Perl
1) Foreach
Această structură este destinată prelucrărilor linie cu linie pentru tablouri sau orice structuri de listă. Forma generală a instructiunii foreach este : foreach $item (@list)
{
…
}
Variabila $item este pe rand legată la fiecare element al listei @list, efectuându-se prelucrările din corpul ciclului foreach. Foreach va executa deci un numar de iteratii egal cu numarul de elemente din listă. În cazul în care lista este vida, corpul ciclului nu este executat niciodată.
2) Condiții
Condițiile sunt expresii de un tip aparte : tipul logic sau boolean. Pentru formarea condițiilor, exista operatorii relaționali si cei logici. Valorile de adevăr sunt reprezentate in Perl de o maniera similara C-ului, adică :
•"true" este reprezentat prin orice număr nenul sau orice sir de caractere nevid; •"false" se reprezintă prin numarul zero, un șir de caractere vid, sau șirul de caractere "0";
Operatori relaționali
$a == $b comparație de egalitate
$a != $b comparație de ne-egalitate
$a eq $b comparație de egalitate între string-uri
$a ne $b comparație de ne-egalitate între string-uri
(mnemonicile de "eq" si "ne" vin tocmai din "negura" FORTRAN-ului !)
Operatori logici
($a && $b) operația de conjuncție ("SI" logic)
($a || $b) operația de disjuncție ("SAU" logic)
!($a) operația de negație logică
3) Ciclul "for"
Ciclul "for" din Perl este similar cu instrucțiunea "for" din C :
for(expr1; expr2; expr3)
{
instrucțiuni;
}
Aceasta structură este echivalentă cu secvența :
expr1;
while(expr2) {
instrucțiuni;
expr3;
}
Expresia expr2 este logica (booleană). Cât timp aceasta este adevarată, se execută instrucțiunile din corpul ciclului, apoi secvența expr3.
4) Ciclurile "while" si "until"
Acestea sunt de forma :
while(expr) {
instrucțiuni;
}
until(expr) {
instrucțiuni;
}
Diferența dintre cele doua instrucțiuni constă în modul în care condiția este pusă : la while, corpul ciclului este executat cât timp condiția este adevărată, in timp ce la until, îndeplinirea condiției atrage părăsirea ciclului.
Ciclurile "while" si "until" se pot transforma în cicluri cu test final prin includerea particulei "do" :
do {
instrucțiuni;
} while(expr);
Ciclurile cu test final asigură cel puțin o execuție a corpului lor.
5) Instrucțiunea "if"
Aceasta are in Perl doua forme. Prima este adecvată deciziei simple
if(expr) {
secvența;
}
else {
secvența;
}
Cea de-a doua forma se folosește pentru decizii multiple :
if(expr) {
…
}
elsif(expr) {
…
}
else {
…
}
2.2.2.3 Tablouri asociative. Subrutine
1) Tablouri asociative
Tablourile obișnuite permit accesul la elementele lor prin specificarea unui index numeric. Spre exemplu, primul element din tabloul @v este referit prin $v[0]. Spre deosebire de alte limbaje (C, Pascal etc.), in Perl se pot crea tablouri indexate după șiruri de caractere. Acestea se numesc tablouri asociative. In scriere, ele apar prefixate cu semnul "%" in loc de "@".
Operatori caracteristici tablourilor asociative
Tablourile asociative nu au o relație prestabilita de ordine a elementelor. Se pot accesa pe rând
1.cheile de căutare, utilizând funcția keys() :
foreach $key (keys %a) {
# prelucrare specifica fiecărei chei
}
2.valorile stocate in tablou, cu ajutorul funcției values() :
foreach $val (values %a) {
# prelucrare specifica fiecărei valori
}
Ordinea in care keys si values întorc elementele tabloului nu are nimic de-a face cu ordinea in care acestea au fost întroduse.
Un alt operator util este each(), care intoarce o lista cu doua elemente : o cheie din tablou și valoarea asociată acesteia. La fiecare apel, each() întoarce o alta pereche, pana când parcurge întreg tabloul :
while(($country, $capital) = each(%capitals))
{
print "The capital of $country is $capital\n";
}
2) Variabile de mediu
La rularea unui program într-un sistem de operare (UNIX) există un număr de parametri setați. Acești parametri sunt variabilele de mediu. Un program Perl își găsește variabilele de mediu in tabloul asociativ %ENV. Spre exemplu, codul :
while(($var, $val) = each(%ENV))
{
print "$var = $val\n";
}
listeaza toate setările de variabile de mediu existente.
3) Subprograme
Ca orice limbaj de nivel înalt, Perl permite programatorului să-și definească subprograme. Acestea pot fi plasate oriunde în textul programului; pentru claritate, este de preferat sa fie toate la început, sau toate la sfârșit. Definiția unei proceduri are forma :
sub nume_subprogram { … cod specific}
A se remarca o diferența fundamentală față de alte limbaje de programare : absența parametrilor formali. Astfel, apelurile :
&p
&p($_);
&p(1+2, $_);
sunt toate trei potențial corecte, ceea ce nu se întâmpla in alte limbaje, unde compilatoarele verifică strict numărul parametrilor de apel și tipul acestora.
Parametrii actuali (de apel) ai unei proceduri se găsesc in variabila speciala @_. Fiecare din parametri poate fi regăsit pe baza poziției sale, prin referințe de genul $_[0], $_[1], … . De notat că nu trebuie făcute confuzii între parametrii procedurilor ($_[0], $_[1], …) și variabila speciala $_.
O procedura intoarce întotdeauna ceea ce evaluează ultima dată (aceasta este o modalitate preluată din limbajele de programare funcțională, gen LISP, Scheme etc.).
Prelucrări de șiruri de caractere in Perl
Operațiile asupra șirurilor de caractere in Perl au la baza mecansimul de expresii regulate (ER), existent in sistemele UNIX.
1) Expresii regulate
Acestea sunt incluse între slash-uri. Operatorul de potrivire de expresii (pattern matching) este "=~". Spre exemplu, instrucțiunea :
if($sentence =~ /the/) { … }
testeaza daca variabila $sentence conține subșirul "the". Expresiile regulate sunt case-sensitive, ca de altfel in majoritatea limbajelor de programare (C, Java etc.)
Operatorul "!~" întoarce true dacă detectează o nepotrivire, fiind negația logică a lui "=~"
2) Variabila speciala "$_"
Testele de genul celui de mai sus apar foarte frecvent in programele care conțin prelucrări de șiruri de caractere. Pentru a simplifica forma acestui test, in Perl s-a introdus o variabilă scalară specială, "$_", Acesteia i se atribuie șirul care trebuie comparat, după care comparația se face mai simplu :
$_ = $sentence;
if(/the/) {…}
Variabila "$_" este implicit utilizată pentru multe operații in Perl. Se tinde câtre o folosire foarte frecventă a ei, datorită simplificărilor pe care le aduce in scrierea codului.
3) Construcția expresiilor regulate
Expresiile regulate complexe conțin o groaza de caractere speciale, care de care mai ciudate la o prima privire. Majoritatea acestora provin din UNIX. Iată câteva dintre cele mai frecvent întâlnite :
. Orice caracter, mai puțin "newline";
^ Începutul unei linii sau al unui șir de caractere;
$ Sfârșitul unei linii/unui șir de caractere;
* Zero sau mai multe apariții ale ultimului caracter din expresie;
+ Una sau mai multe apariții ale ultimului caracter;
? Ultimul caracter sau nimic;
[qwe] Orice caracter din cele din paranteze;
[^qwe] Orice caracter diferit de cele din paranteze;
[a-r] Orice caracter cuprins între 'a' și 'r';
[^A-R] Nici unul dintre caracterele dintre 'A' si 'R';
a|b a sau b
(ab)+ ab, abab, ababab, …
\n newline;
\t tab;
\s caracter "whitespace" : newline, tab etc;
\b margine de cuvânt;
\B un caracter care nu este o margine de cuvânt;
\| bara verticală;
\) paranteza închisă;
4) Substituții și translații
Funcția de substituție "s" funcționează similar cu substituția din editoarele binecunoscute UNIX "vi" si "sed". Și operația de substituție utilizează implicit variabila speciala "$_" daca operatorul "=~" este omis. Astfel, în loc să scriem :
$sentence =~ s/sir1/sir2/;
se poate scrie mai simplu :
$_ = $sentence;
s/sir1/sir2/;
În acest mod, se substituie numai prima apariție a șirului șir1 în șirul $sentence. Pentru o substituție globală (a tuturor aparițiilor), se utilizează flag-ul "g" după ultimul slash :
s/sir1/sir2/g;
Daca dorim o substituție care să ignore diferențele dintre literele mari si mici (case-insensitive), se folosește flagul "i" :
s/șir1/șir2/gi;
De multe ori, apare ca necesară memorarea pattern-urilor care s-au potrivit, in scopul refolosirii ulterioare. Modelele respective sunt memorate in variabile speciale, numerotate $1, $2, …, $9. În cadrul expresiei regulate (sau substituției) aceste modele pot fi referite ca \1, \2, …, \9. Iată un exemplu :
$_ = "The Last Time I Cried";
s/([A-Z])/:\1:/g; print "$_\n";
Se vor înlocui aparițiile literelor mari din șir cu acele litere, înconjurate de caracterul ':'.
OBSERVATIE. Variabilele $1, …, $9 sunt read-only; ele nu pot fi modificate pur și simplu de către utilizator.
Exemplul următor determină cuvinte care se repetă într-un text :
if(/(\b.+\b) \1/)
{ print "Found $1 repeated\n";}
în timp ce următorul schimbă primul caracter cu ultimul în variabila $_ :
s/^(.)(.*)(.)$/\3\2\1/;
Variabilele speciale $` ($ si backquote), $& si $' ($ si quote) au semnificația de :
$` – șirul de caractere dinaintea unei potriviri;
$& – șirul de caractere care se potrivește;
$' – șirul care apare după potrivire.
Astfel, pentru exemplul :
$_ = "Something Else Again"; /thi/;
urmatoarele afirmații sunt adevarate :
$` eq "Some";
$& eq "thi";
$' eq "ng Else Again";
Între slash-urile unui test de potrivire sau ale unei substituții, se face expandarea variabilelor. Astfel, se poate scrie ceva de genul :
$x = "the";
s/${x}re/here/g;
exemplu care face înlocuirea cuvintelor "there" cu "here" intr-un text.
Funcția de translație "tr" permite translația caracter cu caracter. Spre exemplu, dacă dorim să înlocuim simultan caracterele 'a' cu 'e', 'b' cu 'd' și 'c' cu 'x' intr-un text este mai comod să scriem $sentence =~ tr/abc/edx/;
În cadrul funcției de translație, majoritatea caracterelor speciale din expresiile regulate nu pot fi folosite. O excepție o constituie liniuța '-' care își păstrează semnificația de delimitator al unui domeniu. Spre exemplu, conversia la litere mari se poate face cu :tr/a-z/A-Z/;
5) Despărțirea unui șir de caractere (splitting)
Funcția split este una dintre cele mai utile din limbajul Perl. Rolul său este de a "dezmembra" un șir de caractere și de a pune părțile obținute într-un vector.
Parametrii funcției split sunt separatorul în funcție de care se face despărțirea și șirul de caractere care va fi supus operației.
Daca în șir se permit apariții multiple ale separatorului, acestea sunt detectate cu
split(/:+/);
O alta funcție utila in prelucrarea șirurilor este substr(), care întoarce un subșir al unui șir dat. Spre exemplu,
substr("The time I saw you chopped", 4, 4); # întoarce "time"
substr("The time I saw you chopped", 17); # întoarce "chopped"
substr("The time I saw you chopped", -6, 5); # întoarce "hoppe"
Prima formă întoarce subșirul care are lungimea egală cu al doilea parametru și deplasamentul față de începutul șirului dat de primul parametru. În cazul al doilea, se dă doar deplasamentul începutului subșirului, iar sfârșitul acestuia coincide cu sfârșitul șirului. In fine, ultima formă indică un deplasament negativ, ceea ce înseamnă ca baza este sfârșitul șirului și nu începutul.
6) Alte funcții
O alta funcție utilă este length , care întoarce lungimea unui șir de caractere. Apelul funcției are sintaxa :
l = length($str);
Pentru a testa dacă un șir este vid, condiția poate fi formulată :
if(length($str) == 0)
dar se recomandă sintaxa :
if(! $str)
2.2.3 Argumentarea alegerii limbajului
Necătând la faptul, că există așa limbaje puternice ca C/C++ ,Java și altele în lucrarea de față se folosește limbajul de programare Perl pentru soluționarea problemei existente. Această alegere s-a făcut din mai multe considerente, una din care este faptul, că acest limbaj este foarte simplu în expluatare, are multe instrumente și funcții, ce nu se găsesc în alte limbaje și în afară de aceasta Perl oferă programatorului un spectru larg de posibilități pentru elaborarea unor programe scurte și foarte efective (precum și programul elaborat în cadrul acestei lucrări). Mai jos sunt enumerate unele din proprietățile excelente ale acestui limbaj :
– Posibilități largi pentru lucrul cu expresiile regulate ( șabloane), care permit căutarea, înlocuirea și alte operații asupra textului.
– Masive asociative, care se indexează de programe cu folosirea cheilor necomplecte.
– Transformare automată a tipurilor înttre numere întregi, numere cu virgulă și rânduri textuale.
– Transformarea automată a mărimii masivelor.
– Funcții pentru translarea datelor binare.
– Funcții de intrtare/ieșire a fișierelor.
– Funcții de ieșire formatată (analog ca în C cu adăugarea posibilității de a genera raporturi pe baza șabloanelor.
– Toate funcțiile limbajului C cu adăogarea funcțiilor de comparare a rândurilor textuale.
– Funcții de prelucrare a listelor.
– Funcții de sistem.
– Un complect de operatori și structuri de conducere ce includ și subprograme.
Din aceste considerente pentru soluționarea sarcinii s-a ales limbajul Perl.
2.3 Descrierea rezultatelor
2.3.1 Algoritmul
Principiul de lucrul a aplicației elaborate în cadrul lucrării date este următorul :Utilizatorul, fiind înregistrat pe serverul Internet Information Server al Centrului Național de Informatică și având parola personală poate alege compartimentul clasificatorului legislației și anul în care a fost emis actul necesar. Acest proces este posibil prin intermediul unei forme proiectate în limbajul HTML folosind instrumentele corespunzătoare ale acestui limbaj de marcare. După îndeplinirea formei utilizatorul clichează butonul "Consultare" și primește ca răspuns o pagină Web alcătuită dinamic în dependență de condițiile indicate în formă.
Clicînd pe denumirea actului căutat, utilizatorul primește ca răspun însăși actul, care (în caz de dorință) e accesibil în două limbi : rusă și română.
Remarcă : Baza de date "Jurist" conține absolut toate actele legislative ale Republicii Moldova ce au fost emise în decursul anilor 1990-1998, actualizându-se de 4 ori pe săptămână și ocupă un volum de aproximativ 150 Mb. Din cauza volumului mare de date, în lucrarea de față au fost incluse actele ce se conțin în toate compartimentele legislației din anii 1996-1998. Dat fiind faptul, că softul de față este cerut de către Centrul Național de Informatică, se preconizează elaborarea de mai departe a produsului soft dat în cadrul activității postuniversitare.
Algoritmul aplicației elaborate în cadrul acestei lucrări se poate vedea în anexă.
2.3.2.Analiza datelor de intrare-ieșire
Produsul soft de față lucrează după principiul : primind datele de intrare le prelucrează și în dependență de aceste date formează un răspuns dinamic.
Datele de intrare pentru aplicația dată sunt datele trimise de forma HTML (îndeplinită de utilizator) scriptului Perl. Aceste sunt așa date ca :
– Numele utilizatorului
– Parola
– Compartimentul legislației
– Anul în care a fost emis actul căutat.
Prelucrând aceste date de intrare, scriptul Perl formează un răspuns dinamic incluzând în șirul standard de ieșire STDOUT datele de ieșire în formă de referințe la toate actele din compartimentul dat ce au fost emise în anul indicat. Apoi, analizând datele de ieșire, utilizatorul poate alege actul necesar clicând pe referință la el. Ca rezultat final al programului utilizatorul primește conținutul actului necesar.
Deci, datele de ieșire sunt hyperreferințele la actele din compartimentul selectat, care au fost emise în anul indicat.
2.3.4 Descrierea programului
Aplicația dată este bazată pe legătura dintre forma HTML și scriptul Perl. Forma HTML, prezentată în desenele 2.1 și 2.2 este generată de un program scris în limbajul HTML. Pentru analiza mai concretă a acestui program, listingul lui e prezentat în Anexă. Partea principală a acestui program asigură interogarea utilizatorului și posibilitatea de a indica condițiile de căutare a actelor legislative. Vom analiza acest fragment din programul HTML mai detaliat :
<FORM METHOD="GET" ACTION="/1/diplom1.pl">
<table>
<tr>
<td>
<basefont size=4>
<font color=blue>
<big><b><center>Alegeti compartimentul:</center></b></big></td>
<td>
<SELECT NAME="compartiment">
<option>Legile Republicii Moldova
<option>Hotaririle Parlamentului Republicii Moldova
<option>Decretele Presedintelui Republicii Moldova
<option>Hotaririle Guvernului Republicii Moldova
<option>Decretele Guvernului Republicii Moldova
<option>Hotaririle Curtii Constitutionale
<option>Comisia de stat pentru piata hirtiilor de valoare
<option>Acte Departamentale si Ministeriale
<option>Acte Internationale
<option>Ministerul Finantelor
<option>Banca Nationala
<option>Inspectoratul Fiscal
</SELECT>
</td>
</tr>
</table><br>
<table>
<tr>
<td>
<basefont size=4>
<font color=blue>
<big><b><center>Indicati anul:</center></b></big></td>
<td>
<SELECT NAME="anul">
<option>anul 1998
<option>anul 1999
<option>anul 2000
</SELECT> </td>
</tr>
</table><br>
<font size=4 color=green>
<b>Va rog scrieti numele D-voastra:</b>
<INPUT TYPE="text" NAME="nume">
<font size=4 color=green>
<b>Indicati parola:</b>
<INPUT TYPE="password" NAME="parola"><br><P><P>
<center>
<INPUT TYPE="submit" VALUE="Consultare">
<INPUT TYPE="reset" VALUE="Anulare">
</center>
</FORM>
În rândul 1 al acestui fragment se indică browserului că în continuare va fi generată o formă HTML, prelucrarea căreia va fi efectuată cu ajutorul metodei GET de un script Perl ce se află în fișierul diplom1.pl. Un loc deosebit în acest fragment îl ocupă tagurile :
1. <SELECT NAME="compartiment"> </SELECT>
2. <SELECT NAME="anul"> </SELECT>
3. <INPUT TYPE="text" NAME="nume">
4. <INPUT TYPE="password" NAME="parola">
5. <INPUT TYPE="submit" VALUE="Consultare">
6. <INPUT TYPE="reset" VALUE="Anulare">
În primul și al doilea se definesc elementele de conducere "meniu", care dau posibilitate de a alege un element al meniului în calitate de condiție de căutare.
În tagurile 3-4 se definesc elementele de conducere pentru culegerea informației textuale. În particular, în tagul 4 se definește elementul care cere indicarea parolei corecte a utilizatorului, care apare pe display în formă de steluțe (din considerente de securitate).Iar tagul 3 cere numele utilizatorului.
Tagurile 5 și 6 definesc butoane. În tagul 5 se definește butonul de tipul Submit, care clicându-l, dă indicații browserului, că forma este îndeplinită și datele trebuie de transmis la server pentru prelucrarea de mai departe.
Tagul 6 definește butonul, cu ajutorul căruia se anulează datele întroduse în formă, adică forma devine curată și gata pentru a primi alt set de date.
Fiind trimise datele de către browser la server, ultimul le îndreaptă la scriptul scris în Perl, care la rândul lui le prelucrează și transmite serverului datele de ieșire. Listingul deplin al acestui script este prezentat în Anexă. Acum însă, va urma analiza detaliată a părții principale ale acestui script :
$query=$ENV{QUERY_STRING};
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>Rezultatul interogarii</TITLE></HEAD>\n";
print "<body background='tile.gif'>\n";
print "<font size=4>\n";
@fields = split('&', $query);
foreach (@fields) {
Switch: {
/^nume=(.*)/ && do {
$nume = &decode($1);
last Switch;
};
/^compartiment=(.*)/ && do {
$compartiment =&decode($1);
last Switch;
};
/^anul=(.*)/ && do {
$anul =&decode($1);
last Switch;
};
/^parola=(.*)/ && do {
$parola = &decode($1);
last Switch;
};
}
}
if ($parola ne 'jurist')
{
print "<b>Atentie!!!-Accesul intrerupt:Parola indicata gresit!</b><BR>\n";
print "<b><a href='/1/diplom1.htm'>Verificati parola</a></b><br>\n";
}
else { &compart;}
print "</BODY>\n";
print "</HTML>\n";
sub decode {
local ($value) = @_;
$value =~ s/\+/ /g;
$value =~ s/%([0-9A-H]{2})/pack('C',hex($1))/eg;
return $value;
}
sub html {
local ($value) = @_;
$value =~ s/</</g;
$value =~ s/>/>/g;
return $value;
}
sub compart {
SWITCH:
{
if($compartiment eq 'Legile Republicii Moldova') {&lpar ;last SWITCH;}
if($compartiment eq 'Hotaririle Parlamentului Republicii Moldova') {&hpar ;last SWITCH;}
if($compartiment eq 'Decretele Presedintelui Republicii Moldova') {&dpre ;last SWITCH;}
if($compartiment eq 'Hotaririle Guvernului Republicii Moldova') {&hguv ;last SWITCH;}
if($compartiment eq 'Decretele Guvernului Republicii Moldova') {&dguv ;last SWITCH;}
if($compartiment eq 'Hotaririle Curtii Constitutionale') {&ccon ;last SWITCH;}
if($compartiment eq 'Acte Internationale') {&trat ;last SWITCH;}
if($compartiment eq 'Ministerul Finantelor') {&mfin ;last SWITCH;}
if($compartiment eq 'Banca Nationala') {&bnat ;last SWITCH;}
if($compartiment eq 'Inspectoratul Fiscal') {&mpri ;last SWITCH;}
if($compartiment eq 'Acte Departamentale si Ministeriale') {&depm ;last SWITCH;}
if($compartiment eq 'Comisia de stat pentru piata hirtiilor de valoare') {&cphv ;last SWITCH;}
}
}
În primul rând al acestui fragment se inițializează variabila "query", căreia i se atribuie valoarea variabilei mediului QUERY_STRING din masivul variabilelor mediului "ENV". Anume în această variabilă se află rândul de comandă de unde se pot citi datele primite de la client. Apoi, prin intermediul funcției "split", scriptul împarte rândul de comandă în câmpuri prin intermediul simbolului "&" și le înscrie în masivul "fields".
În continuare, în cadrul ciclului "foreach", se analizează conținutul acestor câmpuri. Cu ajutorul expresiilor regulare de tipul /^field=(.*)/ se indică necesitatea de a începe căutarea de la începutul rândului (ceea ce exclude posibilitetea de coincidență jumătatea numelui altui câmp). Cu alte cuvinte numele câmpului și simbolul "=" trebuie să corespundă cu însăși ele. Parte expresiei regulare rămase corespunde valorii câmpului și o înscrie în variabila "1". Deoarece variabila "1" este temporară,scriptul copie valoarea ei în variabila cu numele pentru fiecare câmp. Astfel, denumirea compartimentului legislației ales de utilizator se conține în variabila "compartiment", respectiv anul ales de client se află în variabila "anul". Numele și parola utilizatorului se conțin în variabilele "nume" și "parola".
În continuare scriptul folosește subprogramul "decode" pentru a decodifica datele din câmpuri, care au fost codificate de către browser. Astfel, rândul ce conține expresia regulată
$value =~ s/\+/ /g;
înlocuiește toate simbolurile "+" din câmp cu simbolul de loc gol " " (deoarece browserul până la aceasta a făcut o înlocuire inversă). Simbolul "g" la sfârșitul rândului indică necesitatea de a face această înlocuire pentru tot câmpul.
Expresia regulară următoare :
$value =~ s/%([0-9A-H]{2})/pack('C',hex($1))/eg;
înlocuiește toate combinațiile simbolului "%" după care urmează cifre octale cu simbolul ASCII corespunzător. Expresia pack('C',hex($1)) întoarce simbolul ASCII ce corespunde la două cifre octale. Variabila "1" se referă la partea rândului, care corespunde șablonului [0-9A-H]{2}, ce corespunde (răspunde) la două cifre octale.
Atribuind variabilelor "nume", "anul", "parola", și "compartiment" valorile câmpurilor corespunzătoare, scriptul purcede la verificarea parolei. Cu ajutorul construcției if-else se face controlul corespunderii parolei primite cu parola înregistrată și păstrată pe server. În particular aceasta se face cu ajutorul rândului if ($parola ne 'jurist'). În caz că parola nu corespunde, scriptul generează o pagină Web dinamic care informează utilizatorul despre încercarea de a trimite o parolă greșită și-i propune să mai îndeplinească o dată forma. Dacă parola e indicată corect, scriptul se adresează la subprogramul "compartiment". (În cadrul programului este rezervat subprogramul "html", care în caz de necesitate a vizualizării conținutului câmpurilor, codifică aceste date pentru vizualizarea lor în text HTML).
În subprogramul "compartiment" se analizează valoarea câmpului "compartiment", determinând care-i, scriptul trece la subprogramul cu denumirea corespunzătoare, unde se analizează valoarea câmpului "anul" cu ajutorul construcției if-elsif-else. Determinând și anul, scriptul generează dinamic o pagină Web, unde se conțin referințe la actele din compartimentul ales ce au fost emise în anul indicat de către utilizator. Această pagină generată dinamic este trimisă la server, care, la rândul lui o transmite clientului.
Din cele expuse mai sus se vede că programul în limbajul Perl este foarte simplu, ceea ce-i dă facilități acestui limbaj de programare.
3 ARGUMENTAREA ECONOMICĂ A LUCRĂRII
3.1 Determinarea cheltuielilor cu elaborarea produsului soft
În lucrarea de față se efectuiază analiza tehnologiilor informaționale ce permit accesul distant-dialogat prin Internet. Aceste tehnologii, apărute comparativ nu demult, stau la baza viitorului comunicării dialogate prin rețele de calculatoare. Ca rezultat al analizei și cercetărilor acestor tehnologii informaționale s-a elaborat o aplicație ce permite consultarea dialogată prin Internet a bazei de date "Jurist", ce conține circa 6000 de acte legislative ale Republicii Moldova. Această bază de date este un instrument foarte comod și efectiv pentru orice lucrător al sferei legislative, pentru orice om de afacere și orice om, care în cadrul activității sale are necisitatea de a consulta careva acte legislative.
Ca punct de pornire al lucrării date a fost luată baza de date "Jurist", care a fost elaborată la Centrul Național de Informatică și are ca mediu sistemul operațional MS-DOS. Pe parcursul a mai multor ani de completare și perfectare a acestei baze de date și odată cu dezvoltarea fantastic de rapidă a rețelei globale de calculatoare Internet s-a observat necesitatea în existența unei versiuni a acestei baze de date care ar fi accesibilă la distanță, prin Internet. Ceea ce se efectuiază în cadrul acestei lucrări.
Analizând mediul concurențial (care, de fapt, nu există) se poate spune că concurenți ai acestui soft la momentul actual practic nu există . De fapt, există varianta staționară a firmei P.C.P SRL implementată în aplicația Superlex, care conține circa 1500 acte legislative, neavând varianta de acces dialogat prin Internet.
Analiza pieței a arătat că există o necesitate destul de mare în existența unui soft ca acesta. De aici rezultă că cererea la acest produs va fi destul de mare, ceea va avea ca urmare acoperirea tuturor cheltuielilor legate de elaborare și existența unui profit.
În continuare, pentru o argumentare economică mai concretă a elaborării produsului dat se efectuiază următoarele calcule economice :
1) Determinarea cheltuielilor legate de elaborare
2) Aprecierea efectului economic în urma prezentării acestui produs pe piață și realizării lui.
Pentru determinarea cheltuielilor este necesar de alcătuit deviza cheltuielilor pe elemente de cheltuieli.
Principalul element al cheltuielilor se consideră costul activității de muncă la elaborarea produsului. Pentru a-l determina, în primul rând se determină lucrările necesare de efectuat în cadrul elaborării, precum și calificarea și stimularea colaboratorilor.
În urma analizei procesului de proiectare se obține următoarea listă a lucrărilor:
1. Studierea literaturii ( analiza tehnologiilor dialogate);
2. Stabilirea funcționalităților programului;
3. Determinarea parametrilor formei HTML (studierea limbajului HTML);
4. Stabilirea interfeței formei HTML;
5. Însușirea limbajului Perl;
6. Stabilirea interfeței consultării BD "Jurist";
7. Însușirea elaborării scripturilor Perl;
8. Elaborarea programului;
9. Stabilirea legăturii între formă și program;
10. Stabilirea legăturii între program și BD "Jurist";
11. Corectarea greșelilor;
12. Elaborarea documentației;
13. Perfectarea documentației.
In cadrul elaborarii acestui produs la lucrarile enumerate mai sus au participat urmatorii colaboratori :
A – Inginer programist superior
B – Inginer programist
C – Inginer programist calificarea I.
Pentru a determina gradul de incadrare se construiește planul liniar de efectuare a lucrărilor (Anexa).
Conform planului liniar de efectuare a lucrărilor se obține repartizarea colaboratorilor pe lucrările de proiectare care se reflectă în tabelul 3.1.
Tab. 3.1
Repartizarea colaboratorilor pe lucrări de proiectare
(Continuarea) tab. 3.1
Salariile colaboratorilor se specifică în tabelul 3.2.
Tab. 3.2
Salariile cplaboratorilor incadrati in proiectatrea produsului soft
In baza numarului de zile lucrate a tuturor colaboratorilor se poate calcula salariul de baza , care se datermina dupa relatia :
Sb = (Sli*Nzi)/Nl
Unde
Sb – salariul de baza, lei
Sli – salariul de post lunar pentru colaboratorul i, lei
Nzi – numarul de zile lucrate de colaboratorul i, zile
Nl – numarul de zile lucratoare pe luna, (22 zile)
n – numarul de colaboratori incadrati in elaborare.
In baza relatiei de mai sus si tabelelor 3.1 si 3.2 estimam salariul de baza pentru fiecare colaborator :
Sb = S * n * (Nz / Nl),
unde
Sb – salariul de bază al colaboratorului pe perioada de proiectare;
S – salariul de bază lunar pentru categoria colaboratorului;
Nz – numărul de zile lucrate de colaborator în perioada de proiectare;
Nl – numărul de zile lucrătoare pe lună, (22 de zile);
n – numărul de colaboratori de categoria respectivă.
Pentru inginerul superior:
Sb = S * n * (Nz / Nl) = 600 * 1 * (18 / 22) = 338 lei.
Pentru inginerul programist consultant:
Sb = S * n * (Nz / Nl) = 450 * 1 * (32 / 22) = 655 lei.
Pentru inginerul programist de calificarea I:
Sb = S * n * (Nz / Nl) = 350 * 1 * (84 / 22) = 1336 lei.
Suma cheltuielilor pentru salariul de bază:
Sbt = Sb1 + Sb2 + Sb3 = 2329 lei.
Urmatorul element al cheltuielilor sunt cheltuielile materiale.
Costul tuturor materialelor folosite pe parcursul proiectarii lucrarii date constituie :
Tab.3.3
Costul materialelor
Pentru proiectarea lucrarii a fost folosit calculatorul Celeron 700, prețul căruia este de 7500 de lei.
Cota anuala de uzura constituie 10 %. Reiesind din cota anuala a uzurii si pretul initial s-a determinat valoarea uzurii anuale care constituie :
Uz = 7500 * 0,1 = 750 lei.
Toate cheltuielile precautate mai sus se reflecta in deviza cheltuielilor.
Deviza cheltuielilor pentru elaborarea programului este reprezentata in tabelul 3.4
Tab. 3.4
Deviza de cheltuieli la proiectarea sistemului
3.2 Aprecierea efectului economic
Efectul economic de la realizarea sistemului considerat poate fi analizat de pe două poziții:
Efectul economic de la implementarea și lucrul acestui sistem în activitatea beneficiarului;
Efectul economic de la abonarea la sistem a bineficiarilor de către Centrul Republican de informatică.
Efectul economic la beneficiar
Efectul economic la beneficiar se analizează din perspectiva reducerii impactului unor costuri în activitatea juriștilor, fie particulari, fie angajați ai unor firme, sau în lucrul unor persoane care în activitatea cotidiană se ciocnesc de necesitatea de consultare a legislației. Această reducere poate avea loc pe contul platii lunare scazute pentru actualizarea saptaminala, reducerii volumului de re-
surse folosite de calculatorul beneficiarului, economisirii unor mijloace și necesități care sunt utilizate pentru consultarea legislației manual, cu ajutorul literaturii juridice sau a publicațiilor periodice de tipul "Monitorului Oficial".
În cazul de abonare la sistemul datbeneficiarul va suporta urmatoarele cheltuieli :
1.Costul de abonare la sistem; 3000 lei
2.Costul de actualizare săptămânală a bazei de date; 1200 lei (anual)
3.Rechizite de cancelarie.
La estimare aproximativa suma acestor cheltuieli este de circa 4500 lei, pentru un an.
In cazul folosirii de catre beneficiar a sistemului in varianta locala, el suporta urmatoarele cheltuieli:
procurarea sistemului 2500 – 4000 lei
actualizarea saptaminala 2400 lei (anual)
consultarea suplimentara a specialistilor Centrului Republican de Informatica 500 lei (anual).
Micsorarea cheltuielilor la consultarea sistemului dat pentru benificiarii care deja consulta acest sistem in varianta de implementara locala, pentru fiecare benificiar in parte vor avea loc din considerentele :
Micsorarea platii lunare pentru actualizarea sistemului dat sub varianta propusa de catre serviciul distant-dialogat din Internet in comparatie cu varianta locala deja existenta.
Micsorarea volumului necesar de resurse ale calculatorului benificiarului in comparatie cu volumul necesar de resurse in cazul variantei locale.
Lipsa cheltuielilor adaugatoare din cauza consultarii specialistilor Centrului Republican de Informatica in cazul deteriorarii sistemului in varianta locala ( fapt, ce nu-i exclus) din pricina unor interventii intentionate locale. Aceasta situatie este exclusa in cazul consultarii sistemului prin intermediul accesului distant – dialogat prin Internet cauza fiind asigurarea integritatii datelor pe serverul Internet Informational Server al Centrului susnumit.
În continuare se vor stipula posibilele surse de cheltuieli, apărute în activitatea fără utilizarea sistemului, adica in cazul consultarii manuale :
Abonarea sau procurarea publicațiilor periodice;
Dispunerea de arhive cu actele legislative adoptate anterior (costuri de procurare și menținere);
Necesitatea scrierii manuale a textelor sau porțiunilor de texte sau dactilografierii acestora în cazul unui document pe hârtie;
Dispunerea sau apelarea la serviciile de xerografiere;
Dispunerea de scaner costisitor din necesitatea scanării unor texte de volum pentru inserare în documente electronice, precum și necesitatea redactării rezultatelor de calitate joasă a scanării;
Cheltuielile de timp pentru căutarea actelor legislative, în special a actelor adoptate la o dată nu atât de recentă;
Cheltuielile de timp pentru prelucrarea actelor;
Impactul psihologic, fizic și fiziologic al lucrului cu documentele pe hârtie;
Angajarea unui personal suplimentar pentru prelucrarea actelor;
Reducerea operativității de deservire a clienților în cazul activității de jurisconsult sau de soluționare a unor probleme cu subtext juridic care necesită consultarea unui număr mare de acte legislative, în special în cazul unei diferențe apreciabile între datele adoptării acestora;
Alte costuri imprevizibile.
În scopul de a estima diferențele de costuri s-a efectuat un sondaj de opinie asupra acestei probleme în rândurile beneficiarilor actuali, din considerentul că aceștea își cunosc mai bine particularitățile activității și a mărimii costului acestor beneficiari.
În urma acestui sondaj s-a stabilit că nici unul din aceștea nu ar refuza serviciile sistemului de acces distant-dialogat prin Internet la baza de date, ba dimpotrivă, sunt disponibili (majoritatea din ei) pentru abonarea la noul sistem. Majoritatea beneficiarilor, precum și a unor parteneri ai lor, care au fost incitați de primii, și-au exprimat dorința de a se abona la noul sistem (cel considerat) imediat după terminarea elaborării. Având în vedere că numărul de beneficiari ai sistemului "Jurist" depășește valoarea de 60.
Analiza efectului economic la Centrul Republican de Informatică
Analiza efectului economic la Centrul Republican de Informatică, unde s-a elaborat sistemul, se face din perspectiva unei comercializări comparabile cu cea a sistemului precedent "Jurist".
Profitul brut și cheltuielile cu sistemul "Jurist" pentru o perioadă de un an, conform datelor furnizate de contabilitatea Centrului Republican de Informatică sunt următoarele:
Profitul brut de la comercializarea sistemului (la un preț mediu de 2500 de lei și la un număr de beneficiari de 40) constituie :
Pb1 = 2500 * 40 = 100000 lei.
Profitul brut de la actualizarea lunară a bazei de datevla prețul de 200 de lei lunar:
Pb2 = 200 * 12 * 40 = 96000 lei.
Cheltuieli totale pe an( media lunară de 2500 de lei)
Ch = 2500 * 12 = 30000 lei.
Beneficiul net:
B = Pb1 + Pb2 – Ch = 96000 + 100000 – 30000 = 166000 lei.
Se va admite că numărul beneficiarilor pentru abonarea la sistemul nou pe parcursul unui an va reprezenta doar 50 % din numarul actual (deși la moment disponibilitatea de procurare a sistemului și-au exprimat-o mai mulți). Se va încerca estimarea beneficiului pe parcursul primului an de implementare la un preț mediu de 3000 lei.
1. Profitul brut de la abonarea a 20 beneficiari:
Pb1 = 3000 * 20 = 60000 lei.
2. Profitul brut de la actualizarea lunară la prețul de 100 de lei lunar:
Pb2 = 100 * 12 * 20 = 24000 lei.
3.Cheltuieli totale pe an din media lunară de 2500 de lei plus cheltuielile pentru proiectare (circa 6600 lei) cu considerarea anularii cheltuielilor pentru actualizarea bazei de date in calitate de salariu la 3 persoane (curieri ) a cate 300 lei lunar.
Ch = (2500-900 )* 12 + 7088 = 2688 lei.
4.Beneficiul net:
B = Pb1 + Pb2 – Ch = 60000+24000 – 26288 = 57712 lei.
Efectul economic se apreciaza tinand cont de coieficientul eficientei economice egal cu 0.3, presupunand faptul ca in decurs de 3 ani vor aparea alte tehnologii si mai avansate pentru acordarea serviciilor distant-dialogate prin Internet.
Efectul economic se calcula conform relatiei :
Eec = Pn – Kef*Ct
Unde
Pn – este profitul net al firmei pentru perioada de un an in rezultatul activitatii susnumite;
Kef – coieficientul eficientei economice;
Ct – cheltuieli totale ale firmei pentru perioada de un an.
Conform acastei relatii se obtin urmatoarele rezultate :
Eec = 57712 – 0.3*2688 = 56905 (lei)
Rezultatele obtinute demonstreaza faptul, ca activitatea Centrului Republican de Informatica in directia asigurarii serviciului de acces distant-dialogat prin Internet la baza da date legislativa a Republicii Moldova este profitabila si are perspective mari de dezvoltare.
Situatia actuala a produsului pe piata arata ca in viitorul apropiat serviciul susnumit va fi solicitat de un numar si mai mare de benificiari.
4 PROTECȚIA MUNCII
4.1 Analiza condițiilor de muncă
Efectuarea lucrărilor de programare se efectuiază într-o încăpere separată a Centrului Republican de Informatică. Este necesar de efectuat analiza condiîiilor de muncă în încăperea respectivă. Condițiile de muncă în timpul efectuării practicii de diplomă, de pe poziții de protecție, se apreciază în primul rând vizual aplicând noțiunile "normal" (n) și periculos (p). Analiza factorilor ce acționează asupra omului la locul de muncă e prezentat în forma de tabel (Tabelul 4.1 Caracteristicile condițiilor sanitar-igienice, factorii de producție dăunatori și periculoși):
(Continuarea) tab. 4.1
(Continuarea) tab. 4.1
4.2 Condiționarea aerului
Condiționarea aerului în încăperi se face cu scopul de a întreține în ele:
a) Condițiile mediului aierian, prevăzute de norme.
b) Condițiile climaterice artificiale în corespundere cu cerințele tehnice în interiorul încăperilor.
c) Condițiile igienice optimale a mediului aierian în încăperile de producere, în caz dacă aceasta este argumentat cu mărirea productivității muncii.
d) Condițiile optimale ale mediului aierian în încăperile clădirilor publice și de locuit.
Condiționarea aierului, care se face cu scopul de a întreține condițiile optimale sau admisibile a mediului aierian, poartă denumirea de confortabilă, dar ceea ce se face cu scopul de a întreține condițiile artificiale a mediului aierian în corespundere cu cerințele tehnologice – tehnologică.
Sistemele de condiționare a aierului (SCA) trebuie să asigure parametrii meteorologici normați și puritatea aierului înăuntrul încăperilor cu parametrii aierului exterior, pentru perioadele caldă și rece a anului, după СНиП II-33-75. Pentru satisfacerea cerințelor tehnologice sau în cazul argumentărilor tehnico-economice se permite calcularea sistemelor de condiționare pentru parametrii aierului extern.
Condițiomarea aierului se efectuiază cu un complex de aparate tehnice ce se numește sistem de condiționare a aierului (SCA). În componența SCA intră aparate tehnice pentru pregătirea, deplasarea și distribuirea aierului, pregătirea aierului rece și deasemenea aparate tehnice pentru alimentare cu căldură și aier rece, automatică, conducere distanționată și control.
Aceste aparate tehnice se asamblează complet sau parțial în aparate aparte ce se numesc condiționere și deasemenea în noduri, ce port denumirea de calorifere de încălzire locală, aparate de mărire a umedității ș.a.
Conform standardului ASHRAE 55-56 (SUA) confortul termic se determină ca starea omului satisfăcut de condițiile mediului ambiant, care nu știe dorește oare el să schimbe condițiile mediului ambiant astfel ca ele să fie mai calde sau mai reci, sau nu. Parametrii mediului aierian, de care sunt satisfăcuți 80 % de oameni sănătoși, normal îmbrăcați, ce au un lucru ușor și-l îndeplinesc șezând, după standardul de mai sus sunt următorii:
– temperatura după termometrul uscat 23-25 grade celsius.
– temperatura medie de iradiere 21-27 grade celsius.
– umeditatea relativă 20-60 %.
– viteza mișcării aierului 0.05-00.23 m/s.
cu îndeplinirea condiției că pentru încăperea dată variațiile maximale a temperaturei după termometrul uscat se află între limitele de 1 grad celsius,
a temperaturii de iradiere – 0.8 grade celsius și a umidității- 10%.
Sistemele de condiționare a aierului sunt de câteva feluri:
a) centrale cu un canal și o zonă, ce deservesc una sau mai multe încăperi fără împărțirea sistemelor în zone.
b) centrale cu un canal și cu mai multe zone, ce deservesc mai multe zone într-o încăpere sau câteva încăperi cu repartizerea aierului prin țevi pentru fiecare zonă sau încăpere.
c) centrale cu două canale și mai multe zone, ce deservesc câteva zone într-o încăpere sau mai multe încăperi cu distribuirea aierului prin două țevi- cu aier rece și încălzit- în fiecare zonă sau încăpere.
d) sisteme locale compuse, ca regulă, din condiționere asamblate cu productivitatea de până la 20 mii m3/oră, ce deservesc una sau mai multe încăperi și în fiecare din ele sunt instalate unul sau mai multe condiționere, ce saigură reglarea locală a temperaturii sau a temperaturii și a umidității relative a aierului.
e) sisteme combinate ce lucrează în comun cu sisteme de încălzire și răcire, de umezire adăugătoare locală și cu alte dispozitive.
Parametrii necesari ai microclimei în încăperile de producție se asigură prin diferite metode.Pentru menținerea normelor aflării substanțelor dăunătoare în aer la locu de lucru se iau măsuri spre izolarea izvoarelor de substanțe dăunătoare,limitarea timpului de aflare a oamenilor în încăperile cu conținutul atmosferic dăunătoare în aer ș.a.
Una din tehnicile folosite în procesul de producție pentru eliminarea substanțelor dăunătoare din aerul zonei de lucru este ventilarea. Sistemele de ventilare asigură parametrii necesari ai microclimei în aerul zonei de lucru. Ventilarea este divizată în dou categorii în depndență de natura aceasta: ventilare naturală și artficială.
La ventilarea artificială schimbul de aier se efctuază cu ajutorul ventilatorului pri sistemele de canale cu aer. Reeșind din principiul de lucru a ventilatorului, ventilarea artificială se clasifică în următoarele categorii : de refulare ,de aspiratie, combinata.În sistemele de ventilare artificială aerul tras în încăperea de lucru poate fi uscat ,umezit ,răcit.Adică parametrii aerului tras, la ventilare artficială pot fi schimbați.
În prezent asigurarea normativelor de ventilare a aerului zonei de lucru sunt folosite dispozitive de condiționare a aerului. Cu ajutorul dispozitivului de condiționare aerului poate fi uscat ,umezit, ozonat ,dezodorat răcit sau încălzit.
Conform normativelor sanitar-igienice fiecărui lucrător trebue de asigurat de la 20m3 /h pînă la 30m3/h. Raportul între volumul încaperii și numărul de persoane care lucrează în această încăpere nu trebue să fie mai mic decît 20m 3. În lipsa substanțelor dăunătoare în încăpere , dacă volumul de aer pentru un lucrător e mai mare de 40m3 , normativele de ventilare nu sunt reglamentate.
Deoarece incaperea in care a fost elaborata lucrarea data întră în categoria I-raportul volumului de aer din laborator și numărul de persoane care se află în laborator în timpul lucrărilor este mai mic decît 20m3 pentru o persoană, aerul zonei laboratorului trbuie ventilat.Volumul de aer care trebue să fie tras trebue să fie în diapazonul de la 20m3/h pentru o persoană la 30m3/h. E de mentionat faptul, ca in incaperea susnumita sunt amplasate 3 locuri de munca.Deci trebuie de ales un așa tip de dispozitiv de condiționare care ar asigura cerințele expuse mai sus.
Un așa tip de aparat poate servi dispozitivul de tip BK-2500, care are următoruii parametri tehnici:
Volumul de aier extras – 1000 m3/h;
Tensiunea de alimentare – 220V , 50Hz;
Schema de lucru a unui dispozitiv de condiționare tipic este arătată în desenul următor de mai jos.
Fig. 4.1 Schema tipica de lucru a conditionerului BK-2500
1 – canalul aerului din afară;
2 – canalul aerului recirculant;
3 – filtrul;
4,7 – încălzitoare de aer;
5 – injectoare;
6- separator de picături;
8- aierul condiționat.
Date din pașapotul tehnic a condiționerului BK 2500
Date tehnice:
Instalația de condiționare BK 2500
Productivitatea de aer rece , kcal/h – 2500
Substanța folosită pentru răcire, – freon
Puterea consumată (de la sursa de curent alternativ) W, -1650
Tensiunea,V – 220
Frecvența curentului , Hz -50
Nivelul de zgomot , dB – 60
Curentul de lucru ,A – 8
Dimensiunele, mm
Înălțimea 460
lățimea 660
adîncimea 615
greutatea , kg 65
4. 3 Calcularea iluminatului natural
O mare importanță pentru asigurarea capacității înalte de muncă și bunei dispoziții are iluminarea optimală a locului de muncă. Iluminatul poate fi natural (cu folosirea energiei solare) artificial (cu ajutorul becurilor incandescente și fluoriscente) și combinată. Iluminatul natural, la rândul său, se împarte în lateral (prin ferestre), de sus (prin felinare) și combinat.
Calcularea iluminatului natural constă din calcularea ariei totale a ferestrelor, felinarelor în m2. Lucrările de proiectare a lucrării de diplomă date s-a efectuat într-o încăpere ce are numai iluminat lateral (o fereastră).
Calcularea ariei ferestrei se efectuiază după formula:
100(So/Sp) = ((En*Kr*ho/to*r1)*Kcl) (4.3.1)
unde
So – aria felinarelor (în cazul iluminatului lateral);
Sp – aria podelei;
En – valoarea normată a coieficientului de iluminat natural (CIN);
Kr -coieficient de rezervă ce depinde de tipul de încăpere și poziția sticle (verticală, sub unghi…),
ho – caracteristica de iluminare a ferestrelor (depinde de lungimea, adâncimea încăperii și de distanța de la nivelul de lucru până la punctul de sus al ferestrei);
Kcl – coieficient ce depinde de umbrirea ferestrelor de către clădirile vecine;
r1 – coieficient ce depinde de mărirea CIN în cazul iluminării laterale datorită luminii reflectate de la suprafața încăperii și de la suprafețele din apropierea clădirii;
to – coieficientul general de trecere a luminii , ce se determină conform relației.
to = t1*t2*t3*t4*t5 ,
unde
t1- coieficient de trecere a luminii prin materialul, din care-i făcut fereastra;
t2 – coieficient ce depinde pierderile de lumină în rama ferestrei;
t3 – coieficient ce depinde de pierderile de lumină în construcțiile purtătoare;
t4 – coieficient ce ține de pierderile de lumină în instalațiile apărătoare de soare;
t5 – coieficient ce ține de pierderile de lumină în setca de protecție ce se instalează sub felinar, este egal cu 0.9.
Toți acești coieficienți se determină conform СНиП II-4-79 în dependență de diferiți factori.
În cazul iluminării naturale laterale se normează valoarea minimală a CIN în punctul situat la distanța de 1m de la peretele cel mai îndepărtat de la ferestre pe intersecția suprafeței verticale a secțiunei caracteristice a încăperii cu suprafața de lucru ( sau a podelei).
Valoarea normată a CIN En pentru clădirile ce se află în brâurile climaterice I, II, IV și V ale climatului de lumină se determină după formula :
En(I,II,IV,V) = En(III)*m*C,
unde
En(III)- valoarea CIN ce depinde de tipul lucrului vizual și tipul de încăpere ( publică, de producere, depozit ș.a.);
m – coieficientul climatului de lumină ( pentru condițiile date m=0.9);
C – coieficientul de solarizare a climatului ce depinde de zona climaterică și amplasarea ferestrelor în pereții externi ai clădirii.
Desfășurarea proiectării diplomei are loc într-o încăpere a Centrului Republican de Informatică cu dimensiunile:
lungimea – 6.5 metri;
lățimea – 2.5 metri;
înălțimea – 3.5 metri.
încăperea dată are o fereastră cu dimensiunile: 2.0 X 1.3 m.
Deci aria ferestrei și a podelei încăperii sunt egale cu :
So = 2*1.3 = 2.6 m2 și Sp = 6.5*2.5 = 16.25 m2.
De remarcat faptul că orașul Chișinău este așezat în zona IV a climatului de lumină al fostei URSS.
În rezultatul consultării standardului СНиП II-4-79 pentru condițiile de față s-au primit următoarele valori ale coieficienților :
En = 0.63; Kr =1.2 ; ho=7.5; t1 =0.75 ; t2 =0.65; t3=1; t4 =1; t5 =0.9
deci to =0.44; r1 =1.3; Kcl =1; En(III) =1; m =0.9; C = 0.7
Efectuind calculele conform expresiei (4.3.1) se primeste ca rezultat valoarea necesara pentru aria totala a ferestrelor laterale : So=1.7 m2. Tinand cont de faptul, ca aria ferestrei laterale din incaperea, unde a fost efectuata lucrarea data este egala cu 2.6 m2 se conchide ca iluminatul natural este asigurat la nivelul satisfacator.
4.4 Cerințele ergonomice la locul de lucru
Conform SSSM pentru fiecare tip de utilaj nou, proces tehnologic nou se elaborează capitolul "Cerințele securității în condițiile tehnice". Din acest capitol fac parte și cerintele ergonomice, care constau în crearea unui mediu confortabil de lucru. Mediul de lucru in laborator pentru utilizator este calculatorul.
Cerintele ergonomice in Centrul Republican de Informatică depind de mai mulți factori din mediul de lucru al utilizatorului, care determină dacă el lucreaza eficient si într-un mod care îi asigură sănătate și siguranță. Modul în care este aranjată mobila, utilajul laboratorului, iluminarea și alte condiții de lucru pot influiența faptul cum se simte utilizatorul și cât de eficient lucreaza.
În timpul instalării calculatorului se evalueaza mediul în care se va lucra. Cu cât se minimalizeaza oboseala și disconfortul, cu atât se creeaza un mediu mai confortabil, mai sănătos și mai eficient pentru lucrul utilizatorului.
Este în interesul utilizatorului să-și aranjeze locul de muncă confortabil din punct de vedere al sănătații. Cazul contrar ar putea duce la disconfort și ar afecta serios sănătatea lui.
Sugestiile date aici sunt planificate pentru a ajuta selectarea căilor care ar asigura lucrul mai efectiv și mai confortabil, însă numai utilizatorul este persoana, care poate determina și aranja mediul cel mai bun de lucru.
Mobila și amplasarea ei. Mobilierul trebuie aranjat în așa fel, ca să satisfacă cerințele pentru a obține o atmosferă de confort. Dacă masa de la locul de lucru este ajustabilă, atunci se ajustează înălțimea potrivită, in caz contrar se aranjează scaunul în modul care ar satisface necesitățile. Ajustarea corectă a scaunului poate adăuga confort prin asigurarea unei poziții bune. Atunci când se selecteaza și se aranjează scaunul este necesar de reținut următoarele: fiți siguri dacă scaunul D-tră este de înălțimea potrivită. Poziția corectă ar fi aceea, care V-ar da posibilitatea să Vă mențineți poziția propriei mâini și să plasați picioarele pe podea. Genunchii trebuie să fie la același nivel cu șoldurile, ori puțin mai sus. Utilizați un suport pentru picioare în cazul când scaunul D-tră este prea înalt și picioarele nu ajung până la podea.
Ca recomandații individuale pot servi următoarele:
Atunci când ședeți, evitați presiunea de-a lungul coapsei și părții din jos a picioarelor. Genunchii trebuie să fie puțin mai sus decât șoldurile.
Așezați-vă așa ca partea de jos a spatelui să se sprigine atunci când ședeti la locul de lucru.
Ocupați o poziție de lucru naturală, dreaptă și relaxantă și lăsați scaunul să vă sprigine. Evitați pozitia aplecată atât înainte, cât și în urmă.
Variați sarcinile D-tră pentru a nu vă afla în aceiași poziție în decursul a câtorva ore.
Faceți întreruperi periodice atunci când lucrați la calculator timp îndelungat (câteva ore). Vă veți putea convinge că întreruperile scurte, dar frecvente vor fi mai benefice decât întreruperile mai lungi și rare.
Ridicați-vă și întindeți-vă câteva minute și faceți exerciții de câteva ori pe zi.
Schimbați frecvent poziția atunci când ședeți, pentru a reduce oboseala muschilor.
Faceți ca materialele de lucru să vă fie la îndemână.
Așezarea monitorului. Dacă monitorul e plasat în poziția corespunzătoare și la înaltimea corectă, atunci se reduce încordarea ochilor, cât și oboseala mușchilor gâtului și a umerilor. La plasarea monitorului e binevenit să fie urmate următoarele recomandații:
Așezați monitorul direct în fața D-tră la o distanță de vedere potrivita.
Atunci când ședeți la locul de lucru asigurați-vă că partea de sus a monitorului nu este mai sus decât nivelul ochilor.
Așezați monitorul în așa mod, pentru a evita strălucirile, ori alte reflecții strălucitoare.
Dacă monitorul are caracteristicile de înclinare și cuplaj, utilizați-le pentru a găsi cea mai bună poziție a lui. Este posibil ca să doriți să înclinați puțin monitorul pe spate pentru ca ecranul să vă satisfaca privirea.
Utilizați lumina monitorului și punctele de control ale monitorului pentru a îmbunătăți caracterul și calitatea imaginii.
Dacă utilizați un suport pentru documente, apoi trebuie să-l localizati la același nivel și distanță de vedere ca și monitorul.
Așezarea tastaturii, soricelului, și a altor dispozitive. Tastatura și celelalte dispozitive, ca de exemplu, șoricelul, trebuie să fie situate în așa poziție, încât brațele și palmele să se afle într-o poziție naturală, confortabilă și relaxantă. Tastatura se așează în poziția confortabila pentru utilizator. Ca recomandații pot servi următoarele:
Alegeți o suprafață de lucru destul de încăpătoare unde să țineți utilajul pentru calculator și celelalte articole auxiliare necesare pentru lucrul D-tră.
Așezați tastatura exact în fața D-tră. Aceasta vă dă posibilitate să tapați astfel ca umerii să rămână relaxați și brațele să atârne liber în părți.
Ajustați înălțimea scaunului sau a suprafeței de lucru în așa mod, ca antebrațul să formeze un unghi drept cu brațul.
Minimalizați îndoirea palmelor și țineți coatele aproape de corp.
Evitați taparea îndelungată, îndeosebi dacă este forțată.
Dacă utilizați șoarecele, asigurați loc destul pentru mișcări libere, nestingherite.
Atunci când țineți șoarecele, lăsați palma pe masă. Apucați șoarecele ușurel. Lăsați degetul arătător pe un buton și al doilea deget pe altul.
Asigurarea iluminării și protecția vederii. Iluminarea corectă adaugă eficacitate și confort în lucrul utilizatorului. Iluminarea trebuie să fie aranjata astfel, ca să ajute la efectuarea tipului de lucru cel mai des efectuat de caăre el. De exemplu, dacă cea mai mare parte a lucrului este efectuată în fața calculatorului, atunci trebuie să luați în considerație următorii factori:
Dacă este posibil, aranjați utilajul ori sursa de iluminare astfel ca reflecțiile strălucitoare de pe ecran să fie minimalizate.
Dacă încăperea are geamuri, atunci se recomandă utilizarea jaluzelelor, obloanelor ori draperiilor pentru a dirija cantitatea de lumină din încăpere. Încercați să plasați monitorul astfel ca părțile lui să fie situate spre geam. Aceasta poate reduce strălucirea pe ecran.
Așezați monitorul între rândurile luminilor de sus pentru a evita strălucirea.
Combinați iluminarea generala cu cea specială (a sarcinii date) pentru necesitățile de iluminare, însă evitați sursele de lumină strălucitoare din câmpul vederii.
Utilizați iluminarea directă pentru a evita petele strălucitoare pe ecran.
Atunci când se lucrează la calculator o perioadă mai îndelungată de timp, ochii pot deveni iritați și obosiți. De aceea trebuie acordată o atenție specială protecției vederii:
Faceți întreruperi frecvente și odihniți ochii.
Mentineți ochelarii, lentilele de contact și ecranul calculatorului în curățenie.
Dacă utilizați filtrul de strălucire, curătați-l conform instrucțiunilor.
Examinați-vă regulat ochii la medicul oculist.
Dacă se vor urma toate recomandările menționate parametrii ergonomici ai mediului de lucru pot fi considerate satisfăcătoare.
4.5 Semnalizarea antiincendiară
Securitatea antiincendiară conform STAS 12.I.033-81 caracterizează o stare a obiectului, la care trebuie să fie exclusă posibilitatea izbucnirii si dezvoltarii incendiului.
Securitatea antiincendiară conform STAS 12.I.004-85 este asigurată:
de sistemul de prevenire a incendiului;
de sistemul de protecție antiincendiară;
de lucrările organizator – tehnice.
Sistemul de prevenire a incendiului prezintă un complex de lucrări organizatorice si mijloace tehnice, îndreptate spre excluderea condițiilor de izbucnire a incendiitor. Catre așa lucrări se referă lucrările de prevenire a formării mediului de ardere și apariția in ea a surselor de aprindere. Sistemul de protecție antiincendiară prezintă o combinare a lucrărilor organizatorice și a mijloacelor tehnice, îndreptate spre prevenirea posibilității de acțiune asupra oamenilor a factorilor periculoși ai incendiului și reducerea pagubelor materiale spre minimum. În sistemul de protecție antiincendiară intra:
lucrările cu caracter tehnologic;
mijloacele tehnice.
Lucrările organizator-tehnice includ:
organizarea echipei de securitate antiincendiară în mod corespunzător, dotarea tehnica și numărul de lucrători respectiv;
atragerea atenției lucrătorilor asupra asigurării securității antiincendiare;
organizarea instruirii lucrătorilor, slujbașilor și a populației în domeniul regulilor securității antiincendiare;
elaborarea lucrărilor asupra măsurilor de acționare a administrației, lucrătorilor, slujbașilor și a populației în cazul izbucnirii incendiului și organizarea evacuării oamenilor;
confecționarea și folosirea mijloacelor de propagandă a asigurării securității antiincendiare;
și altele.
Posibilitatea lichidării rapide a incendiului depinde mult de prevenirea la timp a acestuia.O metodă răspândită de prevenire este comunicația telefonică. O metodă mai răspândită și mai fiabilă de semnalizare antiincendiară este sistemul electric de semnalizare care constă din patru părți principale:
dispozitiv de prevenire, care se instalează la locurile de munca și se pun în funcțiune manual sau automat;
dispozitiv static de recepție, care recepționează semnale de la dispozitivul de prevenire și care le transmite în incăperea echipei de salvare antiincendiare;
sistemul de conductoare, care unește dispozitivul de prevenire cu stația de recepție;
acumulatoare sau sistemul de alimentare electrică.
Sistemele de prevenire antiincendiară trebuie să fie elaborate pentru fiecare obiect in parte, reieșind din probabilitatea apariției incendiului nu mai mare de 0.000001 în an referită la un nod (element) al obiectului dat.
Semnalizarea electrică antiincendiară în dependență de schema de legatură cu stația de recepție se divizeaza in:
– schema cu raze (figura 4.5.1);
schema inelară (figura 4.5.2).
Fig. 4.5. Schemele de legătură cu stația de recepție antiincendiară
În cazul schemei cu raze, de la stația de recepție la fiecare dispozitiv de prevenire se trage un conductor separat, numit rază. Raza constă din două conductoare independente – direct si indirect.
În cazul schemei inelare toate dispozitivele de prevenire se instaleaza in serie pe un cablu comun, ambele capete ale căruia sunt introduse în dispozitivul de recepție. La întreprinderile mari de obicei sunt conectate cîteva conductoare independente, iar pe fiecare conductor pot fi conectate pînă la 50 de dispozitive de prevenire.
Dispozitivele de prevenire pot fi manuale si automate. Cele manuale se construiesc in formă de butoane și se instaleaza in holuri sau pe scări. Cele automate în dependență de fenomenul fizic la care reacționează traductoarele se divizează în dispozitive de prevenire de fum, de căldură și de lumină.
Dispozitivele de prevenire care reacționează la fum reacționează la apariția fumului, de căldură – la mărirea temperaturii aerului în incăpere și cele de lumină – la apariția focului deschis.
Dispozitivele de prevenire de căldură automate în dependență de tipul elementului sensibil folosit se împart in: bimetalice, semiconductoare si termocupluri.
Se mai folosesc dispozitive de prevenire automate combinate care reacționează la fum și căldură. Își găsesc aplicație și dispozitivele de prevenire cu ultrasunet, care reacționează la schimbarea câmpului de ultrasunet în timpul incendiului.
Dispozitivele de prevenire antiincendiară automate se caracterizează prin sensibilitate, inerție și zone de acțune.
Concluzie
În cadrul acestei lucrari au fost studiate si analizate tehnologiile de acces distant dialogat prin Internet. Tehnologiile CGI-BIN si ISAPI sunt cele mai desavarsite si raspandite tehnologii in acest domeniu. Au fost studiate, deasemenea, protocolul de transport a hypertextului HTTP, limbajul de marcare HTML si limbajul de programare Perl. Ca realizare practica a acestor analize a fost elaborat un script in limbajul Perl,care primind datele de la utilizator, le analizeaza si genereaza un raspuns dinamic ce se formeaza in dependenta de conditiile indicate de catre utilizator in forma HTML.Aceasta aplicatie are posibilitatea de a deservi in acelas timp 1000 de utilizatori. Ca obiect al analizei al acestei aplicatii sun datele ce tin de baza de date legislativa a Republicii Moldova. Ca date de intrare sunt conditiile de cautare a unui act indicate de utilizator, iar datele de iesire sunt documente generate dinamic, care contin referinte la actele cautate. A fost apreciat efectul economic al acestei lucrari, care a dat urmatoarele rezultate:
-micsorarea cheltuielilor de timp si materiale la abonatii(benificiarii) acestui sistem in comparatie cu consultarea manuala a actelor legislative.
-se prevede un efect economic de circa 50 000 lei in timp de un an la Centrul National de Informatica (unde a fost elaborata aceasta lucrare).
In cadrul compartimentului ‘Protectia muncii’ au fost analizate conditiile de munca in incaperea, unde a fost proiectata lucrarea data si calculat iluminatul natural al acestei incaperi. Toti acesti factori sunt satisfacatori .
Bibliografia
Крис Джамса. Программирование в Web для профессионалов.
Попурри. Минск 1997.
2. Фролов. Сервер Web своими руками
Москва. ДИАЛОГ-МИФИ. 1997.
3. Пол Дж. Перри. Секреты World Wide Web.
Киев. Диалектика. 1996.
4. Билл Игер. Работа в Internet
Москва. Бином. 1996
5. Ресурсы Microsoft Windows NT Server 4.0 .Руководство для профессионалов.
BHV-Санкт-Петербург 1997.
6. Н.И.Баклашов и.др. Охрана труда и окружающей среды.
Москва.Радио и связь. 1989.
7. Valentin Cristea. Mai multe despre Internet.
8. Literatura electronica. Servere Web:
http://www.apache.org/lybrary
http://www.softlab.ntua.gr/www/httpd.html
http://www.w3/pub/WWW/Protocols/
http://www.microsoft.com/workshop/author/layout/layout.htm
http://www.shareware.com
http://www.ast.ac.uk
http://www.website.ora.com
http://www.worldwidemart.com/scripts
http://www.java.sun.com/faq/
http://www.w3.nsc.ru
http://www.visti.net
http://www.swzserv.kemerovo_su
http://www.citforum.ru
http://www.sun_center.nsc.ru
Anexa 1
Programul ‘diplom1.htm’ (listing)
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 3.2//EN”>
<html>
<head>
<title>Legislatia Republicii Moldova</title>
</head>
<body background=”/1/pic/tile.gif”>
<center>
<table border=”0” width=”70%”>
<tr>
<td><img src=”/1/pic/drapelul.gif”
alt=”Lucrare de diploma Musicov Vitalie TI-961” ></td>
<td><font size=6 color=”red”>Legislatia Republicii Moldova
</font></td>
</tr>
</table>
</center>
<hr width=”95%” color=”#007B6B”>
<center>
<table border=”0” cellspacing=”2” cellpadding=”2” width=”95%”>
<tr>
<td width=”90” valign=”middle”>
<p align=”center”><imgsrc=”/1/pic/23.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961” ></td>
<td><p align=”center”><b>Legile Republicii Moldova</b></td>
<td width=”90” valign=”middle”><p align=”center”>
<img src=”/1/pic/12.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961” ></td>
<td><p align=”center”>
<b>Hotaririle Parlamentului Republicii Moldova</b></td>
</tr>
<tr>
<td width=”90” valign=”middle”>
<p align=”center”><img src=”/1/pic/02.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961” ></td>
<td><p align=”center”>
<b>Decretele Presedintelui Republicii Moldova</b></td>
<td width=”90” valign=”middle”>
<p align=”center”><img src=”/1/pic/03.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961” ></td>
<td><p align=”center”>
<b>Hotaririle Guvernului Republicii Moldova</b></td>
</tr>
<tr>
<td width=”90” valign=”middle”>
<p align=”center”><img src=”/1/pic/11.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961”></td>
<td><p align=”center”>
<b>Dispozitiile Guvernului Republicii Moldova</b></td>
<td width=”90” valign=”middle”>
<p align=”center”><img src=”/1/pic/04.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961”></td>
<td><p align=”center”><b>Hotaririle Curtii Constitutionale</b></td>
</tr>
<tr>
<td width=”90” valign=”middle”>
<p align=”center”><img src=”/1/pic/20.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961”></td>
<td><p align=”center”><b>Tratate, Acorduri, Conventii</b></td>
<td width=”90” valign=”middle”>
<p align=”center”><img src=”/1/pic/13.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961”></td>
<td><p align=”center”><b>Ministerul de Finante</b></td>
</tr>
<tr>
<td width=”90” valign=”middle”>
<p align=”center”><img src=”/1/pic/15.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961”></td>
<td><p align=”center”><b>Banca Nationala</b></td>
<td width=”90” valign=”middle”>
<p align=”center”><img src=”/1/pic/21.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961”></td>
<td><p align=”center”><b>Inspectoratul Fiscal de Stat</b></td>
</tr>
<tr>
<td width=”90” valign=”middle”>
<p align=”center”><img src=”/1/pic/08.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961”></td>
<td>
<p align=”center”><b>Acte Ministeriale si Departamentale</b></td>
<td width=”90” valign=”middle”>
<p align=”center”><img src=”/1/pic/07.GIF”
alt=”Lucrare de diploma Musicov Vitalie TI-961”></td>
<td><p align=”center”>
<b>Comisia de Stat pentru Piata Hirtiilor de Valoare</b></td>
</tr>
</table>
</center>
<hr width=”95%” color=”#007B6B”>
<br>
<FORM METHOD=”GET” ACTION=”/1/diplom1.pl”>
<table>
<tr>
<td>
<basefont size=4>
<font color=blue>
<big><b><center>Alegeti compartimentul:</center></b></big></td>
<td>
<SELECT NAME=”compartiment”>
<option>Legile Republicii Moldova
<option>Hotaririle Parlamentului Republicii Moldova
<option>Decretele Presedintelui Republicii Moldova
<option>Hotaririle Guvernului Republicii Moldova
<option>Decretele Guvernului Republicii Moldova
<option>Hotaririle Curtii Constitutionale
<option>Comisia de stat pentru piata hirtiilor de valoare
<option>Acte Departamentale si Ministeriale
<option>Acte Internationale
<option>Ministerul Finantelor
<option>Banca Nationala
<option>Inspectoratul Fiscal
</SELECT>
</td>
</tr>
</table><br>
<table>
<tr>
<td>
<basefont size=4>
<font color=blue>
<big><b><center>Indicati anul:</center></b></big></td>
<td>
<SELECT NAME=”anul”>
<option>anul 1998
<option>anul 1999
<option>anul 2000
</SELECT> </td>
</tr>
</table><br>
<font size=4 color=green>
<b>Va rog scrieti numele D-voastra:</b>
<INPUT TYPE=”text” NAME=”nume”>
<font size=4 color=green>
<b>Indicati parola:</b>
<INPUT TYPE=”password” NAME=”parola”><br><P><P>
<center>
<INPUT TYPE=”submit” VALUE=”Consultare”>
<INPUT TYPE=”reset” VALUE=”Anulare”>
</center>
</FORM>
</BODY>
</HTML>
Anexa 2
Programul ‘ diplom1.pl ‘ (listing)
$query=$ENV{QUERY_STRING};
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>Rezultatul interogarii</TITLE></HEAD>\n";
print "<body background='tile.gif'>\n";
print "<font size=4>\n";
@fields = split('&', $query);
foreach (@fields) {
Switch: {
/^nume=(.*)/ && do {
$nume = &decode($1);
last Switch;
};
/^compartiment=(.*)/ && do {
$compartiment =&decode($1);
last Switch;
};
/^anul=(.*)/ && do {
$anul =&decode($1);
last Switch;
};
/^parola=(.*)/ && do {
$parola = &decode($1);
last Switch;
};
}
}
if ($parola ne 'jurist')
{
print "<b>Atentie!!!-Accesul intrerupt:Parola indicata gresit!</b><BR>\n";
print "<b><a href='/1/diplom1.htm'>Verificati parola</a></b><br>\n";
}
else { &compart;}
print "</BODY>\n";
print "</HTML>\n";
// subprogramul ‘decode’
sub decode {
local ($value) = @_;
$value =~ s/\+/ /g;
$value =~ s/%([0-9A-H]{2})/pack('C',hex($1))/eg;
return $value;
}
// subprogramul ‘compart’
sub compart {
SWITCH:
{
if($compartiment eq 'Legile Republicii Moldova') {&lpar ;last SWITCH;}
if($compartiment eq 'Hotaririle Parlamentului Republicii Moldova') {&hpar; last SWITCH;}
if($compartiment eq 'Decretele Presedintelui Republicii Moldova') {&dpre;
last SWITCH;}
if($compartiment eq 'Hotaririle Guvernului Republicii Moldova') {&hguv ;
last SWITCH;}
if($compartiment eq 'Decretele Guvernului Republicii Moldova') {&dguv ;
last SWITCH;}
if($compartiment eq 'Hotaririle Curtii Constitutionale') {&ccon ;
lastSWITCH;}
if($compartiment eq 'Acte Internationale') {&trat ;last SWITCH;}
if($compartiment eq 'Ministerul Finantelor') {&mfin ;last SWITCH;}
if($compartiment eq 'Banca Nationala') {&bnat ;last SWITCH;}
if($compartiment eq 'Inspectoratul Fiscal') {&mpri ;last SWITCH;}
if($compartiment eq 'Acte Departamentale si Ministeriale') {&depm ;last SWITCH;}
if($compartiment eq 'Comisia de stat pentru piata hirtiilor de valoare') {&cphv ;last SWITCH;}
}
}
//
// urmeaza subprogramele de adresare la acte corespunzator
// compartimentelor si anilor
//
sub bnat {
if($anul eq 'anul 1998') {
print "<b>BANCA NATIONALA <br></b>\n";
print "<b> Pentru anul 1998 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/bnat/a98/1HOT089.htm'>BN HOT din 27.03.98</A></b>\n";
print "<b> Hotarire nr.73 privind modificarea si completarea Regulamentului nr.53\09-01 cu privire la exigentele fata de administratorii bancii<BR></b>\n";
print "<b> Dimensiunea 2353 b<br></b>\n";
}
elsif($anul eq 'anul 1999')
{
print "<b>Pentru anul 1999 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/bnat/a99/1ODIF372.htm'>BN MODIF din 31.12.99</A></b>\n";
print "<b> Modificari la Instructiunea Bancii Nationale</b>\n";
print "<b>Despre modul de emitere si inregistrare a hirtiilor de valoare emise de</b>\n";
print "<b>catre bancile comerciale pe actiuni nr.26\08-02 (Monitorul Oficial al</b>\n";
print "<b>Republicii Moldova nr.61-62 din 20 septembrie 1996)</b>\n";
print "<b>Dimensiunea 1790b<br></b>\n";
}
else { print "<b>Pentru anul 1996 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif' ></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/bnat/a96/1HOT372.htm'>BN HOT din 31.12.96</A></b>\n";
print "<b> Directiile principale ale politicii monetare si valutare a Bancii Nationale a Moldovei pentru anul 1997<BR></b>\n";
print "<b> Dimensiunea 8885 b<br></b>\n";
}
}
sub ccon {
if($anul eq 'anul 1998')
{ print "<b>HOTARIRILE CURTII CONSTITUTIONALE<br></b>\n";
print "<b>Pentru anul 1998 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/ccon/a98/111102.htm'>CC 11 din 09.04.98</A></b>\n";
print "<b> cu privire la confirmarea legalitatii alegerii Parlamentului Republicii Moldova si validarea mandatelor deputatilor alesi<BR></b>\n";
print "<b> Dimensiunea 22928 b<br></b>\n";
}
elsif($anul eq 'anul 1997')
{
print "<b>Pentru anul 1997 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/ccon/a97/16367.htm'>CC 6 din 26.12.97</A></b>\n";
print "<b> Decizie<BR></b>\n";
print "<b> Dimensiunea 4502 b<br></b>\n";
}
else { print "<b>Pentru anul 1996 sunt selectate urmatoarele
acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/ccon/a96/124e362.htm'>CC 24e din 21.12.96</A></b>\n";
print "<b> cu privire la confirmarea si validarea rezultatelor alegerii Presedintelui Republicii Moldova<BR></b>\n";
print "<b> Dimensiunea 5853 b<br></b>\n";
}
}
sub cphv {
if($anul eq 'anul 1998')
{ print "<b>COMISIA DE STAT PENTRU PIATA HIRTIILOR DE VALOARE<br></b>\n";
print "<b>Pentru anul 1998 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/cphv/a98/1HOT057.htm'>HV HOT din 26.02.98</A></b>\n";
print "<b> Hotarire nr. 4/3 cu privire la modificarea Regulamentului cu privire la registrul actionarilor\registrul posesorilor de obligatii ai societatii pe actiuni si Regulamentului cu privire la licentiere</b>\n";
print "<b> Dimensiunea 2993 b<br></b>\n";
}
elsif($anul eq 'anul 1997')
{
print "<b>Pentru anul 1997 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/cphv/a97/1HOT5359.htm'>HV HOT5 din 18.12.97</A></b>\n";
print "<b> Hotarirea nr. 74/3 privind prestarea serviciilor de depozitare fondurilor de investitii<BR></b>\n";
print "<b> Dimensiunea 54416 b<br></b>\n";
}
else { print "<b>Pentru anul 1996 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/cphv/a96/1HOT360.htm'>HV HOT din 19.12.96</A></b>\n";
print "<b> Hotarirea nr.50-7 privind modificarea si completarea Hotaririi CSPHV nr.45-1 din 08.10.96<BR></b>\n";
print "<b> Dimensiunea 1677 b<br></b>\n";
}
}
sub depm {
if($anul eq 'anul 1998')
{ print "<b>= ACTE MINISTERIALE SI DEPARTAMENTALE<br></b>\n";
print "<b>Pentru anul 1998 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/depm/a98/1HOT087.htm'>MD HOT din 25.03.98</A></b>\n";
print "<b> DIRECTIA PENTRU POLITICA DE CADRE PE LINGA GUVERN Hotarire nr.2\2 despre aprobarea Recomandarilor cu privire la modul de formare a rezervei de cadre pentru serviciul public<BR></b>\n";
print "<b> Dimensiunea 7978 b<br></b>\n";
}
elsif($anul eq 'anul 1997')
{
print "<b>Pentru anul 1997 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/depm/a97/1HOT1366.htm'>MD HOT1 din 25.12.97</A></b>\n";
print "<b> CURTEA DE CONTURI Hotarire nr.56 privind rezultatele controlului efectuat asupra activitatii Serviciului de stat pentru supravegherea asigurarilor<BR></b>\n";
print "<b> Dimensiunea 20226 b<br></b>\n";
}
else { print "<b>Pentru anul 1996 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/depm/a96/1SCR324.htm'>MD SCR din 14.11.96</A></b>\n";
print "<b> MINISTERUL AFACERILOR INTERNE Acte pentru perfectarea pasaportului national<BR></b>\n";
print "<b> Dimensiunea 1820 b<br></b>\n";
}
}
sub dguv {
if($anul eq 'anul 1998'){print "<b>Pentru anul 1998 actele nu-s selectate<br></b>\n";}
elsif($anul eq 'anul 1997')
{
print "<b>= DISPOZITIILE GUVERNULUI REPUBLICII MOLDOVA <br></b>\n";
print "<b>Pentru anul 1997 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/dguv/a97/1380252.htm'>DG 380 din 04.09.97</A></b>\n";
print "<b> Dispozitie<BR></b>\n";
print "<b> Dimensiunea 1290 b<br></b>\n";
}
else { print "<b>Pentru anul 1996 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/dguv/a96/1554359.htm'>DG 554 din 18.12.96</A></b>\n";
print "<b> Dispozitie<BR></b>\n";
print "<b> Dimensiunea 1078 b<br></b>\n";
}
}
sub dpre {
if($anul eq 'anul 1998')
{ print "<b>= DECRETELE PRESEDINTELUI REPUBLICII MOLDOVA<br></b>\n";
print "<b>Pentru anul 1998 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/dpre/a98/1558103.htm'>DP 558 din 10.04.98</A></b>\n";
print "<b> privind convocarea Parlamentului nou-ales<BR></b>\n";
print "<b> Dimensiunea 1093 b<br></b>\n";
}
elsif($anul eq 'anul 1997')
{
print "<b>Pentru anul 1997 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/dpre/a97/1406364.htm'>DP 406 din 23.12.97</A></b>\n";
print "<b> privind unele masuri de asigurare a disciplinei financiare<BR></b>\n";
print "<b> Dimensiunea 3585 b<br></b>\n";
}
else { print "<b>Pentru anul 1996 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/dpre/a96/1381359.htm'>DP 381 din 18.12.96</A></b>\n";
print "<b>cu privire la Hotarirea Guvernului nr. 679 din 5 decembrie 1996<BR></b>\n";
print "<b> Dimensiunea 1179 b<br></b>\n";
}
}
sub hguv {
if($anul eq 'anul 1998')
{ print "<b>= HOTARIRILE GUVERNULUI REPUBLICII MOLDOVA<br></b>\n";
print "<b>Pentru anul 1998 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/hguv/a98/1443102.htm'>HG 443 din 09.04.98</A></b>\n";
print "<b> cu privire la transmiterea in administrarea fiduciara a S.A. Finex a pachetului de actiuni ale statului din capitalul social al S.A. Fermenttutun din or. Drochia<BR></b>\n";
print "<b> Dimensiunea 2635 b<br></b>\n";
}
elsif($anul eq 'anul 1997')
{
print "<b>Pentru anul 1997 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/hguv/a97/11222372.htm'>HG 1222 din 31.12.97</A></b>\n";
print "<b>cu privire la Planul de actiuni, devizul estimativ</b>\n";
print "<b>de cheltuieli si componenta nominala a Comitetului organizatoric pentru</b>\n";
print "<b>pregatirea si participarea colectivelor artistice populare si
artizanilor</b>\n";
print "<b>din Republica Moldova la editia a II-a a Folcloriadei Mondiale<br></b>\n";
print "<b> Dimensiunea 12708 b<br></b>\n";
}
else { print "<b>Pentru anul 1996 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/hguv/a96/1750372.htm'>HG 750 din 31.12.96</A></b>\n";
print "<b> Cu privire la aprobarea structurii, personalului scriptic si devizului de cheltuieli ale Reprezentantei Permanente a Republicii Moldova pe linga Organizatia Natiunilor Unite<BR></b>\n";
print "<b> Dimensiunea 5453 b<br></b>\n";
}
}
sub hpar{
if($anul eq 'anul 1998')
{ print "<b>= HOTARIRILE PARLAMENTULUI REPUBLICII MOLDOVA <br></b>\n";
print "<b>Pentru anul 1998 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/hpar/a98/17116.htm'>HP 7 din 23.04.98</A></b>\n";
print "<b> pentru alegerea vicepresedintelui Parlamentului<BR></b>\n";
print "<b> Dimensiunea 1065 b<br></b>\n";
}
elsif($anul eq 'anul 1997')
{
print "<b>Pentru anul 1997 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/hpar/a97/11442365.htm'>HP 1442 din 24.12.97</A></b>\n";
print "<b> privind Conceptia de dezvoltare a gospodariei cinegetice nationale<BR></b>\n";
print "<b> Dimensiunea 19167 b<br></b>\n";
}
else { print "<b>Pentru anul 1996 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/hpar/a96/11072368.htm'>HP 1072 din 27.12.96</A></b>\n";
print "<b> cu privire la reglementarea preturilor la medicamente si articole de uz medical<BR></b>\n";
print "<b> Dimensiunea 1795 b<br></b>\n";
}
}
sub lpar {
if($anul eq 'anul 1998')
{ print "<b>= LEGILE REPUBLICII MOLDOVA <br></b>\n";
print "<b>Pentru anul 1998 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/lpar/a98/11585058.htm'>LE 1585 din 27.02.98</A></b>\n";
print "<b> cu privire la asigurarea obligatorie de asistenta medicala<BR></b>\n";
print "<b> Dimensiunea 20936 b<br></b>\n";
}
elsif($anul eq 'anul 1997')
{
print "<b>Pentru anul 1997 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/lpar/a97/11446368.htm'>LE 1446 din 27.12.97</A></b>\n";
print "<b> Legea bugetului pe anul 1998<BR></b>\n";
print "<b> Dimensiunea 229133 b<br></b>\n";
}
else{ print "<b>Pentru anul 1996 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/lpar/a96/11074368.htm'>LE 1074 din 27.12.96</A></b>\n";
print "<b> privind rectificarea bugetului de stat pe anul 1996<BR></b>\n";
print "<b> Dimensiunea 21226 b<br></b>\n";
}
}
sub mfin {
if($anul eq 'anul 1998')
{ print "<b> = MINISTERUL DE FINANTE <br></b>\n";
print "<b>Pentru anul 1998 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/mfin/a98/1HOT051.htm'>MF HOT din 20.02.98</A></b>\n";
print "<b> Hotarire nr. 29p cu privire la stabilirea platii pentru eliberarea licentelor de producere, stocare si comercializare angro a produselor alcoolice<BR></b>\n";
print "<b> Dimensiunea 2871 b<br></b><BR>\n";
}
elsif($anul eq 'anul 1997')
{
print "<b>Pentru anul 1997 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/mfin/a97/1NSTR371.htm'>MF INSTR din 30.12.97</A></b>\n";
print "<b> Privind volumul, modul de intocmire si prezentare a darii de seama financiare anuale a agentilor economici pe anul 1997<BR></b>\n";
print "<b> Dimensiunea 14597 b<br></b>\n";
}
else{ print "<b>Pentru anul 1996 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/mfin/a96/1RDIN352.htm'>MF ORDIN din 11.12.96</A></b>\n";
print "<b> Ordinul nr.81 cu privire la aprobarea Metodologiei temporare a calcularii marimii normative a corelatiei dintre valoarea activelor proprii si obligatiilor de asigurare asumate ale asiguratorului<BR></b>\n";
print "<b> Dimensiunea 11979 b<br></b>\n";
}
}
sub mpri {
if($anul eq 'anul 1998'){ print "<b> Pentru anul 1998 actele nu-s selectate</b><br>\n";}
elsif($anul eq 'anul 1997')
{
print "<b>= INSPECTORATUL FISCAL DE STAT<br></b>\n";
print "<b>Pentru anul 1997 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/mpri/a97/pNSTR364.htm'>IF INSTR din 23.12.97</A></b>\n";
print "<b> Instructiune nr.05/1-CF-06/88 cu privire la retinerea impozitului pe venit la sursa de plata<BR></b>\n";
print "<b> Dimensiunea 94996 b<br></b>\n";
}
else{ print "<b>Pentru anul 1996 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/mpri/a96/1NSTR332.htm'>IF INSTR din 22.11.96</A></b>\n";
print "<b> Instructiune nr.10-44-01/03-222 privind modul de ridicare a mijloacelor banesti in numerar, inclusiv in valuta straina, care se afla in seiful casei platitorului sau intr-o incapere izolata a acestei</b>\n";
print "<b> Dimensiunea 25768 b<br></b>\n";
}
}
sub trat{
if($anul eq 'anul 1998') { print "<b> Pentru anul 1998 actele nu-s selectate</b><br>\n";}
elsif($anul eq 'anul 1997')
{
print "<b>= TRATATE, ACORDURI, CONVENTII<br></b>\n";
print "<b> Pentru anul 1997 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/trat/a97/1CORD152.htm'>TR ACORD din 28.05.97</A></b>\n";
print "<b>Acordul intre administratiile cailor ferate ale</b>\n";
print "<b>tarilor-participante la Comunitatea Statelor Independente, Republica</b>\n";
print "<b>Letonia, Republica Lituania, Republica Estonia cu privire la</b>\n";
print "<b>particularitatile anumitor norme ale Acordului cu privire la traficul</b>\n";
print "<b>international de calatori (ATIC)<br></b>\n";
print "<b> Dimensiunea 6303 b<br></b><BR>\n";
}
else { print "<b>Pentru anul 1996 sunt selectate urmatoarele acte:<br></b>\n";
print "<b><IMG SRC='/1/pic/off.gif'></b>\n";
print "<b><A HREF='/1/clegi_ro/compart/trat/a96/1NVEN317.htm'>TR CONVEN din 07.11.96</A></b>\n";
print "<b> Conventie intre Republica Moldova si Republica Polonia privind evitarea dublei impuneri pe venit si pe proprietate si prevenirea evaziunii fiscale<BR></b>\n";
print "<b> Dimensiunea 50172 b<br></b>\n";
} }
Anexa 3
Schema – bloc a programului diplom.pl
Schema-bloc a Schema-bloc a Schema-bloc a
subprogramului subprogramului subprogramului
'decode' 'compartiment' 'anul'
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Acces Distant Dialogat In Internet (ID: 148757)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
