Platformonafhankelijk systeem voor dynamische websites Dag Wieërs
[email protected]
4 Juni 1999 2de druk
Samenvatting Titel:
Platformonafhankelijk systeem voor dynamische websites.
Door:
Dag WIEËRS
Promotoren:
dhr. E. De Cock mevr. I. Godfrind
(IBM Belgium) (Hogeschool Limburg)
Het maken van websites evolueert snel. Traditioneel bestond een website voornamelijk uit statische pagina’s, eerst manueel gemaakt, nadien door programma’s gegenereerd. Tegenwoordig zijn websites een mengeling van statische delen gelinkt aan databanken zodat zowel aanmaak als beheer van websites eenvoudig en minder tijdrovend is. Om deze statische delen te koppelen aan databanken en om een consistente dynamische website te ontwikkelen is er nood aan een set hulpmiddelen. Deze hulpmiddelen of functies maken het mogelijk om te zoeken door databases, e-mails te verzenden, een shoppinglist bij te houden, . . . Aangezien het Net bestaat uit verschillende servers met diverse platformen, samengehouden dmv. TCP/IP, is het belangrijk dat een dergelijk systeem is ontworpen zodat het werkt op ieder platform. O.a. door de keuze van Perl, CGI en DBI werd dit bereikt. Dit eindwerk is opgesplitst in meerdere delen. Het eerste deel bespreekt de probleemstelling, het ontwerp en de implementatie. De andere delen bestaan uit een gebruikershandleiding, voorbeeldsites en de broncode.
Inhoudsopgave 1 Inleiding 1.1 Voorwoord . . . . . . . . 1.2 Profiel IBM Belgium . . . 1.3 Situering binnen het bedrijf 1.4 Over dit eindwerk . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
2 Project 1: Netwerkcontrole 2.1 Probleemstelling . . . . . . . . . . . . 2.1.1 Inleiding . . . . . . . . . . . . 2.1.2 Huidige situatie . . . . . . . . . 2.1.3 Analyse . . . . . . . . . . . . . 2.2 Realisatie . . . . . . . . . . . . . . . . 2.2.1 Keuze van de programmeertaal . 2.2.2 Keuze van componenten . . . . 2.2.3 Interface naar het Web . . . . . 2.3 Oplossing . . . . . . . . . . . . . . . . 2.3.1 Beschrijving . . . . . . . . . . 2.3.2 Broncode . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
7 7 8 10 11
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
13 13 13 13 14 15 15 16 16 18 18 23
3 Project 2: Dynamische websites 3.1 Definitiestudie . . . . . . . . . . . . . . . . . 3.1.1 Opdrachtomschrijving . . . . . . . . 3.1.2 Vooropgestelde eisen . . . . . . . . . 3.1.3 Studie van bestaande systemen . . . . 3.1.4 Keuze van Perl . . . . . . . . . . . . 3.1.5 Keuze van Apache . . . . . . . . . . 3.1.6 Keuze van DBI . . . . . . . . . . . . 3.2 Basisontwerp . . . . . . . . . . . . . . . . . 3.2.1 Globale oplossing . . . . . . . . . . 3.2.2 Directorystruktuur en Filebeschrijving 3.3 Schermontwerp . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
27 27 27 27 29 30 30 30 31 31 32 36
. . . . . . . . . . .
. . . . . . . . . . .
INHOUDSOPGAVE
3.4
3
3.3.1 Menu/Hoofdmenu . . . 3.3.2 Item . . . . . . . . . . . 3.3.3 Search/Zoek . . . . . . 3.3.4 db . . . . . . . . . . . . 3.3.5 User/Gebruiker . . . . . 3.3.6 Extra . . . . . . . . . . Detailontwerp . . . . . . . . . . 3.4.1 Beschrijving systeem . . 3.4.2 Beschrijving configuratie
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
36 38 40 41 43 45 46 46 51
A Voorbeelden 57 A.1 Dynamische website . . . . . . . . . . . . . . . . . . . . . . . . 57 A.2 Simpele shoppingmall . . . . . . . . . . . . . . . . . . . . . . . 57 A.3 Conversie van databases . . . . . . . . . . . . . . . . . . . . . . 57 B Verklarende woordenlijst B.1 AIX . . . . . . . . . B.2 Apache . . . . . . . B.3 API . . . . . . . . . B.4 ASP . . . . . . . . . B.5 browser . . . . . . . B.6 CGI . . . . . . . . . B.7 client . . . . . . . . B.8 CSS . . . . . . . . . B.9 DB2 . . . . . . . . . B.10 e-mail . . . . . . . . B.11 firewall . . . . . . . B.12 fork() . . . . . . . . B.13 HTML . . . . . . . . B.14 HTTP . . . . . . . . B.15 ICMP . . . . . . . . B.16 IP . . . . . . . . . . B.17 JavaScript . . . . . . B.18 Linux . . . . . . . . B.19 netcat . . . . . . . . B.20 NIC . . . . . . . . . B.21 ODBC . . . . . . . . B.22 Open Source software B.23 Perl & mod_perl . . B.24 PHP & mod_php . . B.25 ping . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
59 59 59 60 60 60 61 61 61 62 62 62 63 63 64 64 64 65 66 66 67 67 68 68 69 69
4
INHOUDSOPGAVE B.26 B.27 B.28 B.29 B.30 B.31 B.32 B.33
server . server . SSI . . . TCP/IP tunnel . UNIX . URL . . VIM . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
C Broncode C.1 /index.cgi . . . . . . . . . . . C.2 /syntax.cgi . . . . . . . . . . . C.3 /cmds/ . . . . . . . . . . . . . C.3.1 /cmds/add.pl . . . . . C.3.2 /cmds/browse.pl . . . C.3.3 /cmds/debug.pl . . . . C.3.4 /cmds/delete.pl . . . . C.3.5 /cmds/edit.pl . . . . . C.3.6 /cmds/fsearch.pl . . . C.3.7 /cmds/inspect.pl . . . C.3.8 /cmds/menu.pl . . . . C.3.9 /cmds/order.pl . . . . C.3.10 /cmds/surf.pl . . . . . C.3.11 /cmds/tsearch.pl . . . C.3.12 /cmds/undelete.pl . . . C.3.13 /cmds/view.pl . . . . . C.4 /conf/ . . . . . . . . . . . . . C.4.1 /conf/1.tks . . . . . . C.4.2 /conf/3.tks . . . . . . C.4.3 /conf/conf.lat . . . . . C.5 /modules/ . . . . . . . . . . . C.5.1 /modules/cookie.pm . C.5.2 /modules/daglib.pm . . C.5.3 /modules/db.pm . . . . C.5.4 /modules/db_dbi.pm . C.5.5 /modules/db_txt.pm . C.5.6 /modules/db_xbase.pm C.5.7 /modules/order.pm . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
70 71 72 72 73 74 74 75
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
77 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78
Lijst van figuren 1.1 1.2 1.3
IBM Stock Quotation Data . . . . . . . . . . . . . . . . . . . . . 8 IBM Stock Quotation Daily . . . . . . . . . . . . . . . . . . . . . 9 IBM Stock Quotation Monthly . . . . . . . . . . . . . . . . . . . 10
2.1 2.2 2.3
Alles is nog steeds in orde . . . . . . . . . . . . . . . . . . . . . 19 Hier loopt het plots duidelijk mis . . . . . . . . . . . . . . . . . . 20 En hier blijft het langdurig fout gaan . . . . . . . . . . . . . . . . 21
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19
Een overzicht van de mogelijkheden van de “eigenaar” Hetzelfde overzicht in het Engels op de user-database . Een voorbeeld van hoe je records kan toevoegen . . . . Bladeren door een database . . . . . . . . . . . . . . . En nadien het gekozen record bekijken . . . . . . . . . Verwijderen van records . . . . . . . . . . . . . . . . Welk record wilt u aanpassen ? . . . . . . . . . . . . . Aanpassen van records . . . . . . . . . . . . . . . . . Welk record wilt u zien ? . . . . . . . . . . . . . . . . Het bekijken van records . . . . . . . . . . . . . . . . Zoeken door een database dmv. één of meerdere velden Het gevonden resultaat na het zoeken op een veld . . . Zoeken door de gehele database dmv. keywords . . . . Het gevonden resultaat . . . . . . . . . . . . . . . . . Debug-informatie om problemen op te lossen . . . . . Een echte kijk op de database . . . . . . . . . . . . . . Bewerk je eigen record . . . . . . . . . . . . . . . . . Een lijst van statische pagina’s . . . . . . . . . . . . . Het bekijken van je eigen user-record . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
6
LIJST VAN FIGUREN
Hoofdstuk 1 Inleiding 1.1
Voorwoord
Graag wil ik mijn dank betuigen aan iedereen die me geholpen heeft bij het tot stand brengen van mijn eindwerk. In het bijzonder dank ik alle docenten van de Hogeschool Limburg die hebben bijgedragen in mijn vorming tot gegradueerde in de toegepaste informatica. Hierbij denk ik vooral aan mijn promotor, mevr. Isabelle Godfrind bij wie ik steeds terecht kon. Eveneens wens ik mijn promotor bij IBM Belgium, de Heer Erik De Cock, te danken voor zijn geduld en vastberadenheid mij enige kennis bij te brengen en voor alle middelen die hij mij ter beschikking stelde. Tenslotte dank ik mijn ouders voor de financiële en morele steun tijdens mijn opleiding als gegradueerde in de toegepaste informatica en alle kansen die ze me tot hiertoe gegeven hebben. Dag Wieërs
8
Inleiding
1.2
Profiel IBM Belgium
IBM Belgium vormt een groep die onder andere bestaat uit een leasingmaatschappij1 en verschillende dochterondernemingen die hoogstaande diensten leveren: SkillTeam N.V. (consultancy en opleiding), APEM N.V. (onderhoud en services), en Computer Support N.V. (ontwikkeling van oplossingen). Zonder de IBM European International Services Company en het International Education Centre in Terhulpen te vergeten.
Figuur 1.1: IBM Stock Quotation Data
Of we het nu hebben over PC’s of mainframes, over AS/400’s of RS/6000’s of over lokale netwerken of telecommunicatie: het aanbod van IBM omvat alle aspecten die verband houden met de creatie, de verwerking, de opslag en de overdracht van informatie onder allerlei vormen. Het succes van de onderneming is grotendeels te danken aan het feit dat er steeds een hoge kwaliteit wordt nagestreefd. Dit is niet alleen mogelijk dankzij de eigen IBM-resources2 , maar ook dankzij de gespecialiseerde kennis die IBM haalt bij allianties en haar Business Partners. Zowel individuele gebruikers, KMO’s als grote ondernemingen die klant zijn van IBM, kunnen rekenen op de weergaloze ervaring van IBM inzake hardware, software, netwerken en IT-diensten. In 1996 verwezenlijkte IBM een omzet van 81,6 miljard dollar en er werd in datzelfde jaar een budget van maar liefst 5 miljard dollar uitgetrokken voor onderzoek naar en de ontwikkeling van nieuwe producten. 1 2
IBM Financial Services Company N.V. 291.000 personeelsleden over de hele wereld
1.2 Profiel IBM Belgium
9
Figuur 1.2: IBM Stock Quotation Daily
Gezien de grote diversiteit van de klantenbehoeften, en om beter tegemoet te komen aan de specifieke vereisten van talrijke sectoren, heeft IBM gespecialiseerde verkoop- en ondersteuningsteams opgeleid voor 6 marktsegmenten3. Deze nationale en internationale structuur speelt een sleutelrol bij de integratie van de oplossingen. Als gevolg van deze structuur kan elke klant optimaal gebruikmaken van de ervaring die binnen dezelfde sector werd opgedaan over de hele wereld. Het netwerkcomputergebruik of “network computing” opent vandaag perspectieven die enkele jaren geleden nog ondenkbaar waren. Ook hier bieden de ervaring en het technologische leiderschap van IBM ondernemingen de mogelijkheid de toekomst vol vertrouwen tegemoet te gaan. En dan hebben we het niet alleen over hardware en software. Door de integratie van netwerken, Intranet/Internet-technologieën, toegangstools en informatieverwerkende systemen, kunnen ondernemingen de uitdagingen waarmee ze geconfronteerd worden op een volledig andere manier aanpakken: globalisering van de economie, concurrentie, competitiviteit, R&D, beperking van de levenscyclus van de producten, klantenbinding, de ontdekking van nieuwe markten. Bovendien gaat dit alles gepaard met een nooit eerder geziene versnelling van de ontwikkelings-, productie- en commercialiseringsprocedures. IBM spitst haar dienstenactiviteiten4 vooral toe op consultancy, ontwerp, ontwikke3 4
Industry Segment Units 23,4 miljard dollar in 1998
10
Inleiding
Figuur 1.3: IBM Stock Quotation Monthly
ling van complexe projecten, opleiding, beschikbaarheidsdiensten en het beheer van projecten voor haar klanten. Om het aanbod overzichtelijker te maken en de doeltreffendheid van haar structuren te verbeteren, heeft IBM deze diensten gegroepeerd binnen IBM Global Services. Deze services zijn niet alleen bestemd voor grote organisaties. IBM heeft ook eenheden die speciaal bestemd zijn voor kleine en middelgrote ondernemingen. De tussenkomst van IBM beperkt zich dus niet tot de levering van producten. De belangrijkste taak van haar medewerkers en van haar partners is samen met hun klanten na te denken over de manier waarop technologie kan worden geïntegreerd in hun bedrijfsprocedures en een strategische troef kan worden.
1.3
Situering binnen het bedrijf
De afdeling waar ik mijn stage doe is IBM Global Services. En dan vooral het gedeelte waar men zorgt voor web-hosting5 en web-farming6 . Aangezien de hoge technische kennis die de meesten in die afdeling hebben, wordt die afdeling soms gebruikt (of misbruikt) om allerhande technische vragen te stellen of technische 5 6
het hosten van websites op eigen servers het hosten van webservers in eigen gebouwen
1.4 Over dit eindwerk
11
problemen op te lossen. Dit was bijzonder interessant om op korte termijn zoveel mogelijk zaken bij te leren. Met de recente beslissing van IBM om Linux te supporteren en voor te installeren op sommige RS/6000’s en andere modellen, kon ik op die manier mezelf nuttig maken door ook anderen te helpen met Linux en op die manier mijn steentje bij te dragen. Deze unieke kans heeft me ook in contact gebracht met specialisten op heel andere domeinen als AIX, Net.Commerce en DB/2 en heeft me meer kennis bijgebracht over het bedrijfsleven van een multinational als IBM.
1.4
Over dit eindwerk
Dit eindwerk werd volkomen gemaakt onder Linux7. Als tekst-editor werd gebruikt gemaakt van VIM8 en als text formatting and typesetting system deed ik beroep op LATEX.9 Voordelen van LATEX zijn de portabiliteit, de mogelijkheid tot compilen naar verschillende formaten, de kracht in het maken van formules en schema’s en vooral de eenvoud. Screenshots en afbeeldingen werden genomen en bewerkt met The Gimp10. Het voordeel is dat dit eindwerk beschikbaar is in meerdere formaten zoals PDF, HTML, TXT, PostScript, TEX, Rich Text Format en SGML. Onrechtstreeks heb ik dankzij dit eindwerk de kans gekregen mij toe te leggen op LATEX net zoals vele uitgevers LATEX gebruiken voor boeken en naslagwerken. Dit hele document neemt nauwelijks 200Kb in beslag (zonder afbeeldingen) en is op ieder platform te lezen. Vooraleer mijn stage-project te bespreken geef ik een voorbeeld van één van de andere projecten die ik mocht doen. Vervolgens bespreek ik mijn stage-opdracht en probeer ik te rapporteren hoe ik tot mijn uiteindelijke resultaat gekomen ben. In verhouding met de broncode zijn er minder (maar daarom niet weinig) bloed, zweet en tranen nodig geweest voor dit eindwerk. Dat is de aanleiding geweest 7
Linux is een Open Source besturingssysteem dat flexibel is en wellicht in de toekomst enorm belangrijk wordt. Zie ook bijlage B.18 op bladzijde 66. 8 VIM is een afkorting voor Vi Improved. Een belangrijke teksteditor op UNIXbesturingssystemen. Zie ook bijlage B.33 op bladzijde 75. 9 A LTEX is een Open Source implementatie van TeX, bekend in de wereld van drukkers en uitgevers als de standaard type-setting-tool. 10 The Gimp (of GNU Image Manipulation Project) is een krachtig Open Source tekenprogramma te vergelijken met Adobe Photoshop.
12
Inleiding
om ook de broncode op te nemen in dit eindwerk. Het eindwerk kan ook worden gevonden op http://dag.life.be/dag/eindwerk/.
Hoofdstuk 2 Project 1: Netwerkcontrole Tijdens de stage bij IBM Belgium werd er af en toe beroep op mij gedaan om bepaalde problemen als project op te lossen. Eén van de meer uitgebreide projecten leende zich om opgenomen te worden in dit eindwerk. Dat heb ik dan ook gedaan in dit hoofdstuk.
2.1 2.1.1
Probleemstelling Inleiding
Voor een bedrijf dat zo uitgebreid en complex is als IBM Belgium is het belangrijk om bepaalde processen te automatiseren. Maar dat is niet voor alles mogelijk. In zulke gevallen moet je een zo goed mogelijke oplossing creëren waarbij je ieders tijd zo efficiënt mogelijk kan benutten. Het volgende probleem is niet uitsluitend programmatorisch op te lossen, maar het komt erop neer dat van zodra er iets fout loopt de aandacht getrokken wordt van een bevoegd persoon en de informatie bij de juiste mensen terecht komt.
2.1.2
Huidige situatie
Eén van domeinen waar IBM Belgium actief is, is het hosten van servers1 , veelal voor grote multinationals die datalijnen hebben lopen naar de IBM-vestiging in Diegem. IBM Belgium staat dan in voor het onderhoud van de bekabeling en 1
Een server is een computer die andere computers “dient” en dus op iedere moment bereikbaar acht te zijn. Zie ook bijlage B.27 op bladzijde 71.
14
Project 1: Netwerkcontrole
voor een zo groot mogelijke bereikbaarheid van de servers of uptime2. In zo’n geval is het belangrijk dat de juiste personen gewaarschuwd worden als een van de servers onbereikbaar wordt of er problemen zijn met de aangeboden services van een server. Er is dus nood aan een systeem dat geregeld de belangrijke servers controleert op hun bereikbaarheid en services en een rapport maakt. Bij onregelmatigheden moet iemand gecontacteerd worden.
2.1.3 Analyse In de eerste plaats moet dus een lijst worden gemaakt van belangrijke servers en de services die ze elk aanbieden en die dus getest dienen te worden. Het is duidelijk dat er sprake is van 2 soorten tests. Eén test controleert de bereikbaarheid van de server zelf en een andere test is nodig om te toetsen of een bepaalde service draait. Deze laatste controle kan nog onderverdeeld worden in het testen van enkel de service of het nagaan of ook de inhoud correct is (met name de inhoud gegenereerd door een database). Het moet dus mogelijk zijn om eender welke service te controleren op eender welke server. Vervolgens is het belangrijk om te bepalen wie er gecontacteerd moet worden als er iets fout loopt en op welke wijze. De verschillende mogelijkheden zijn de volgende: E-mail Eén van de opties is een e-mail te versturen. Een groot nadeel is dat een e-mail niet altijd meteen wordt gelezen en dus een actie niet meteen uitgevoerd wordt. SMS Een volgende mogelijkheid is een SMS3 versturen. Na uitgebreid testen werd duidelijk dat de gratis SMS-providers op het Internet niet betrouwbaar zijn waardoor een SMS-implementatie geheel onbruikbaar wordt. Een mogelijkheid is om zelf een systeem te bouwen om SMS-berichten te versturen, maar dat zou het doel van het project voorbijgaan omdat er veel eenvoudigere oplossingen zijn. 2
Uptime staat zowel voor de tijd een server aanstaat (of “up” is) alsook voor een UNIXcommando dat deze tijd weergeeft 3 Dit zijn boodschappen die je met je GSM of via het Internet naar een andere GSM kan sturen.
2.2 Realisatie
15
Voice Call Een simpele oplossing is een oude modem in de computer steken die een bepaald nummer opbelt van zodra er problemen zijn. Op zich geen probleem om te implementeren, alleen heb je dan een telefoonnummer nodig dat 24 uur op 24 door iemand “bewaakt” dient te worden (hetzelfde geldt trouwens voor SMS), al kan je afhankelijk van een agenda een betrokken persoon contacteren. Doch dat zou een interface tussen het programma en Lotus Notes4 vereisen en dat is minder voor de hand liggend. Auto-reloading Webpage Deze oplossing ligt eigenlijk meteen voor de hand. In de vestiging in Diegem is er namelijk een afdeling die 24 uur op 24 beschikbaar is: de helpdesk. Het is ook die afdeling die in het verleden het eerst geconfronteerd werd met dergelijke problemen omdat klanten eerst de support bellen. De volgende beslissing werd genomen: op de helpdesk komt een computer te staan die op geregeld tijdstippen de tests uitvoert en een duidelijk beeld geeft van de huidige status van het netwerk en de servers. Moest dit niet voldoende zijn dan is het mogelijk van de aandacht te trekken door een geluid te produceren (wat minder gewenst is) of door middel van een lamp.
2.2 2.2.1
Realisatie Keuze van de programmeertaal
Vooraleer we kunnen beginnen met de implementatie moet er beslist worden in welke programmeertaal we dat doen. In dit geval zou quasi iedere taal in aanmerking komen, maar wij kozen voor de UNIX5 -shell, meer bepaalde ksh. ksh is de standaard-shell voor AIX6 en dus voor IBM een betere oplossing. Dat de keuze vooral naar UNIX-scripts neigde te gaan is te verklaren in de simpliciteit van het probleem. UNIX heeft alle benodigdheden om een netwerk te testen. Script-talen hebben ook het voordeel dat ze platform-onafhankelijk zijn, ze worden namelijk pas geïnterpreteerd op het moment dat ze worden uitgevoerd. Ook is er later geen probleem om de broncode terug te vinden als er servers of 4
Lotus Notes wordt binnen IBM intensief gebruikt door al zijn medewerkers, o.a. als agenda UNIX is een uitgebreid en handig besturingssysteem voor zowel servers als voor een desktopPC. Zie ook bijlage B.31 op bladzijde 74. 6 AIX is het UNIX-besturingssysteem van IBM. Zie ook bijlage B.1 op bladzijde 59. 5
16
Project 1: Netwerkcontrole
services toegevoegd moet worden omdat er geen sprake is van gecompileerde binaries.
2.2.2 Keuze van componenten Eerst moet onderzocht worden hoe we de bereikbaarheid van een systeem kunnen testen. Iemand met ervaring van TCP/IP7 -netwerken weet dat ping een manier is om te controlleren of een bepaalde NIC8 en dus de server op zich bereikbaar is. Om services te testen op een bepaalde TCP-poort van een server is ping niet bruikbaar, dus een ander programma was noodzakelijk. netcat9 is een programma dat verschillende mogelijkheden heeft. Je kan het simpelweg vergelijken met het UNIX-commando cat. Net zoals cat het mogelijk maakt om te lezen van en te schrijven naar filehandlers, is het mogelijk om netcat te gebruiken om te lezen van en te schrijven naar poorten op servers. In ons geval was een verbinding maken (en kijken of hij dit succesvol kan doen) genoeg om te bewijzen dat de poort in kwestie reageert en dus de service (soms ondankbaar ook server genoemd) nog draait. Voor de laatste test moet de inhoud geëvalueerd worden en daarvoor komt netcat ook in aanmerking.
2.2.3 Interface naar het Web Het is niet voldoende om de output naar het scherm te sturen, omdat we met het probleem zitten dat die servers achter een goed beveiligde firewall10 staan. Om die firewall te omzeilen zijn er drie voor de hand liggende oplossingen. Tunnel Een tunnel11 is het incapsuleren van een protocol in een ander protocol zodat de bovenliggende laag niets doorheeft van het andere protocol. Op die 7
TCP/IP is het protocol dat voornamelijk gebruikt werd op het Internet. Tegenwoordig zijn bijna alle netwerken o.a. gebaseerd op TCP/IP. Zie ook bijlage B.29 op bladzijde 72. 8 Een NIC slaat op een netwerk-interface, meestal een netwerkkaart. Zie ook bijlage B.20 op bladzijde 67. 9 nc is het netcat-commando. Zie bijlage B.19 op bladzijde 66. 10 Een firewall wordt meestal geplaats tussen 2 netwerken om een of beide netwerken te beschermen tegen onbevoegd gebruik. Zie ook bijlage B.11 op bladzijde 62. 11 Zie ook bijlage B.30 op bladzijde 73.
2.2 Realisatie
17
manier kan je ook IP12 in IP tunnelen, zodat je een virtueel subnet creërt over een bestaande IP-netwerk. Het nadeel van zo’n setup is dat je aan beide kanten van de firewall een computer moet hebben die de tunnel in stand houdt en zorgt voor de routing13 . In dit geval is het omslachtig te kiezen voor een tunnel omdat er een eenvoudige en meer voor de hand liggende oplossing is. Poort openen Een desbetreffende poort openen waarlangs het script kan worden aangeroepen is een simpele manier om een dergelijk probleem op te lossen. Dit is enkel mogelijk als de systeembeheerder toegang heeft tot de firewall zelf. Ook moet het script dan draaien op een computer achter de server die wel toegang heeft tot alle andere servers (achter de firewall). Dit is wellicht de meest veilige (dus qua beveiliging meest strikte) manier om een dergelijke verbinding toe te laten. Zó kan je bepalen dat enkel en alleen die bepaalde computer een verbinding kan maken met de server (waar het script draait) op een welbepaalde poort. Doch als je dit doet creëer je een nieuw probleem. Je gaat op die manier een speciale manuele interventie nodig hebben en op die manier decentraliseer je speciale gevallen wat in alle omstandigheden te mijden is. Firewall zelf De firewall zelf is de enige computer die op beide netwerken (of subnets) rechtstreeks toegang heeft. En door speciale zaken (zoals ons script) op de firewall zelf te runnen voorkom je dat later iemand de hele setup om zeep helpt door de firewall te herconfigureren (centralisatie van het beheer). In ons geval zal dus door middel van netcat op een poort gewacht worden op een verbinding en van zodra die er is wordt het resultaat teruggestuurd. Om ervoor te zorgen dat in een browser14 de pagina vanzelf wordt herladen door enkel een server (in dit geval de firewall zelf) op een bepaalde poort aan te roepen doen we beroep op de mogelijkheden van zowel netcat als HTML15 . Door middel van HTML-code wordt er dan voor gezorgd dat de browser na een bepaalde tijd opnieuw hetzelfde doet, zodat het script continu de servers blijft controleren en 12
IP staat voor Internet Protocol. Zie ook bijlage B.16 op bladzijde 64. De routing zorgt ervoor dat packetjes op de bestemming komen via een bepaalde route. Routing kan zowel softwarematig als hardwarematig gebeuren. 14 Een browser is het instrument waarmee u door webpagina’s wandelt of “browsed” door het volgen van hyperlinks. Zie ook bijlage B.5 op bladzijde 60. 15 HTML staat voor HyperText Markup Languag en is een open standaard waarin webpagina’s gemaakt worden. Zie ook bijlage B.13 op bladzijde 63. 13
18
Project 1: Netwerkcontrole
bij gebreken deze toont op het scherm in een browser.
2.3
Oplossing
2.3.1 Beschrijving Bij het bekijken van de broncode wordt de opbouw meteen duidelijk. In de eerste plaats wordt er getest hoe het script wordt aangeroepen. Als er een environmentvariabele bestaat met de naam $SERVER_SOFTWARE dan kunnen we ervan uitgaan dat het gestart werd door een webserver (zoals Apache16 ). In het geval dat het niet via een webserver gestart wordt, moeten we zelf enkele variabelen initialiseren en de $QUERY_STRING inlezen via standaard input. Dit laatste doen we met een read. We gebruiken de standaard input om na te gaan of er een fout opgetreden was de laatste keer dat het script werd uitgevoerd. Als dat zo is, worden er maatregelen genomen: zo zal de titel duidelijk aangeven dat er een fout is en de achtergrond geheel rood kleuren zodat dit opvalt. Vervolgens gaan we 3 lijsten maken (voor ieder type test één lijst) van servers en services. Via een ingenieus systeem maken we dat het in de vorm van een array opgenomen wordt waarbij quotes ervoor zorgen dat lijnen onderscheiden worden en spaties zorgen voor het indelen in kolommen. Het aantal kolommen wordt bepaald in de functie die de checks uitvoert per lijn. Nadien worden in de broncode de 3 functies getoond die ieder onderdeel afzonderlijk testen. tcp_check() Deze functie is bedoeld om een service op een bepaalde poort te testen. Daarvoor zijn 4 zaken nodig (voor zowel het testen als het resultaat afdrukken). We hebben het IP-adres nodig, de poort waarop de server draait, een pagina met meer uitleg en de volledige naam of eigenaar van de server. Deze laatste mag spaties bevatten want alles wat na de 3de kolom komt hoort automatisch bij kolom 4. Het testen wordt gedaan door middel van netcat door middel van Het volgende commando: 16
Apache is een veelgebruikte (of eerder dé meest gebruikte) webserver, ontwikkeld en beschikbaar zoals Open Source het voorschrijft. Zie ook bijlage B.2 op bladzijde 59.
2.3 Oplossing
19
Figuur 2.1: Alles is nog steeds in orde
nc -z -w 1
<poort>
icmp_check() Deze functie test of het netwerk wel degelijk werkt tot aan de server. Het stuurt een ICMP17 -pakketje richting server en wacht één seconde op antwoord. Als het script niet binnen die seconde een antwoord krijgt moet er iets fout zijn. Het testen wordt gedaan met het ping-programma dat op iedere computer die aan een netwerk verbonden is, staat. Het volgende commando doet wat we wensen: ping -c 1 -i 1
17
ICMP is het protocol dat gebruikt wordt om routing-problemen of fouten op een netwerk te bespeuren. Zie ook bijlage B.15 op 64.
20
Project 1: Netwerkcontrole
Figuur 2.2: Hier loopt het plots duidelijk mis
Om te testen is dus enkel het IP-adres nodig, om het resultaat weer te geven gebruiken we zowel een pagina met meer uitleg als de naam of eigenaar van de server. Voor een beschrijving van het ping-commando kan u terecht in bijlage B.25 op bladzijde 69. url_check() Deze laatste functie checkt of de inhoud van de pagina in orde is. Deze pagina is dynamisch opgebouwd met informatie uit een database. Op die manier wordt dus eigenlijk de database onrechtstreeks getest. De uiteindelijke url wordt opgebouwd uit het IP-adres en de locatie van de pagina. Deze functies drukken ook meteen het resultaat af in HTML. Vervolgens bouwen we de webpagina op door middel van CSS18 , die ervoor zorgt dat het veranderen van de layout simpel en efficiënt gebeurt, en drukken we het resultaat af van de 3 testen die elk zijn lijst verwerkt. 18
CSS is een manier om eenduidig een website vorm te geven. Zie ook B.8 op bladzijde 61.
2.3 Oplossing
21
Figuur 2.3: En hier blijft het langdurig fout gaan
We merken nog op dat als er eender waar een fout gebeurt, we dat bijhouden in een globale variabele. Als deze variabele een waarde van 1 heeft als het script eindigt, dan gaat de tussentijd van het herladen maar 15 seconden bedragen. Op die manier zorgen we ervoor dat van zodra er een fout is hij sneller opnieuw nakijkt of het al opgelost is. Als er geen fout is wacht hij 40 seconden alvorens opnieuw te testen. Indien er een fout is geven we een string “error” mee (zie figuur 2.3 op bladzijde 21) aan de URL19 van de pagina, zodat die de volgende keer de achtergrond en de titel wijzigt zoals reeds besproken. In figuur 2.1 op bladzijde 19 zie je het resultaat als er geen fouten zijn. De pagina is vrij neutraal en als men de links volgt, krijgt men meer uitleg over een welbepaalde server, zoals verantwoordelijken, e-mail adressen en telefoonnummers. Figuur 2.2 op bladzijde 20 toont het scherm als de eerste fouten worden opgemerkt. Lang zal dit scherm niet zichtbaar blijven want na 15 seconden wordt er 19
URL staat foor Uniform Resource Locator. Meer informatie is te vinden in bijlage B.32 op bladzijde 74.
22
Project 1: Netwerkcontrole
over gegaan naar figuur 2.3 op bladzijde 21 waar duidelijk de rode achtergrond aantoont dat er een probleem is. Ook deze pagina blijft rood totdat alle problemen opgelost zijn, dus een tijdelijk storing zal meteen ook weer verdwijnen.
2.3 Oplossing
2.3.2
23
Broncode
#!/bin/ksh # # http://bedb155.benelux.ibm.com/admin-bin/check-eurospot.c gi # Dag Wieers ([email protected]) # Erik De Cock ([email protected]) # # #!/bin/sh # echo $QUERY_STRING | nc -w 20 141.94.135.4 1002 # fout=0 echo "Content-type: text/html\nPragma: no-cache\n" if [ -z "$SERVER_SOFTWARE" ]; then SERVER_NAME="bedb155.benelux.ibm.com" SCRIPT_NAME="/admin-bin/check-eurospot.cgi" read QUERY_STRING fi if [ "X$QUERY_STRING" != Xerror ]; then Title="Eurospot Checks" Color="ffffc0" else Title="**ERROR** Eurospot Checks" Color="ff0000" fi set -A tcp_list \ "195.212.50.210 80 "195.212.50.213 80 "195.212.50.218 80 "195.212.50.215 21 "195.212.50.216 21 "194.196.131.12 21 "194.196.131.11 80 "194.196.131.10 80 set -A icmp_list "195.79.148.2 "10.1.6.5 "195.79.148.1 "195.183.223.2 "195.183.223.1 "195.212.50.209 "195.75.181.1 "194.196.78.254 "152.158.40.1 "195.212.50.211 "141.94.135.4 "141.94.135.1 "141.94.135.5 "194.196.131.1
WebShell.html WebShell.html WebShell.html WebShell.html WebShell.html WebShell.html WebShell.html WebShell.html
Web Server BT" \ Web Server BCB" \ Web Server Degroof" \ FTP Server BCB/BT " \ FTP Server Degroof" \ FTP Server WORMS " \ WORMS (gestionprivee)" \ WORMS (banque-worms)" \
\ BCB_Automate.html BCB Automate" \ BT_Automate.html BT Automate" \ BCB_Router.html BCB Router " \ Degroof_Automate.html Degroof Automate" \ Degroof_Router.html Degroof Router " \ Firewall.html DMZ I Interface: Banks" \ Firewall.html DMZ II Interface: Oneweb" \ OpenNet_Router.html Local OpenNet Router" \ OpenNet_Router.html Backbone Opennet Router" \ Firewall_SOSD.html Firewall SO-SD (Minh)" \ Firewall.html Local Secure Interface" \ Firewall.html Local MPN Router" \ Frame_Router.html Local MDNS Router" \ Frame_Router.html DMZ Router" \
set -A url_list \ "195.212.50.218 /cgi-bin/isadll.dll/FR/ADMIN?BT_TEST=X \ Nombre WebShell.html WebShell Degroof" \ # --------------------------------------------------------# Functies tcp_check() { IP=$1; Port=$2; URL=$3 Server=$4; echo "$Server | " echo "$IP | $Port | " nc -z -w 1 $IP $Port > /dev/null if [ $? -eq 0 ]; then echo "" echo "OK | " else echo "" echo "Failed ! | " fout=1 fi echo "
" } icmp_check() { IP=$1; URL=$2; Server=$3 echo "$Server | $IP | " ping -c 1 -i 1 $IP > /dev/null
24
Project 1: Netwerkcontrole
if [ $? -eq 0 ]; then echo "" echo "OK | " else echo "" echo "Failed ! | " fout=1 fi echo "
" } url_check() { IP=$1; URL=$2; Substr=$3; HelpURL=$4; Name=$5 echo "$Name | " echo "$IP | " cat << EOF | nc -w 5 $IP 80 | grep -c $3 > /dev/null GET $URL q User-Agent: Eurospot Check Script EOF if [ $? -eq 0 ]; then echo "" echo "OK | " else echo "" echo "Failed ! | " fout=1 fi echo "
" } # --------------------------------------------------------echo "\n \n $Title" cat << EOF <style type="text/css"> EOF echo "" cat << EOF Eurospot Checks
Click on the link in the Component column to find out the procedure in case of problems.
Services checks: These checks verify whether a server is active on a certain port. Component | IP address | Port | Result | EOF for i in "${tcp_list[@]}"; do set $i IP=$1; Port=$2; URL=$3 shift 3 Server=$*
2.3 Oplossing
tcp_check $IP $Port $URL "$Server" done cat << EOF Application checks: These checks actually test the webshell and the database. Component | IP address | Result | EOF for i in "${url_list[@]}"; do set $i IP=$1; URL=$2; Substr=$3; HelpURL=$4 shift 4 Name=$* url_check $IP $URL $Substr $HelpURL "$Name" done cat << EOF You can do the tests yourself by clicking on the IP address. | Networking checks: These checks ping various hosts on the network. Component | IP address | Result | EOF for i in "${icmp_list[@]}"; do set $i IP=$1; URL=$2 shift 2 Server=$* icmp_check $IP $URL "$Server" done cat << EOF |
EOF echo " <meta http-equiv=\"refresh\"" if [ $fout -eq 0 ]; then echo " content=\"40; URL=http://$SERVER_NAME$SCRIPT_NAME\">" else echo " content=\"15; URL=http://$SERVER_NAME$SCRIPT_NAME?error\">" fi echo " \n" exit 0
25
26
Project 1: Netwerkcontrole
Hoofdstuk 3 Project 2: Dynamische websites 3.1 3.1.1
Definitiestudie Opdrachtomschrijving
Dit project is ontstaan omdat er nood is aan een eenvoudig systeem waarbij meerdere databases (eventueel van verschillende leveranciers) konden gekoppeld worden op een eenduidige manier. Aangezien het niet eenvoudig is om zomaar databases te exporteren of converteren van de ene leverancier naar een andere leverancier (hier voornamelijk naar DB21 ) is het interessant om te zien hoe iets dergelijks tot stand komt. De onafhankelijkheid van databases wordt ook doorgetrokken naar een vrije keuze qua besturingssysteem. Zowel voor server als client, zodat eender wie, eender waar toegang heeft tot het systeem en zijn inhoud. Verder is het enorm belangrijk dat eventuele uitbreidingen simpel kunnen worden toegevoegd. Dus het was onze intentie een modulair systeem te ontwikkelen met een zo soepel mogelijke manier om zaken te implementeren op de plaats waar het nodig is. Dit wordt later uitvoerig besproken. Zowel het feit dat eender welke database kan worden gebruikt, als de openheid in keuze van het platform plus dat het systeem simpel kan uitgebreid worden zijn de belangrijkste faktoren in dit project.
3.1.2
Vooropgestelde eisen
Vooraleer we definitieve keuzes maken, ligt het voor de hand dat we eerst soortgelijke projecten nader onderzoeken en nagaan wat de mogelijkheden zijn om 1
DB2 is de database met het grootste marktaandeel, ontwikkeld door IBM. Meer informatie vind u in bijlage B.9 op bladzijde 62.
28
Project 2: Dynamische websites
binnen de vastgelegde tijd het project tot een succesvol einde te brengen. Bij het omschrijven van de opdracht zijn al bepaalde keuzes duidelijk. Ten eerste ligt het voor de hand dat we enkel zullen gebruik maken van open standaarden zoals CGI2 en HTTP3 én dat we vooral gebruik gaan maken van Open Source4 software.
Open standaarden Open standaarden zijn enorm belangrijk. Indien standaarden niet open zijn (dus propriëtair) betekent dit dat zij ofwel enkel gekend zijn door de organisatie die het ontworpen heeft of dat voor de implementatie of het gebruik van de naam van een standaard betaald moet worden.
Open Source software Open Source software is software waarvan de broncode vrij ter beschikking is en waar anderen functies aan kunnen toevoegen. Eventueel kan men gebaseerd op die broncode een eigen programma maken. Ze zijn echter wel verplicht om hun wijzigingen aan de oorspronkelijke auteur(s) kenbaar te maken én dienen opnieuw hun code vrij te geven (dus onder een Open Source licentie zoals GPL5 ). Deze manier van werken druist in tegen alle vaste normen. Door hun broncode vrij te geven weten programmeurs dat deze door meerdere programmeurs nagekeken wordt (grotere peer-review6 ) en dat hun code op die manier zowel stabieler, meer portable als functioneler wordt. In de praktijk merken we dat programmeurs met eenzelfde interesse op die manier samenwerken aan eenzelfde project en is de kwaliteit van een Open Source programma stukken beter. Als voorbeelden zijn er: Apache, Sendmail, Samba, Linux en nog veel andere grote software-projecten die continu beter en functioneler worden. Onze ervaring met Open Source alternatieven leerde ons dat we hierbij altijd kunnen terugvallen op het Internet of de broncode. Vooral dat laatste is vaak nuttig gebleken bij het determineren van problemen en het tot stand komen van het project, iets wat met commerciële software niet het geval is. 2
CGI staat voor Common Gateway Interface en is een open interface om programma’s aan het web te linken. Zie ook bijlage B.6 op bladzijde 61. 3 HyperText Transfer Protocol. Het protocol wat webservers en browsers met elkaar praten. Zie ook bijlage B.14 op bladzijde 64. 4 Een uitgebreide definitie van open Source staat in bijlage B.22 op bladzijde 68. 5 General Public License van GNU is de meest gebruikte Open Source licentie. Zie ook bijlage B.22 op bladzijde 68. 6 peer-review is het aantal programmeurs dat code nakijkt.
3.1 Definitiestudie
3.1.3
29
Studie van bestaande systemen
Tijdens het afschuimen van het net naar andere projecten zijn er 2 grote alternatieven die de kop opsteken. PHP-project Het PHP7 -project was eigenlijk onze eerste keuze. Maar aangezien PHP geen ondersteuning heeft voor DB2 en dat een vereiste is, is het onmogelijk om voor PHP te kiezen. Het zou mogelijk zijn om zelf de DB2 interface te implementeren als project, maar na een gesprek met de developers van het PHP-project hebben we hiervan afgezien. De reden is dat zij DB2-support wensen via de ODBC8 -interface, maar omdat er geen degelijk Open Source ODBC-alternatief is voor UNIX-systemen, konden we dit niet schrijven tenzij we zelf een ODBC-implemenatie maken voor ODBC. Wat te hoog gegrepen is voor een project met de huidige beschikbare tijd. Exit PHP. Net.Data Net.Data is een volwaardig alternatief, net als PHP een embedded scripttaal9 , ontwikkeld door IBM zelf. Ons probleem met Net.Data was vooral dat het niet platformonafhankelijk was. Ook al is IBM bezig met het porten (en de eerste beta-versies zijn beschikbaar voor Linux), vele platformen zouden worden uitgesloten door de keuze te laten vallen op propriëtaire software. Bovendien werkt Net.Data enkel met DB2. Slash Het Slash-project was een ander alternatief. Slash heeft zijn oorsprong in het Slashdot-project. Dit is een bekende nieuws-site op het internet die hun implementatie van de website als Open Source beschikbaar stelden. Het grote nadeel van Slash was dat het enkel nuttig bleek te zijn voor een bepaald type website, maar niet voor de mogelijkheden die we voor ogen hadden. Dus ook dit werd afgeblazen. Uit het Slash-project halen we doch nuttige informatie. Zo maken zij gebruik van CGI via Perl10 wat voor ons om verschillende redenen aantrekkelijk is. 7
PHP is een embedded scripttaal met veel mogelijkheden. Zie bijlage B.24 op bladzijde 69. Open Database Connectivity. Zie bijlage B.21 op bladzijde 67. 9 Een embedded scriptaal is een scripttaal die je in een andere taal (zoals HTML) kan nestelen. 10 Practical Extraction and Report Language. Zie ook bijlage B.23 op bladzijde 68. 8
30
Project 2: Dynamische websites
3.1.4 Keuze van Perl Rekening houdend met het voorgaande ligt de keuze voor Perl voor de hand. Perl is een Open Source programmeertaal met een interpreter op bijna iedere besturingssysteem, dus code geschreven in Perl kan op veel verschillende platformen draaien. Daarenboven is Perl krachtig (zelfs in vergelijking met gecompileerde C-programma’s) en heeft alle voordelen van script-talen.
3.1.5 Keuze van Apache Als webserver is Apache een belangrijke keuze aangezien Apache heel nauw samenwerkt met Perl. Door middel van een module (mod_perl) wordt er voorkomen dat voor iedere bezoeker het Perl-script geheel in het geheugen wordt geladen en er een fork() moet gebeuren. (fork()’s zijn namelijk nogal resource-onvriendelijk). Dankzij mod_perl is het dus mogelijk de snelheid van statische websites te evenaren.
3.1.6 Keuze van DBI De keuze voor DBI11 is een gevolg van onze keuze voor Perl en heeft een positieve invloed gehad op die keuze. DBI is een standaard Database Interface die toelaat op gelijke wijze verschillende databases van verschillende leveranciers aan te spreken. Het is die API12 die wij zullen aanpassen om een nog algemenere API te ontwikkelen die zowel flatfile-databases13 als databases met een server-backend kan aanspreken. Dat we nog gebruik maken van flatfile-databases heeft een historische oorsprong. Tijdens de eerste testen van de gehele engine was het belangrijk dat we al data ter beschikking hadden (zonder dat we de gehele DBI-implementatie moesten doen) dus de logische oplossing was een eigen tekst-formaat database te ontwikkelen, deze database konden we dan zelfs simpelweg opvullen en uitlezen via onze API. Vervolgens voegden we flatfile XBase-databases toe (omdat het bestandsformaat toevallig voor handen was). En achteraf werd pas de link gelegd naar de DBIinterface. Spijtig genoeg was onze huidige API niet echt voorbereid op de mogelijkheden van DBI, en hebben we nadien dat geleidelijk aangepast. 11
DBI is een algemene Database Interface voor Perl Application Program Interface. Zie ook bijlage B.3 op bladzijde 60 13 Dit zijn databases die rechtstreeks als file aangesproken worden. Itt. servers zijn ze veel trager. 12
3.2 Basisontwerp
3.2
31
Basisontwerp
3.2.1
Globale oplossing
Concept Als we aan een dynamische website denken zijn er 2 mogelijkheden om iets dergelijks te implementeren. Ofwel komt de dynamische code binnen in de HTMLcode, ofwel de HTML-code binnen in de dynamische code. We kunnen deze redenering doortrekken naar de server. Ofwel gaat de server de HTML-files moeten parsen en de code die ertussen staat uitvoeren (dat is wat er met PHP en SSI14 gedaan wordt). Ofwel ga je via CGI programma’s schrijven die de HTML-code genereren, en die teruggegeven worden aan de server. Het resultaat is hetzelfde en de keuze tussen beide ligt eerder bij de ontwerper. Een designer die flexibel wil zijn gaat eerder kiezen voor een embedded scripttaal (zoals PHP of ASP15 ). Een programmeur gaat eerder kiezen voor de 2 optie omdat een embedded scripttaal meestal minder mogelijkheden heeft. We hebben het systeem opgebouwd als volgt: de bezoeker komt binnen op de site. Het eerste wat er gebeurt is dat de index.cgi gaat bepalen wat er moet gebeuren als de bezoeker voor het eerst binnenkomt. De index.cgi behoort tot het manueel in te stellen deel van de dynamische site. Hier bepaalt de ontwerper van de site wat er moet gebeuren, wat de bezoeker kan en niet kan en hoe simpel of complex de pagina wordt. Er zijn 2 mogelijkheden: ofwel wordt de bezoeker doorverwezen naar een pagina ofwel naar een volgende script. Deze “default”-instelling is belangrijk, best staat hier wat de bezoeker zoal kan doen en verwachten. Meestal mooi samengevat in een welkomswoord. Dan gaat de gebruiker “iets” doen, het is moeilijk om te voorspellen wat exact, want dat hangt af van de opbouw van de site. Maar laten we er van uit gaan dat hij op een link klikt die hem doorverwijst naar producten die je op deze site kan bestellen. De ontwerper van de site heeft dan een link gelegd waarin het commando zit dat doorverwijst naar een eenvoudige zoek-form. We weten nog niet wat de bezoeker wil, dus moeten we het hem vragen. Het is belangrijk dat de ontwerper de site intuïtief maakt zodat de bezoeker niet afgeschrikt wordt door de complexiteit van de forms. Meestal kan hij voorbeelden geven of een link plaatsen naar wat meer uitleg. De bezoeker geeft vervolgens wat zoekwoorden in, of bepaalt een categorie om zijn zoekopdracht strikter te definiëren en drukt op een knop. In enkele secon14
Server Side Includes. Zie ook bijlage B.28 op bladzijde 72. Active Server Pages zijn een heruitvinding van Microsoft om ook dynamische websites te proberen maken. Zie bijlage B.4 op bladzijde 60. 15
32
Project 2: Dynamische websites
den verschijnen de producten die hem interesseren. Door simpel op “Bestel” te klikken of op “Info” kan hij een product dan in zijn boodschappentas steken of meer informatie opvragen. Hij zou een product kunnen bezichtigen, of opnieuw zoeken, eventueel een e-mail sturen naar de eigenaar van de website of verder doorheen de site surfen. Zoals statische websites kan je hier via de scripts een gehele site opzetten, waardoor gezocht kan worden, waar in de pagina’s gebruik kan worden gemaakt door een embedded scripttaal (Perl in dit geval). Zo zou je simpelweg statistieken kunnen geven van meest opgevraagde producten of willekeurige tips van de week. We gaan aan de hand van de directorystruktuur en filebeschrijving dieper in op de verschillende mogelijkheden van het systeem. Vervolgens gaan we door een paar simpele afbeeldingen een beter beeld geven van zijn mogelijkheden.
3.2.2 Directorystruktuur en Filebeschrijving Om een beter overzicht te krijgen van de delen van dit systeem voor dynamische websites hebben we de broncode, configuratiefiles en de data in aparte directories gestoken. Commando-scripts Alle commando’s die uit te voeren zijn op de site en betrekking hebben tot het functioneren van de site en het manipuleren van de databases zitten in de directory /cmds/. add.pl Het add-script is bedoeld om rechtstreeks (via de algemene database-API) records toe te voegen in een database. Rekening houdend met de permissies van de gebruiker en de configuratie van het systeem. browse.pl Hiermee is het mogelijk om door de database te bladeren, je krijgt een reeks records te zien. Deze functie komt overeen met het resultaat van een zoekactie. debug.pl Dit script is bedoeld om het systeem te debuggen. Het drukt een reeks belangrijke instellingen af (zowel van het besturingssysteem, de installatie van Perl als de webserver).
3.2 Basisontwerp
33
delete.pl Hiermee kan de gebruiker (mits toestemming) records wissen. Met undelete is er een mogelijkheid om de records terug te halen (flatfile-databases alleen). edit.pl Als er records moeten worden aangepast dan wordt dat met dit script gedaan. Natuurlijk enkel als men bevoegd is en de configuratie het toelaat. fsearch.pl Met dit script kan je zoeken op basis van een veld. Afhankelijk van hoe de forms ontworpen werden kan je je zoekopdracht vernauwen of bepaalde filters erop toe passen. inspect.pl Dit is bedoeld om de database zelf te debuggen, hiermee krijg je de tabel te zien van de eerste aantal records (te specifiëren in de conf.lat). menu.pl Het menu kan gebruikt worden om te controleren of een bepaalde gebruiker zaken mag of niet mag. Ook kan de taal hier ingesteld worden en de database gekozen waarop een handeling uitgevoerd moet worden. order.pl Dit script bevat alle mogelijke handelingen die je kan toepassen als je bestellingen wil plaatsen, bekijken of aanpassen. surf.pl Via het surf -commando kan je pagina’s met elkaar linken of doorverwijzen naar andere cgi-scripts die in de /pages/ -directory staan. tsearch.pl In tegenstelling tot fsearch kan je hiermee zoeken op alle velden. undelete.pl Dit commando werkt enkel op flatfile-databases. Het maakt eventuele verwijderingen ongedaan als dit mogelijk is. view.pl Hiermee kan je een record nader bekijken, deze wordt voornamelijk vanuit de browse aangeroepen (en dus ook vanuit het resultaat van een zoek-actie).
34
Project 2: Dynamische websites
Configuratiefiles De configuratiefiles zitten in de /conf/ -directory. Je hebt hier 2 soorten configuratiefiles. De taalfiles *.tks en de conf.lat. De conf.lat bevat een voor een de tabels van de databases die gebruikt worden, tesamen met het type. Ook worden hier bepaalde globale variabelen ingesteld die gelden voor het gehele systeem. Het belangrijkste dat er ook in staat is de gehele layout van de site. Deze kan per database nog eens aangepast worden, zodat je vrijheid behouden blijft, maar als het niet overschreven wordt is dat de “default” instelling. De *.tks-files bevatten taal-specifieke zaken. Omdat we op het begin rekening hielden met het feit dat dynamische websites simpelweg meertalig kunnen zijn, moet dus de HTML-code ontdaan worden van taal-afhankelijke zaken. Teksten en woorden vinden dus hun plaats in deze files, iedere tekst of woord krijgt een “variabele-naam” die dan aangeroepen wordt vanuit de HTML-code. Net zoals in de conf.lat de HTML-code ook weer een “variabele-naam” krijgt om aangeroepen te worden vanuit de scripts. Datafiles Deze files zitten samen in de /data/ -directory. Hier vind je 2 soorten files: datafiles voor flatfile-databases en meta-data voor alle databases. Deze meta-data is informatie over de database per database bijgehouden. Aangezien we hier spreken over een 8-tal verschillende databases is het belangrijk dat we gegevens die onderling verschillen bijhouden in deze files. Modules/Libraries De modules (of libraries) zitten in de /modules/ -directory. Hier treffen we de volgende files aan: cookie.pm Deze module bevat alle mogelijk functies om users te controleren, paswoorden te vergelijken met de database, cookies te plaatsen en nog speciale functies die nodig zijn voordat je als bevoegd persoon ingelogd bent. Als je geen user-authentication nodig hebt mag deze module weggelaten worden uit de index.cgi! daglib.pm Deze module bevat alle functies die niet thuis hoorden in de andere modules, het gaat hier voornamelijk om functies die overal nodig zijn om simpele
3.2 Basisontwerp
35
dingen te doen (zoals foutmelding genereren, tekst te parsen, embedded code uit te voeren, enzovoort) db.pm De module is de standaard API naar alle databases toe, hij roept afhankelijk van wat er nodig is de desbetreffende “sub-module” aan die afhankelijk van de database de rest afhandelt. db_dbi.pm Dit is de “sub-module” die db.pm aanroept om DBI-specifieke zaken te doen. db_txt.pm Dit is de “sub-module” die gebruikt wordt voor tekst-gebaseerde flatfile databases. Dit gebruiken we om het systeem voornamelijk te testen. db_xbase.pm Dit is de “sub-module” om XBase-databases te gebruiken als flatfile database. Let op: je kan XBase-databases ook aanroepen via DBI! Daarom is de module geschikt om DBI te vergelijken met flatfile access. order.pm Deze module bevat alle functies die betrekking hebben tot het online bestellen van zaken en het afhandelen van de digitale boodschappentas. Deze module zal voor klanten specifiek geschreven moeten worden aangezien de noden verschillend zijn, afhankelijk van hun boekhouding! Pagina’s De pagina’s die de dynamische website opvullen, staan allemaal samen in de /pages/ -directory. Het surf -commando kan enkel aan de directory zodat de files in hoger gelegen directories veilig zijn voor het surf -commando. In deze directory staan ook kleine CGI-scripts die de ontwerper van de website wil opnemen in zijn site. *.html-files worden geparsed voor embedded Perl-scripts, het is mogelijk dit uit te breiden naar andere script-talen (zoals Python, TCL, bash, enzovoort). Het is heel belangrijk dat alle zaken zoveel mogelijk gesplitst worden. Taalafhankelijk zaken samen, HTML-code zoveel mogelijk samen, database en metadata apart en natuurlijk het eigenlijke statische deel apart.
36
3.3
Project 2: Dynamische websites
Schermontwerp
De voorbeelden die in dit gedeelte getoond worden zijn vrij sober en dienen enkel om de technische mogelijkheden van het systeem te tonen. Om een geheel beeld te krijgen van de technische en functionele voordelen samen met een mooie grafische interface moet ik u doorverwijzen naar de verdediging voor de jury.
3.3.1 Menu/Hoofdmenu Concept Een normale site zal zich nooit situeren rond het hoofdmenu dat je kan zien op figuur 3.1 op bladzijde 36. Het hoofdmenu heeft 3 functies: Een overzicht van alle mogelijke links Het is duidelijk dat een dynamische website die geheel gecontroleerd wordt door variabelen al snel complex kan worden. Vooral omdat zowel taal, database als bijkomende commando’s en opties meegegeven worden via de URL. Het menu dient als een verzamelplaats en vertrekpunt om die links samen te snellen zodat ze opgenomen kunnen worden in de gehele (dus ook statische) site !
Figuur 3.1: Een overzicht van de mogelijkheden van de “eigenaar”
3.3 Schermontwerp
37
Een controle van de permissies van een gebruiker Bij het werken met verschillende gebruikerniveau’s (zoals een shoppingmall heeft) waar je klanten en leveranciers toegang wil geven, en bijvoorbeeld de leveranciers eigen records mogen wijzigen of toevoegen en gebruikers enkel mogen bekijken en bestellen, is het belangrijk dat er een controle kan gebeuren. Het menu zal voor iedere user (die toegang krijgt tot het menu) exact tonen welke functies wel en welke functies niet kunnen. (Functies die af staan worden gewoon niet getoond) Een debug-tool van waaruit alle belangrijke delen van de site bereikt kunnen worden Het is belangrijk dat eenmaal de site volledig ontwikkeld is, de webmaster de site doorloopt, teneinde fouten nog snel te ontdekken. Omdat niet alle links zomaar in de statische delen verwerkt zitten (maar toch bereikt kunnen worden door te surfen) is het best dat er één ultieme plaats is waar je zonder al te veel moeite de hele site grondig kan testen.
Figuur 3.2: Hetzelfde overzicht in het Engels op de user-database
In figuur 3.2 op bladzijde 37 zie je hoe de Engelse taal gekozen werd en de gebruiker/webmaster de user-database geselekteerd heeft. Bovenaan zie je staan ownership need!!. Dit betekent dat voor deze database algemeen geldt dat je pas records kan aanpassen als het record van jou (gebruiker) is. Indien dit niet het
38
Project 2: Dynamische websites
geval is gelden de permissies zoals ze per database in de configuratiefiles vastgelegd werden. Op die manier kan je flexibel te werk gaan zonder complexe permissies te leggen om hetzelfde resultaat te behalen. Ook zie je duidelijk dat in dit geval de webmaster met hoogste permissie bezig is (een userlevel van 99 is het maximum). In de configuratiefiles kan je instellen vanaf welk level iemand alle permissies heeft ! De regel no identification needed slaat op het feit dat er voor deze database geen user authentication moet gedaan worden. In dit geval is dit van minder belang omdat je owner moet zijn om aan een record te kunnen. Databases Je ziet ook in de rechterzijde dat de verschillende databases (tables is een betere omschrijving) opgesomd worden. Door een simpele klik krijg je meer info over die table. Onderaan staat welke basename gebruikt wordt voor de database. Je kan de configuratie-file bekomen door er .ini achter te plaatsen, die file bevat dan meta-informatie over de table in kwestie. Als het om flatfile-databases gaat kan je de extentie voor dat type database (bijvoorbeeld .dbf ) erachter plaatsen om op de database uit te komen. Bij database die geraadpleegd worden via DBI (zoals postgresql, oracle of DB2) is dat niet het geval. Talen Ook rechts staan de verschillende talen (waarvoor .tks-files bestaan) opgesomd. In ons voorbeeld staat 1.tks voor de Nederlandse taal en 3.tks voor de Engelse taal. 2.tks werd gereserveerd voor het Frans.
3.3.2 Item Hier volgen commando’s die je toepast op records, om ze te wijzigen, te verwijderen, te bekijken, te doorlopen of toe te voegen. Een verwijdering ongedaan maken is niet toegevoegd omdat dit enkel werkt bij de oudere flatfile-databases die niet bedoeld zijn in productie-fase. Add/Toevoegen Het toevoegen van records gebeurt heel simpel. In de configuratie-file van de database bepaal je welke userlevels een gebruiker moet hebben om te mogen toevoegen en staat de layout (eventueel in HTML-tables) van het record. Belangrijk om te melden is dat enkel velden die kunnen gewijzigd worden er maar mogen tussenstaan. De andere hebben geen nut. Omgekeerd geldt ook dat velden die er
3.3 Schermontwerp
39
Figuur 3.3: Een voorbeeld van hoe je records kan toevoegen
niet tussen staan en toch gewijzigd kunnen worden wel degelijk manueel veranderd kunnen worden. Het een sluit het ander dus niet uit. Als je kijkt naar figuur 3.3 op bladzijde 39 dan zie je een simpel invulformulier. Met een pulldown-menu voor een vaste lijst met waarden. Meer ingewikkelde opstellingen zijn denkbaar. Browse/Blader Het blader of browse-commando is een van de belangrijkere commando’s aangezien ze ook bij het search-commando terugkomen. Het toont de lijst van records die de gebruiker wenste. In dit geval (figuur 3.4 op bladzijde 40) gesorteerd op recordnummer. Figuur 3.5 op bladzijde 41 toont dan wat je te zien krijgt als je meer info wenst over een bepaald item/product. Via dat menu kan je dan weer aan een heel deel commando’s, maar dat bespreken we later. Delete/Verwijder Bij het verwijderen van records vanuit het menu, moet je het recordnummer meegeven (figuur 3.6 op bladzijde 42). Je kan ook records verwijderen door eerst naar het desbetreffende record te gaan en daar dan verwijderen te kiezen. Maar net zoals bij het toevoegen kan dat enkel als je de permissie hebt. (Indien niet zal dit niet
40
Project 2: Dynamische websites
Figuur 3.4: Bladeren door een database
verschijnen bij het record noch in het menu) Edit/Bewerk Records kan je updaten door het bewerk-commando te selekteren. Eerst moet je dan wel laten weten welk record (dus welk recordnummer) je wil aanpassen. (Zie figuur 3.7 op bladzijde 43 en figuur 3.8 op bladzijde 44) Ook hier kan je eerst naar dat record gaan en daar het bewerk-commando nemen. Weer geldt dat je ofwel de permissies moet hebben ofwel owner moet zijn. View/Bekijk Een record bekijken doe je met het view-comando. En als je enkele permissies hebt (of alle permissies zoals in figuur 3.10 op bladzijde 46) dan kan je rechtstreeks vanuit dat scherm enkele handelingen uitvoeren op dat record. Je kan ook als webmaster scrollen door alle records, handig als je bijvoorbeeld een reeks records moet aanpassen of controleren.
3.3.3 Search/Zoek Zoeken kan je op 2 verschillende manieren, ofwel zoek je op verschillende velden ofwel zoek je op alle velden van een record. Je kan gebruik maken van een combi-
3.3 Schermontwerp
41
Figuur 3.5: En nadien het gekozen record bekijken
natie van zoeken op alle velden of enkel één van de velden. Je kan ook specifiëren of je zoekwoorden geheel moeten overeenkomen of dat enkel een deel erin moet zitten. Ook kan je bepalen of het moet beginnen of eindigen met een lettercombinatie. Field/Op veld Figuur 3.11 en 3.12 op resp. bladzijde 47 en 48 tonen de zoekopdracht en het resultaat. Het zoeken op de inhoud van een veld kan naar believen aangepast worden in de database-configuratiefiles op een per-veld basis. Total/Totaal Zoals reeds gezegd kan je ook zoeken op alle velden (die zo geconfigureerd staan) van een database. De zoekopdracht en het resultaat vind je terug in figuur 3.13 en 3.14 op resp. bladzijde 49 en 50.
3.3.4
db
Onder dit gedeelte vallen commando’s die op de gehele database van toepassing zijn of de gehele set van scripts. Het menu zelf komt hier ook weer terug voor zijn volledigheid.
42
Project 2: Dynamische websites
Figuur 3.6: Verwijderen van records
Debug In sommige gevallen kan je problemen verwachten als er software verkeerd geinstalleerd werd. Dit kan zowel liggen aan Perl als aan de gebruikte webserver. Deze scripts werken perfect samen met Apache en volgens de HTTP/1.1-standaard, doch sommige webservers (de ervaring met IIS hebben we o.a.) lappen standaarden aan hun laars, in zo’n geval is het belangrijk dat we zo snel mogelijk weten wat verschilpunten zijn ! Het debug-commando kan in zo’n geval klaarheid scheppen. Het drukt alle gebruikte variabelen af die belangrijk zijn voor het goed functioneren. Als een webserver bepaalde environment-variabelen niet of verkeerd initialiseren zou dat hier snel duidelijk moeten worden. Het spreekt voor zich dat als Perl niet juist geconfigureerd is, de scripts zelfs niet kunnen draaien. In dat geval kan je best gebruik maken van syntax.cgi. In figuur 3.15 op bladzijde 51 zie je welke informatie getoond wordt, de lijst is natuurlijk een stuk langer. Inspect/Inspekteer Het inspect-commando is belangrijk bij het debuggen van de algemene databaseAPI en in het bijzonder de DBI-interface. Om te controleren of variabelen (bijvoorbeeld om te vertalen) in een database zitten of om na te kijken of het daadwerkelijk om data gaat kan je best niet te veel van die data bewerken.
3.3 Schermontwerp
43
Figuur 3.7: Welk record wilt u aanpassen ?
Je kan er ook heel simpel een overzicht mee opvragen of verspringen naar een bepaald record.
3.3.5
User/Gebruiker
De gebruiker-commando’s zijn belangrijk in een site waar alles draait om gebruikerbeheer. Vooral qua vertrouwen is het best dat je gebruikers toestaat hun eigen gegevens eender waar, eender wanneer aan te passen, zodat hij het gevoel heeft dat hij controle heeft over wat hij doet. De volgende functies maken dat mogelijk. Edit/Bewerk Een gebruiker dient altijd de mogelijkheid te hebben om zijn eigen gegevens aan te passen. Dit is altijd in het voordeel van de website en webmaster zelf. Dynamische websites die de gebruiker centraal stellen, durven op korte tijd wel eens een hoop gegevens van hun gebruikers opstapelen die snel verouderd is. Oude e-mail-adressen, gebruikers die liever nogmaals zich toevoegen in plaats van hun oude paswoord te zoeken, enzovoort... Dit systeem heeft alle functies ingebouwd om het de gebruiker zo aangenaam mogelijk te maken, een van de features die hier niet gedemonstreerd wordt is dat de gebruiker zijn eigen paswoord kan doormailen naar zijn e-mail adres. De kans
44
Project 2: Dynamische websites
Figuur 3.8: Aanpassen van records
dat hij zich dan nogmaals aandmeldt, verkleint op die manier en de gegevens (plus het aantal klanten) is veel betrouwbaarder. Figuur 3.17 op bladzijde 53 laat hetzelfde beeld zien als het bewerken van producten. Enkel de eigenaar van het record, dus de gebruiker, kan aan zijn eigen gegevens. Optimale beveiliging.
Forget/Vergeet Aangezien we gebruiken maken van een systeem van cookies16 en versleutelde paswoorden, is het belangrijk dat ook de gebruiker daarover controle heeft. Hij moet dus in staat zijn, zijn eigen sleutel weg te vegen uit zijn browser. Stel dat de gebruiker toevallig in een bibliotheek of cybercafé zit, dan wilt hij zeker niet dat een andere gebruiker toevallig onder zijn naam werkt (en bijvoorbeeld producten bestelt). Nadat het forget-commando ingegeven wordt, heeft de gebruiker geen enkele toegang meer tot de site, hij krijgt bij iedere poging een venster waarin gevraagd wordt naar zijn gebruikersnaam en zijn paswoord. 16
Cookies zijn kleine stukjes data die je in de browser van de gebruiker kan opslaan en later weer opvragen.
3.3 Schermontwerp
45
Figuur 3.9: Welk record wilt u zien ?
Surf Het surf -commando is niet meer dan een lijst van alle statische pagina’s in de /pages/ -directory. Dit is een goede startplaats om een deel van de site te bekijken. (Figuur 3.18 op bladzijde 54 geeft een korte lijst weer, een degelijk uitgebouwd site zal aanzienlijk meer statische pagina’s bevatten.) View/Bekijk Afgezien van het bewerken en het verwijderen van de cookie kan de gebruiker natuurlijk zijn eigen gegevens ook gewoon bekijken. Letterlijk zou dit kunnen betekenen dat de gebruiker zijn eigen foto via het web uploadt en dat dit in een record gestoken wordt. (Zie figuur 3.19 op bladzijde 55 voor een simpelere benadering.)
3.3.6
Extra
Onder Extra staat nog de index-pagina van het statische gedeelte van de website plus een lijst van bijkomende CGI-scripts. Net zoals de statische pagina’s zullen ook deze CGI-scripts dezelfde layout krijgen als de rest van de website, zodat een uniforme look simpel en efficiënt gecreëerd wordt.
46
Project 2: Dynamische websites
Figuur 3.10: Het bekijken van records
3.4
Detailontwerp
3.4.1 Beschrijving systeem Volgorde van uitvoering De volgorde van het laden van de modules wordt bepaald in het script dat aangeroepen wordt, nl. index.cgi. Dit script is een deel van de configuratie, in het begin van deze file staan variabelen die nodig zijn voor het succesvol uitvoeren van het script. (zoals huidige path, directories van de modules, taalfiles, etc...) en een waarschuwing naar de gebruiker als er onverwacht een fout gebeurd. (Zulke fouten komen enkel voor als een script een syntax-fout heeft, normaal kan dit niet zomaar gebeuren dus we veronderstellen dat op zo’n moment net onderhoudswerken bezig zijn.) De normale gang van zaken is dat eerst daglib.pm aangeroepen wordt, deze library bevat een hele reeks basis-functies waarvan alle modules onafhankelijk gebruik maken. Deze is dus verplicht in alle omstandigheden. Ook zorgt daglib.pm voor de taal-afhankelijke kwesties en voor het parsen van variabelen en uitvoeren van embedded Perl. Vervolgens kan db.pm aangeroepen worden, het is perfect mogelijk om een dynamische website te ontwikkelen die niet gebruik maakt van databases. Gewoon gebruik maken van embedded Perl is een reden genoeg om de scripts te gebruiken,
3.4 Detailontwerp
47
Figuur 3.11: Zoeken door een database dmv. één of meerdere velden
neem daarbij nog de uniforme look die in een handomdraai gegenereerd wordt en je gebruikt nooit nog enkel statische pagina’s. Als je de db.pm niet laadt, heeft het ook geen zin om de cookie.pm te laden, omdat die terugvalt op de db.pm voor heel wat zaken. cookie.pm wordt voornamelijk gebruikt voor de user authentication en het afhandelen van alle user-specifieke taken, zonder een user-database is dat dus onmogelijk. Omgekeerd is het best denkbaar dat je wel gebruik wil maken van databases, maar dat je niet echt een onderscheid wil maken tussen je gebruikers. Dan kan je dus cookie.pm gerust laten vallen. Als laatste heeft dit systeem een order.pm. Zoals de naam laat vermoeden zorgt die voor het afhandelen van het elektronische winkelkarretje en het factuur en bestelling. Deze is dus enkel nodig als je die functionaliteit wenst. Merk op dat in dat geval je die nog zal moeten aanpassen om in een specifieke situatie te kunnen gebruiken. Database aanroepen De manier waarop het hele systeem met databases werkt is vrij eenvoudig, in de algemene configuratie-file (/conf/conf.lat) staat de lijst van databases (en hun type). Die lijst wordt in een dynamische lijst van objecten gestoken, samen met hun meta-data. Bij het initialiseren van db.pm gaat hij alle databases af en zorgt ervoor dat de belangrijke zaken in het geheugen worden geladen. Eens dat gebeurd is
48
Project 2: Dynamische websites
Figuur 3.12: Het gevonden resultaat na het zoeken op een veld
wordt van overal in het systeem gebruikt gemaakt van de algemene functies die in db.pm zitten. Die gaat op zijn beurt de database-afhankelijke code (bijvoorbeeld in db_dbi.pm of db_xbase.pm) aanroepen voor de specifieke database-afhankelijke gebruiken. db.pm zorgt er wel voor dat de data die doorgegeven wordt en opgehaald wordt uit de databases conform zijn met de gespecifiëerde datatypen. Dit is belangrijk om gegevens van gebruikers in te lezen, maar ook om databases van het ene type te converteren naar een database van een ander type ! Het werken met variabelen Een unieke manier om te werken met variabelen werd aan het systeem toegevoegd om variabele code en statische HTML-code van elkaar te scheiden. Zo kan je in een pagina $$USER$$ zetten en die “string” wordt dan rechtstreeks vertaald naar een woord in de aangeduide taal. Zo kan je voor iedere pagina (statisch of dynamisch) één versie maken die in alle talen te onderhouden valt en eenduidig is. Verder kan je op die manier bepalen hoe records getoond moeten worden, door de inhoud van een record weer te geven als %%NAME%%. En invulvelden worden weergegeven als: ##PRICE##. Dit systeem laat toe flexibel om te gaan met data zonder je te beperken in bewegingsvrijheid. Dit zijn alle mogelijke variabelen die het systeem kent:
3.4 Detailontwerp
49
Figuur 3.13: Zoeken door de gehele database dmv. keywords
$$STRING$$ Dit wordt gebruikt voor taal-afhankelijke strings. Deze definieer je in de /conf/*.tks-files. &&CODE&& Deze vervangen HTML-code die voorkomt in de algemene configuratie-file /conf/conf.lat en in de database-configuratiefiles /data/*.ini. ££PARAMETER££ Parameters zijn variabelen die in een URL worden meegegeven, zo zal ££lng££ overeenkomen met de taalkeuze. %%FIELD%% Dit zijn de velden die in een record staan. ##TEXTFIELD## Dit zijn invulvelden, zij hebben de juiste vorm (tekstveld, pull-down, ...) die hoort bij het juist type en de lengte komt overeen met de lengte va het database-veld. ççENVIRONMENTçç Dit de zijn environment-variabelen.
50
Project 2: Dynamische websites
Figuur 3.14: Het gevonden resultaat
§§VARIABLE§§ Dit zijn bijkomende variabelen die in het systeem gebruikt kunnen worden. Deze variabelen zijn enkel bruikbaar om de inhoud te tonen. Ze kunnen niet aangepast worden ! Het werken met embedded Perl Een deel van de variabelen zoals ze hierboven worden beschreven waren eigenlijk een noodoplossing. En dankzij embedded Perl worden die overbodig. Embedded Perl maakt het mogelijk om eender waar in pagina’s, code of strings gebruik te maken van Perl-code die pas net voor het tonen wordt uitgevoerd. Op die manier kan je krachtig zaken implementeren op de locatie waar je het nodig acht en het zal enkel en alleen uitgevoerd worden als de pagina met die code samengesteld is. Je gebruikt embedded Perl op de volgende manier: <script language="Perl"> echo "Hello world !";
Natuurlijk heeft het voorgaande weinig zin, gewoon Hello world ! plaatsen had hetzelfde effekt. Maar als we die echo gaan vervangen door eender welke Perlcode dan wordt de kracht pas duidelijk. Zo kunnen we bijvoorbeeld met embedded
3.4 Detailontwerp
51
Figuur 3.15: Debug-informatie om problemen op te lossen
Perl andere files openen, andere databases raadplegen en zoekfuncties uitvoeren. Het volgende voorbeeld gaat uit de userdatabase de user halen die eigenaar is van dit record: <script language="Perl"> %::REC=$::db->[$::udb]->rr($::RECORD{’OWNER’}); print $::REC{’PRENAM’}.’ ’.$::REC{’FAMNAM’}; print ’ ’.$::REC{’EMLNAM’}.’ ’;
Vervolgens drukt het de user af met een link waarachter zijn email-adres schuilgaat.
3.4.2
Beschrijving configuratie
Algemene configuratie De algemene configuratie gebeurt in 2 files, nl /index.cgi en /conf/conf.lat. In index.cgi zorg je er voor dat enkel de modules geladen worden die nodig zijn voor jouw configuratie en in /conf/conf.lat moet je de volgende zaken installen: Databases Om de verschillende configuratiedelen op te splitsen maak je gebruik van 4 sterretjes. De syntax van het DATABASE-deel ziet er als volgt uit:
52
Project 2: Dynamische websites
Figuur 3.16: Een echte kijk op de database
****DATABASE TXT::/data/users XBASE::/data/prods2 DBI::dbi:XBase:/home/dag/public_html/db-engine/data/:::::: xbase DBI::dbi:DB2:db2inst1::name::password::table DBI::dbi:Oracle:orcl::name::password::table DBI::dbi:Pg:dbname=mydb::::::pgsql ****
Je ziet dat voor de databases, die we via DBI aanroepen, de configuratie ongeveer hetzelfde verloopt. Enkel voor XBase via DBI (wat eigenlijk weer een flatfiledatabase is) loopt het anders omdat er geen user authentication is op databaseniveau. Variabelen Vervolgens worden een deel globale variabelen ingesteld. Deze beïnvloeden het hele systeem. Dit is een voorbeeld van zo’n configuratie-gedeelte. ****VAR BROWSE_LENGTH=5 CACHE=no COOKIEMASK=: COOKIENAME=DB-ENGINE CRYPTED_PASSWD=no DEFAULT_DB=2 DEFAULT_LNG=1 DUPLICATE_CHECK=no EXECUTE_TIME=no LOG=no LOG_ALL=no SCRIPT_METHOD=GET SCRIPT_NAME=index.cgi SMTP_SERVER=localhost TEXTONLY_ALLOWED=no ****
3.4 Detailontwerp
53
Figuur 3.17: Bewerk je eigen record
Code Vervolgens tonen we hoe je HTML-code in variabelen kan steken. Let op de embedded Perl declaratie in de HEAD-code. Het voorbeeld is niet compleet. Achteraan bij de broncode steekt een compleet voorbeeld. ****CODE &&LINE
&&---&&HEAD db-engine database engine test
<script language="perl"> print ’(user: ’. $::USER{’PRENAM’}.’ ’.$::USER{’FAMNAM’}.’ - level: ’. $::USER{’LVLNUM’}.’)’ if ($::USER{’NR’} != 0); &&LINE&& &&---... ****
Configuratie van databases De configuratie van databases loopt ongeveer hetzelfde. De syntax van de configuratiebestanden is dezelfde, alleen moet je bij de database-configuratie de volgorde kennen van opties.
54
Project 2: Dynamische websites
Figuur 3.18: Een lijst van statische pagina’s
Velden Dit is voor alle databases belangrijke informatie. Hier worden per veld de commando’s bepaald die wel of niet mogen worden uitgevoerd. ;Veld Naam ****FIELD 1::NUMMER::$$NUMBER$$ 2::OWNER::$$OWNER$$ 3::PASSWD::$$PASSWD$$ 4::LVLNUM::$$USERLEVEL$$ 5::FAMNAM::$$SURNAME$$ 6::PRENAM::$$FIRSTNAME$$ 7::EMLNAM::$$EMAIL$$ ****
brws fs ts is ed ad typ len id ::2::0::0::0::0::0::NUM::4::0:: ::0::0::0::0::0::0::NUM::4::0:: ::0::0::0::0::1::2::PWD::8::2:: ::0::0::0::0::0::0::NUM::2::0:: ::2::1::1::1::1::2::STR::20::1:: ::2::1::1::2::1::2::STR::20::1:: ::1::0::0::0::1::2::EML::20::0::
Beveiliging Het security-gedeelte beschrijft welke commando’s mogen toegepast worden vanaf een bepaald level. MASTER is het level dat bepaald wie alle toegangsrechten heeft. Hier heeft dus een user met userlevel 75 voldoende. Toevoegen mag hier iedereen, net zoals records bekijken. (Hou rekening met het “ownership” van de database. ****SECURITY ADD=0 BROWSE=75 DELETE=75 EDIT=75 FSEARCH=75 MASTER=75 TSEARCH=75 UNDELETE=75 VIEW=0 ****
Variabelen De variabelen geven meer betekenis aan een database. Zo betekent het TYPE in dit geval dat het gaat om de user-database. Bepaalde privileges zijn dan nodig !
3.4 Detailontwerp
55
Figuur 3.19: Het bekijken van je eigen user-record
****VAR NAME=User Database SECURITY=yes TYPE=U OWNERSHIP=yes ****
Strings Je kan hier ook database-specifieke strings maken, meestal verwijs je dan weer door naar een string uit de taal-bestanden om zeker te zijn dat alles taal-onafhankelijk blijft. Strings gebruik je hier dus best niet. Code Dit zijn de database specifieke codes die gebruikt kunnen worden. Ook bepaal je hierin de layout van het bewerken of tonen van records. ****CODE &&TABLE_HEAD &&---&&TABLE_BODY <small>$$NUMBER$$ | %%NUMMER%% |
<small>$$FIRSTNAME$$ | %%PRENAM%% |
<small>$$SURNAME$$ | %%FAMNAM%% |
<small>$$EMAIL$$ | %%EMLNAM%% |
<small>$$PASSWD$$ | %%PASSWD%% |
<small>$$USERLEVEL$$ | %%LVLNUM%% |
&&----
56
Project 2: Dynamische websites
&&TABLE_FOOT
&&---... ****
Vertalen van de website Het vertalen van de website gebeurt door alle strings die gedefinieerd zijn in de code en de website te vertalen. (Dus enkel de /conf/*.tks-files.) Hier is een voorbeeld van zo’n taalbestand. Lijsten Deze lijsten zijn in het engelstalig geïnitialiseerd zodat ook bij het mislukken van het lezen van taalbestanden hij degelijke debug-informatie kan loggen. ****LIST januari::februari::maart::april::mei::juni::juli::augustus ::september::oktober::november::december:: Zondag::Maandag::Dinsdag::Woensdag::Donderdag::Vrijdag::Za terdag:: ****
Strings En uiteindelijk worden dan één voor één de strings vertaald. Het is belangrijk voor iedere situatie een zo uniek mogelijke combinatie te vormen zodat er niets kan foutlopen in de toekomst. ****STRING $$ADD_ACCDEN Je MAG NIET toevoegen ! $$---$$ADD_DUP Duplicate Error !! $$---$$ADD_INP Vul de gevraagde informatie in ! $$---... ****
Bijlage A Voorbeelden Beide voorbeelden worden uitvoerig besproken tijdens de voorstelling, hier geef ik een korte beschrijving wat er tijdens die voorstelling ter sprake zal komen.
A.1
Dynamische website
Een dynamische website is een website die interactief door de bezoeker gebruikt kan worden. In plaats van passief te lezen kan de gebruiker actief op zoek gaan naar wat hij verlangt. De inhoud van zulke websites worden dus naargelang wat de gebruiker wenst te voorschijn getoverd en aangepast.
A.2
Simpele shoppingmall
Een ultiem voorbeeld van dynamische websites is een shoppingmall. Een virtuele winkel waar de bezoeker zijn boodschappen kan doen. In tegenstelling tot vele huidige webwinkels is het hier de bedoeling een gehele supermarkt in een site te steken, waar de verschillende leveranciers van producten hun eigen koopwaar kunnen aanpassen naar believen.
A.3
Conversie van databases
En uiteindelijk zal worden gedemonstreerd hoe je eenvoudig tussen alle gesupporteerde databases kan worden geconverteerd. Databases die op dit moment werken zijn: Text-databases (getest) XBase-databases (getest)
58
Voorbeelden DBM-databases (getest) XBase-databases via DBI (getest) Oracle via DBI (getest) DB2 via DBI (getest) Postgresql via DBI (getest) TextFile via DBI Ingres via DBI Sybase via DBI Informix via DBI Solid via DBI
Bijlage B Verklarende woordenlijst Vele begrippen vinden hun oorsprong in het voornamelijk Engelstalige computerwereldtje. De betekenis van talloze concepten gaat verloren bij het vertalen van de uitleg. Het resultaat van enkele vertaalde begrippen was zo bedroevend dat ik het bij de Engelstalige uitleg hou.
B.1
AIX
AIX is an open operating system from IBM that is based on a version of UNIX. AIX/ESA was designed for IBM’s System/390 or large server hardware platform. AIX/6000 is an operating system that runs on IBM’s workstation platform, the RISC System/6000.
B.2
Apache
Apache is a freely available Web server that is distributed under an Open Source license. Version 1.3 runs on most UNIX-based operating systems (such as Linux, Solaris, Digital UNIX, and AIX), on other UNIX/POSIX-derived systems (such as Rhapsody, BeOS, and BS2000/OSD), on AmigaOS, and on Windows NT/95/98. According to the Netcraft (http://www.netcraft.com/) web server survey in September 1998, more than 50% of all Internet servers were running Apache. Although Windows-based systems with Web servers from Microsoft, Netscape, and other companies are probably gaining in terms of numbers, Apache is likely to remain popular in enterprises and server locations (such as universities) where UNIXbased systems are prevalent. Apache complies with the newest level of the HyperText Transport Protocol, HTTP 1.1. Free support is provided through a bug reporting system and several USENET newsgroups. Several companies offer priced support.
60
Verklarende woordenlijst
B.3 API An API (application program interface) is the specific method prescribed by a computer operating system or by another application program by which a programmer writing an application program can make requests of the operating system or another application. An API can be contrasted with a graphical user interface or a command interface (both of which are direct user interfaces) as interfaces to an operating system or a program.
B.4 ASP An ASP (Active Server Page) is an HTML page that includes one or more scripts (small embedded programs) that are processed on a Microsoft Web server before the page is sent to the user. An ASP is somewhat similar to a server-side include or a common gateway interface (CGI) application in that all involve programs that run on the server, usually tailoring a page for the user. Typically, the script in the Web page at the server uses input received as the result of the user’s request for the page to access data from a database and then build or customize the page on the fly before sending it to the requestor. ASP is a feature of the Microsoft Internet Information Server (IIS), but, since the server-side script is just building a regular HTML page, it can be delivered to almost any browser. You can create an ASP file by including a script written in VBScript or JScript in an HTML file and then renaming it with the .asp file suffix. Microsoft recommends the use of the server-side ASP rather than a clientside script, where there is actually a choice, because the server-side script will result in an easily displayable HTML page. Client-side scripts (for example, with JavaScript) may not work as intended on older browsers.
B.5 browser A browser is an application program that provides a way to look at and interact with all the information on the World Wide Web. The word ”browser” seems to have originated prior to the Web as a generic term for user interfaces that let you browse text files online. By the time the first Web browser with a graphical user interface was invented (Mosaic, in 1992), the term seemed to apply to Web content, too. Technically, a Web browser is a client program that uses the Hypertext Transfer Protocol (HTTP) to make requests of Web servers throughout the Internet on behalf of the browser user. A commercial version of the original browser,
B.6 CGI
61
Mosaic, is in use. Many of the user interface features in Mosaic, however, went into the first widely-used browser, Netscape Navigator. Microsoft followed with its Internet Explorer. Today, these two browsers are highly competitive and the only two browsers that the vast majority of Internet users are aware of. Although the online services, such as America Online, Compuserve, and Prodigy, originally had their own browsers, virtually all now offer the Netscape or Microsoft browser. Lynx is a text-only browser for UNIX shell and VMS users. Another recently offered browser is Opera.
B.6
CGI
The common gateway interface (CGI) is a standard way for a Web server to pass a Web user’s request to an application program and to receive data back to forward to the user. When the user requests a Web page (for example, by clicking on a highlighted word or entering a Web site address), the server sends back the requested page. However, when a user fills out a form on a Web page and sends it in, it usually needs to be processed by an application program. The Web server typically passes the form information to a small application program that processes the data and may send back a confirmation message. This method or convention for passing data back and forth between the server and the application is called the common gateway interface (CGI). It is part of the Web’s HTTP protocol.
B.7
client
A client is the requesting program or user in a client/server relationship. For example, the user of a Web browser is effectively making client requests for pages from servers all over the Web. The browser itself is a client in its relationship with the computer that is getting and returning the requested HTML file. The computer handling the request and sending back the HTML file is a server.
B.8
CSS
A cascading style sheet (CSS) is a Web page style sheet derived from multiple sources with a defined order of precedence where the definitions of any style element conflict. The Cascading Style Sheet, level 1 (CSS1) recommendation from the World Wide Web Consortium (W3C), which is implemented in the latest versions of the Netscape and Microsoft Web browsers, specifies the possible style sheets or statements that may determine how a given element is presented in a Web page.
62
Verklarende woordenlijst
B.9 DB2 DB2, an IBM family of products, is a relational database management system (RDBMS) for large business computers that, according to IBM, leads in terms of database market share and performance. Although DB2 products are offered for UNIX-based systems and personal computer operating systems, DB2 trails Oracle’s database products in UNIX-based systems and Microsoft’s Access in Windows systems. In addition to its offerings for the mainframe OS/390 and VM operating systems and its mid-range AS/400 systems, IBM offers DB2 products for a crossplatform spectrum that includes UNIX-based Linux, HP-UX, Sun Solaris, and SCO UnixWare; and for its personal computer OS/2 operating system as well as for Microsoft’s Windows NT and Windows 95/98. DB2 databases can be accessed from any application program by using Microsoft’s Open Database Connectivity (ODBC) interface, the Java Database Connectivity (JDBC) interface, or a CORBA interface broker.
B.10 e-mail E-mail (electronic mail) is the exchange of computer-stored messages by telecommunication. (Some publications spell it email; we prefer the currently more established spelling of e-mail.) E-mail messages are usually encoded in ASCII text. However, you can also send non-text files, such as graphic images and sound files, as attachments sent in binary streams. E-mail was one of the first uses of the Internet and is still the most popular use. A large percentage of the total traffic over the Internet is e-mail. E-mail can also be exchanged between online service users and in networks other than the Internet, both public and private.
B.11 firewall A firewall is a set of related programs, located at a network gateway server, that protects the resources of a private network from users from other networks. (The term also implies the security policy that is used with the programs.) An enterprise with an intranet that allows its workers access to the wider Internet installs a firewall to prevent outsiders from accessing its own private data resources and for controlling what outside resources its own users have access to. Basically, a firewall, working closely with a router program, filters all network packets to determine whether to forward them toward their destination. A firewall also includes or works with a proxy server that makes network requests on behalf
B.12 fork()
63
of workstation users. A firewall is often installed in a specially designated computer separate from the rest of the network so that no incoming request can get directly at private network resources.
B.12 fork() FORK(2)
Linux Programmer’s Manual
FORK(2)
NAME fork, vfork - create a child process SYNOPSIS #include pid_t fork(void); pid_t vfork(void); DESCRIPTION fork creates a child process that differs from the parent process only in its PID and PPID, and in the fact that resource utilizations are set to 0. File locks and pending signals are not inherited. Under Linux, fork is implemented using copy-on-write pages, so the only penalty incurred by fork is the time and memory required to duplicate the parent’s page tables, and to create a unique task structure for the child. RETURN VALUE On success, the PID of the child process is returned the parent’s thread of execution, and a 0 is returned the child’s thread of execution. On failure, a -1 will returned in the parent’s context, no child process will created, and errno will be set appropriately.
in in be be
B.13 HTML HTML (Hypertext Markup Language) is the set of markup symbols or codes inserted in a file intended for display on a World Wide Web browser. The markup tells the Web browser how to display a Web page’s words and images for the user. HTML is defined in practice both by Netscape and Microsoft as they add changes to their Web browsers and more officially for the industry by the World Wide Web Consortium (W3C). A new version of HTML called HTML 4 has recently been officially recommended by W3C, making this level an effective standard. However, both Netscape and Microsoft browsers currently implement some features differently and provide non-standard extensions. Web developers using the more advanced features of HTML 4 may have to design pages for both browsers and send out the appropriate version to a user. Significant features in HTML 4 are sometimes described in general as dynamic HTML.
64
Verklarende woordenlijst
B.14 HTTP The Hypertext Transfer Protocol (HTTP) is the set of rules for exchanging files (text, graphic images, sound, video, and other multimedia files) on the World Wide Web. Relative to the TCP/IP suite of protocols (which are the basis for information exchange on the Internet), HTTP is an application protocol. Essential concepts that are part of HTTP include (as its name implies) the idea that files can contain references to other files whose selection will elicit additional transfer requests. Any Web server machine contains, in addition to the HTML and other files it can serve, an HTTP daemon, a program that is designed to wait for HTTP requests and handle them when they arrive. Your Web browser is an HTTP client, sending requests to server machines. When the browser user enters file requests by either opening a Web file (typing in a Uniform Resource Locator or URL) or clicking on a hypertext link, the browser builds an HTTP request and sends it to the Internet Protocol address indicated by the URL. The HTTP daemon in the destination server machine receives the request and, after any necessary processing, the requested file is returned. The latest version of HTTP is HTTP 1.1.
B.15 ICMP ICMP is a message control and error-reporting protocol between a host server and a gateway to the Internet. ICMP uses Internet Protocol (IP) datagrams, but the messages are processed by the TCP/IP software and are not directly apparent to the application user.
B.16 IP The Internet Protocol (IP) is the method or protocol by which data is sent from one computer to another on the Internet. Each computer (known as a host) on the Internet has at least one address that uniquely identifies it from all other computers on the Internet. When you send or receive data (for example, an e-mail note or a Web page), the message gets divided into little chunks called packets. Each of these packets contains both the sender’s Internet address and the receiver’s address. Any packet is sent first to a gateway computer that understands a small part of the Internet. The gateway computer reads the destination address and forwards the packet to an adjacent gateway that in turn reads the destination address and so forth across the Internet until one gateway recognizes the packet as belonging to a computer within its immediate neighborhood or domain. That gateway then
B.17 JavaScript
65
forwards the packet directly to the computer whose address is specified. Because a message is divided into a number of packets, each packet can, if necessary, be sent by a different route across the Internet. Packets can arrive in a different order than the order they were sent in. The Internet Protocol just delivers them. It’s up to another protocol, the Transmission Control Protocol (TCP) to put them back in the right order. IP is a connectionless protocol, which means that there is no established connection between the end points that are communicating. Each packet that travels through the Internet is treated as an independent unit of data without any relation to any other unit of data. (The reason the packets do get put in the right order is because of TCP, the connection-oriented protocol that keeps track of the packet sequence in a message.) In the Open Systems Interconnection (OSI) communication model, IP is in layer 3, the Networking Layer. The most widely used version of IP today is Internet Protocol Version 4 (IPv4). However, IP Version 6 (IPv6) is also beginning to be supported. IPv6 provides for much longer addresses and therefore for the possibility of many more Internet users. IPv6 includes the capabilities of IPv4 and any server that can support IPv6 packets can also support IPv4 packets.
B.17 JavaScript JavaScript is an interpreted programming or script language from Netscape. It is somewhat similar in capability to Microsoft’s Visual Basic, Sun’s Tcl, the UNIXderived Perl, and IBM’s REXX. In general, script languages are easier and faster to code in than the more structured and compiled languages such as C and C++. Script languages generallly take longer to process than compiled languages, but are very useful for shorter programs. JavaScript is used in Web site development to do such things as: Automatically change a formatted date on a Web page Cause a linked-to page to appear in a popup window Cause text or a graphic image to change during a mouse rollover JavaScript uses some of the same ideas found in Java, the compiled object-oriented language derived from C++. JavaScript code can be imbedded in HTML pages and interpreted by the Web browser (or client). JavaScript can also be run at the server as in Microsoft’s Active Server Pages (ASPs) before the page is sent to the requestor. Both Microsoft and Netscape browsers support JavaScript, but sometimes in slightly different ways.
66
Verklarende woordenlijst
B.18 Linux Linux (often pronounced LIH-nuhks with a short “i”) is a UNIX-like operating system that was designed to provide personal computer users a free or very lowcost operating system comparable to traditional and usually more expensive UNIX systems. Linux has a reputation as a very efficient and fast-performing system. Linux’s kernel (the central part of the operating system) was developed by Linus Torvalds at the University of Helsinki in Finland. To complete the operating system, Torvalds and other team members made use of system components developed by members of the Free Software Foundation for the GNU project. Linux is a remarkably complete operating system, including a graphical user interface, X Window System, TCP/IP, the Emacs editor, and other components usually found in a comprehensive UNIX system. Although copyrights are held by various creators of Linux’s components, Linux is distributed using the Free Software Foundation’s copyleft stipulations that mean any copy is in turn freely available to others. Unlike Windows and other proprietary systems, Linux is publicly open and extendible by contributors. Because it conforms to the POSIX standard user and programming interfaces, developers can write programs that can be ported to other operating systems, including IBM’s OS/390 running UNIX. Linux comes in versions for all the major microprocessor platforms including the Intel, PowerPC, Sparc, and Alpha platforms. Linux is distributed commercially by a number of companies. A magazine, Linux Journal, is published as well as a number of books and pocket references. Linux is sometimes suggested as a possible publicly-developed alternative to the desktop predominance of Microsoft Windows. Although Linux is popular among users already familiar with UNIX, it remains far behind Windows in numbers of users.
B.19 netcat [v1.10] connect to somewhere: nc [-options] hostname port[s] [ports] ... listen for inbound: nc -l -p port [-options] [hostname] [port] options: -g gateway source-routing hop point[s], up to 8 -G num source-routing pointer: 4, 8, 12, ... -h this cruft -i secs delay interval for lines sent, ports scanned -l listen mode, for inbound connects -n numeric-only IP addresses, no DNS -o file hex dump of traffic -p port local port number -r randomize local and remote ports -s addr local source address -u UDP mode -v verbose [use twice to be more verbose] -w secs timeout for connects and final net reads -z zero-I/O mode [used for scanning] port numbers can be individual or ranges: lo-hi [inclusive]
B.20 NIC
67
B.20 NIC A network interface card (NIC) is a computer circuit board or card that is installed in a computer so that it can be connected to a network. Personal computers and workstations on local area networks (LANs) typically contain a network interface card specifically designed for the LAN transmission technology, such as Ethernet or Token Ring. Network interface cards provide a dedicated, full-time connection to a network. Most home and portable computers connect to the Internet through as-needed dial-up connection. The modem provides the connection interface to the Internet service provider.
B.21 ODBC Open Database Connectivity (ODBC) is a standard or open application programming interface (API) for accessing a database. By using ODBC statements in a program, you can access files in a number of different databases, including Access, dBase, DB2, Excel, and Text. In addition to the ODBC software, a separate module or driver is needed for each database to be accessed. The main proponent and supplier of ODBC programming support is Microsoft. ODBC is based on and closely aligned with the Open Group standard Structured Query Language (SQL) Call-Level Interface. It allows programs to use SQL requests that will access databases without having to know the proprietary interfaces to the databases. ODBC handles the SQL request and converts it into a request the individual database system understands. ODBC was created by the SQL Access Group and first released in September, 1992. Although Microsoft Windows was the first to provide an ODBC product, versions now exist for UNIX, OS/2, and Macintosh platforms as well. In the newer distributed object architecture called CORBA, the Persistent Object Service (POS) is a superset of both the Call-Level Interface and ODBC. When writing programs in the Java language and using the Java Database Connectivity (JDBC) application program interface, you can use a product that includes a JDBC-ODBC bridge program to reach ODBC-accessible databases.
68
Verklarende woordenlijst
B.22 Open Source software Open Source is a certification mark owned by the Open Source Initiative (OSI). Developers of software that is intended to be freely shared and possibly improved and redistributed by others can use the Open Source trademark if their distribution terms conform to the OSI’s Open Source Definition. To summarize, the Definition model of distribution terms require that: The software being distributed must be redistributed to anyone else without any restriction The source code must be made available (so that the receiving party will be able to improve or modify it) The license can require improved versions of the software to carry a different name or version from the original software The idea is very similar to the copyleft concept of the Free Software Foundation. Open Source is the result of a long-time movement toward software that is developed and improved by a group of volunteers cooperating together on a network. Many parts of the UNIX operating system were developed this way, including today’s most popular version, Linux. Linux uses applications from the GNU project, which was guided by Richard Stallman and the Free Software Foundation. The Open Source Definition, spearheaded by Eric Raymond (editor of The New Hacker’s Dictionary), is an effort to provide a branded model or guideline for this kind of software distribution and redistribution. The OSI considers the existing software distribution licenses used by GNU, BSD (a widely-distributed version of UNIX), X Consortium, and Artistic to be conformant with the Open Source Definition. Prior to its acquisition by AOL, Netscape, in an effort to stay viable in its browser competition with Microsoft, made its browser source code (codenamed Mozilla) freely available, encouraging hackers to improve it. Possible enhancements will presumably be incorporated into future versions. The open source movement has gained momentum in the latter half of 1998 as commercial enterprises have begun to consider Linux as an open alternative to Windows 9x/NT.
B.23 Perl & mod_perl Perl is a script programming language that is similar in syntax to the C language and that includes a number of popular UNIX facilities such as sed, awk, and tr. Perl is an interpreted language that can be compiled just before execution into
B.24 PHP & mod_php
69
either C code or cross-platform byte-code. When compiled, a Perl program is almost (but not quite) as fast as a fully precompiled C language program. Perl is regarded as a good choice for developing Common Gateway Interface (CGI) programs because it has good text manipulation facilities (although it also handles binary files). It was invented by Larry Wall. In general, Perl is easier to learn and faster to code in than the more structured C and C++ languages. Perl programs can, however, be quite sophisticated. Perl tends to have devoted adherents. Plug-ins can be installed for some servers (mod_perl for Apache, for example) so that Perl is loaded permanently in memory, thus reducing compile time and resulting in faster execution of CGI Perl scripts.
B.24 PHP & mod_php In Web programming, PHP is a script language and interpreter, similar to JavaScript and Microsoft’s VBScript, that is freely available and used primarily on Linux Web servers. PHP (the initials come from the earliest version of the program, which was called Personal Home Page Tools) is a cross-platform alternative to Microsoft’s Active Server Page (ASP) technology (which runs only on Microsoft’s Windows NT servers). As with ASP, the PHP script is embedded within a Web page along with its HTML. Before the page is sent to a user that has requested it, the Web server calls PHP to interpret and perform the operations called for in the PHP script. An HTML page that includes a PHP script is given a file name suffix of .php or .php3. Like ASP, PHP can be thought of as dynamic HTML pages, since content will vary based on the results of interpreting the script. PHP can be compiled as a module (plug-in) for several webservers (mod_php for Apache, for example). PHP is free and offered under an open source license. The latest version is PHP3.
B.25 ping PING(8)
UNIX System Manager’s Manual
PING(8)
NAME ping - send ICMP ECHO_REQUEST packets to network hosts SYNOPSIS ping [-dfnqrvR] [-c count] [-i wait] [-l preload] [-p pattern] [-s packetsize] DESCRIPTION Ping uses the ICMP protocol’s mandatory ECHO_REQUEST datagram to elicit an ICMP ECHO_RESPONSE from a host or gateway. ECHO_REQUEST datagrams (‘‘pings’’) have an IP and ICMP header, followed by a ‘‘struct timeval’’ and then an arbitrary number of ‘‘pad’’ bytes used to fill out the packet. The options are as follows: Other options are: -c count
70
Verklarende woordenlijst
Stop after sending (and receiving) count ECHO_RESPONSE packets. -d
Set the SO_DEBUG option on the socket being used.
-f
Flood ping. Outputs packets as fast as they come back or one hundred times per second, whichever is more. For every ECHO_REQUEST sent a period ‘‘.’’ is printed, while for ever ECHO_REPLY received a backspace is printed. This provides a rapid display of how many packets are being dropped. Only the super-user may use this option. This can be very hard on a network and should be used with caution.
-i wait Wait wait seconds between sending each packet. The default is to wait for one second between each packet. This option is incompatible with the -f option. -l preload If preload is specified, ping sends that many packets as fast as possible before falling into its normal mode of behavior. Only the super-user may use this option. -n
Numeric output only. No attempt will be made to lookup symbolic names for host addresses.
-p pattern You may specify up to 16 ‘‘pad’’ bytes to fill out the packet you send. This is useful for diagnosing data-dependent problems in a network. For example, ‘‘-p ff’’ will cause the sent packet to be filled with all ones. -q
Quiet output. Nothing is displayed except the summary lines at startup time and when finished.
-R
Record route. Includes the RECORD_ROUTE option in the ECHO_REQUEST packet and displays the route buffer on returned packets. Note that the IP header is only large enough for nine such routes. Many hosts ignore or discard this option.
-r
Bypass the normal routing tables and send directly to a host on an attached network. If the host is not on a directly-attached network, an error is returned. This option can be used to ping a local host through an interface that has no route through it (e.g., after the interface was dropped by routed(8)).
-s packetsize Specifies the number of data bytes to be sent. The default is 56, which translates into 64 ICMP data bytes when combined with the 8 bytes of ICMP header data. -v
Verbose output. ICMP packets other than ECHO_RESPONSE that are received are listed.
When using ping for fault isolation, it should first be run on the local host, to verify that the local network interface is up and running. Then, hosts and gateways further and further away should be ‘‘pinged’’. Round-trip times and packet loss statistics are computed. If duplicate packets are received, they are not included in the packet loss calculation, although the round trip time of these packets is used in calculating the minimum/average/maximum round-trip time numbers. When the specified number of packets have been sent (and received) or if the program is terminated with a SIGINT, a brief summary is displayed. If ping does not receive any reply packets at all it will exit with code 1. On error it exits with code 2. Otherwise it exits with code 0. This makes it possible to use the exit code to see if a host is alive or not. This program is intended for use in network testing, measurement and management. Because of the load it can impose on the network, it is unwise to use ping during normal operations or from automated scripts.
B.26 server In computer programming, a script is a program or sequence of instructions that is interpreted or carried out by another program rather than by the com-
B.27 server
71
puter processor (as a compiled program is). Some languages have been conceived expressly as script languages. Among the most popular are Perl, REXX (on IBM mainframes), JavaScript, and Tcl/Tk. In the context of the World Wide Web, Perl, JBScript, and similar script languages are often written to handle forms input or other services for a Web site and are processed on the Web server. A JavaScript script in a Web page runs client-side on the Web browser. In general, script languages are easier and faster to code in than the more structured and compiled languages such as C and C++ and are ideal for programs of very limited capability or that can reuse and tie together existing compiled programs. However, a script takes longer to run than a compiled program since each instruction is being handled by another program first (requiring additional instructions) rather than directly by the basic instruction processor. A script is sometimes used to mean a list of operating system commands that are prestored in a file and performed sequentially by the operating system’s command interpreter whenever the list name is entered as a single command.
B.27 server In general, a server is a computer program that provides services to other computer programs in the same or other computers. The computer that a server program runs in is also frequently referred to as a server (though it may contain a number of server and client programs). In the client/server programming model, a server is a program that awaits and fulfills requests from client programs in the same or other computers. A given application in a computer may function as a client with requests for services from other programs and a server of requests from other programs. Specific to the Web, a Web server is the computer program (housed in a computer) that serves requested HTML pages or files. A Web client is the requesting program associated with the user. The Web browser in your computer is a client that requests HTML files from Web servers.
72
Verklarende woordenlijst
B.28 SSI A server-side include (SSI) is a variable value (for example, a file Last modified date) that a server can include in an HTML file before it sends it to the requestor. If you’re creating a Web page, you can insert an include statement in the HTML file that looks like this: and the server will obtain the last-modified date for the file and insert it before the HTML file is sent to requestors. LAST_MODIFIED is one of several environment variables that an operating system can keep track of and that can be accessible to a server program. The server administrator can make these environment variables usable when the system is set up. A Web file that contains server-side include statements (such as the echo statement above) is usually defined by the administrator to be a file with an .shtml suffix. You can think of a server-side include as a limited form of Common Gateway Interface (CGI) application. In fact, the CGI is not used. The server simply searches the server-side include file for CGI environment variables, and inserts the variable information in the places in the file where the include statements have been inserted. When creating a Web site, a good idea is to ask your server administrator which environment variables can be used and whether the administrator can arrange to set the server up so that these can be handled. The administrator may be able to help you add the appropriate include statements to your HTML file.
B.29 TCP/IP TCP/IP (Transmission Control Protocol/Internet Protocol) is the basic communication language or protocol of the Internet. It can also be used as a communications protocol in the private networks called intranets and in extranets. When you are set up with direct access to the Internet, your computer is provided with a copy of the TCP/IP program just as every other computer that you may send messages to or get information from also has a copy of TCP/IP. TCP/IP is a two-layered program. The higher layer, Transmission Control Protocol, manages the assembling of a message or file into smaller packets that are transmitted over the Internet and received by a TCP layer that reassembles the packets into the original message. The lower layer, Internet Protocol, handles the address part of each packet so that it gets to the right destination. Each gateway
B.30 tunnel
73
computer on the network checks this address to see where to forward the message. Even though some packets from the same message are routed differently than others, they’ll be reassembled at the destination. TCP/IP uses the client/server model of communication in which a computer user (a client) requests and is provided a service (such as sending a Web page) by another computer (a server) in the network. TCP/IP communication is primarily point-to-point, meaning each communication is from one point (or host computer) in the network to another point or host computer. TCP/IP and the higher-level applications that use it are collectively said to be connectionless because each client request is considered a new request unrelated to any previous one (unlike ordinary phone conversations that require a dedicated connection for the call duration). Being connectionless frees network paths so that everyone can use them continuously. (Note that the TCP layer itself is not connectionless as far as any one message is concerned. Its connection remains in place until all packets in a message have been received.) Many Internet users are familiar with the even higher layer application protocols that use TCP/IP to get to the Internet. These include the World Wide Web’s Hypertext Transfer Protocol (HTTP), the File Transfer Protocol (FTP), Telnet (Telnet) which lets you logon to remote computers, and the Simple Mail Transfer Protocol (SMTP). These and other protocols are often packaged together with TCP/IP as a suite. Personal computer users usually get to the Internet through the Serial Line Internet Protocol (SLIP) or the Point-to-Point Protocol (PPP). These protocols encapsulate the IP packets so that they can be sent over a dial-up phone connection to an access provider’s modem. Protocols related to TCP/IP include the User Datagram Protocol (UDP), which is used instead of TCP for special purposes. Other protocols are used by network host computers for exchanging router information. These include the Internet Control Message Protocol (ICMP), the Interior Gateway Protocol (IGP), the Exterior Gateway Protocol (EGP), and the Border Gateway Protocol (BGP).
B.30 tunnel Relative to the Internet, tunneling is using the Internet as part of a private secure network. The tunnel is the particular path that a given company message or file might travel through the Internet. A protocol or set of communication rules called Point-to-Point Tunneling Protocol (PPTP) has been proposed that would make it possible to create a virtual private network through tunnels over the Internet. This would mean that companies would no longer need their own leased lines for wide-area communication but could
74
Verklarende woordenlijst
securely use the public networks. PPTP, sponsored by Microsoft and other companies, and Layer 2 Forwarding, proposed by Cisco Systems, are among the main proposals for a new Internet Engineering Task Force (IETF) standard. With PPTP, which is an extension of the Internet’s Point-to-Point Protocol (PPP), any user of a PC with PPP client support will be able to use an independent service provider (ISP) to connect securely to a server elsewhere in the user’s company.
B.31 UNIX UNIX is an operating system that originated at Bell Labs in 1969 as an interactive time-sharing system. Ken Thompson and Dennis Ritchie are considered the inventors of UNIX. The name (pronounced YEW-nihks) was a pun based on an earlier system, Multics. In 1974, UNIX became the first operating system written in the C language. UNIX has evolved as a kind of large freeware product, with many extensions and new ideas provided in a variety of versions of UNIX by different companies, universities, and individuals. Partly because it was not a proprietary operating system owned by any one of the leading computer companies and partly because it is written in a standard language and embraced many popular ideas, UNIX became the first open or standard operating system. A composite of the C language and shell (user command) interfaces from different versions of UNIX were standardized under the auspices of the IEEE as the Portable Operating System Interface (POSIX). In turn, the POSIX interfaces were specified in the X/Open Programming Guide 4.2 (also known as the Single UNIX Specification and UNIX 95). The official trademarked UNIX is now owned by the The Open Group, an industry standards organization, which certifies and brands UNIX implementations. UNIX operating systems are used in widely-sold workstation products from Sun Microsystems, Silicon Graphics, IBM, and a number of other companies. The UNIX environment and the client/server program model were important elements in the development of the Internet and the reshaping of computing as centered in networks rather than in individual computers. Linux, a UNIX derivative distributed as free software, is increasing in popularity as an alternative to proprietary operating systems.
B.32 URL A URL (Uniform Resource Locator) (pronounced YU-AHR-EHL or, in some quarters, UHRL) is the address of a file (resource) accessible on the Internet. The
B.33 VIM
75
type of resource depends on the Internet application protocol. Using the World Wide Web’s protocol, the Hypertext Transfer Protocol (HTTP) , the resource can be an HTML page (like the one you’re reading), an image file, a program such as a CGI application or Java applet, or any other file supported by HTTP. The URL contains the name of the protocol required to access the resource, a domain name that identifies a specific computer on the Internet, and a hierarchical description of a file location on the computer. On the Web (which uses the Hypertext Transfer Protocol), an example of a URL is: http://www.mhrcc.org/kingston which describes a Web page to be accessed with an HTTP (Web browser) application that is located on a computer named www.mhrcc.org. The specific file is in the directory named /kingston and is the default page in that directory (which, on this computer, happens to be named index.html). A URL is a type of URI (Uniform Resource Identifier).
B.33 VIM VIM is “Vi Improved” - a BIG improvement of the UNIX standard text editor Vi. VIM adds unlimited undo, syntax coloring, split windows, visual selection, gui support, and much more. VIM currently runs on the following operating systems: AmigaOS, AtariMiNT, BeOS, DOS, MacOS, OS/2, RiscOS, VMS, WindowsCE/95/98/NT; and, of course, on UNIX in a lot of flavours: A/UX, AIX, BSDI, Convex, DYNIX/ptx, DG/UX, DEC Unix, FreeBSD, HPUX, Irix, Linux [Debian, RedHat, SuSE], MacOSX, NetBSD, NEXTSTEP, OSF, QNX, SCO, Sinix, Solaris, SunOS, SUPER-UX, Ultrix, Unixware, Unisys. And the best of all: VIM is FREE!
76
Verklarende woordenlijst
78
Broncode
Bijlage C Broncode C.1 /index.cgi C.2 /syntax.cgi C.3 /cmds/ C.3.1 /cmds/add.pl C.3.2 /cmds/browse.pl C.3.3 /cmds/debug.pl C.3.4 /cmds/delete.pl C.3.5 /cmds/edit.pl C.3.6 /cmds/fsearch.pl C.3.7 /cmds/inspect.pl C.3.8 /cmds/menu.pl C.3.9 /cmds/order.pl C.3.10
/cmds/surf.pl
C.3.11
/cmds/tsearch.pl
C.3.12
/cmds/undelete.pl
C.3.13
/cmds/view.pl
C.4 /conf/ C.4.1 /conf/1.tks C.4.2 /conf/3.tks C.4.3 /conf/conf.lat
C.5 /modules/ C.5.1 /modules/cookie.pm
Bibliografie [1] JavaScript Guide. & What’s New in JavaScript for Navigator 4.0. Netscape Communications Corporation, 1995-1997. [2] Schwartz, R. L., Christiansen, T., Learning Perl, 2nd Edition. (Aka. The Camel Book) O’Reilly & Associates, July 1997. [3] Srinivasan, S., Advanced Perl Programming. O’Reilly & Associates, August 1997. [4] Gundavaram, S., CGI Programming with Perl, 1st Edition. O’Reilly & Associates, July 1997. [5] December, J., Ginsburg, M., HTML and CGI Unleashed. Sams.net Publishing, 1995. [6] Lie, H. W., Bos, B., Cascading Style Sheets, level 1. December 1996. http://www.w3.org/TR/REC-CSS1-961217/ [7] Bos, B., Lie, H. W., Lilley, C., Jacobs, I., Cascading Style Sheets, level 2. November 1997. http://www.w3.org/TR/WD-CSS2/ [8] Bos, B., Raggett, D., Lie, H., HTML and Style Sheets. March 1997. http://www.w3.org/TR/WD-style/ [9] Raggett, D., Le Hors, A., Jacobs, I., HTML 4.0 Specification (Working Draft). April 1998. http://www.w3.org/TR/REC-html40/ [10] Information Processing – Text and Office Systems – Standard Generalized Markup Language (SGML). ISO 8879:1986. http://www.iso.ch/cate/d16387.html [11] List of registered content types (MIME ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/
types).
80
BIBLIOGRAFIE [12] Fielding, R., Relative Uniform Resource Locators. June 1995. http://ds.internic.net/rfc/rfc1808.txt [13] Berners-Lee, T., Fielding, R., Frystyk, H., RFC 1945: Hypertext Transfer Protocol – HTTP/1.0. RFC 1945, May 1996. http://ds.internic.net/rfc/rfc1945.txt [14] Yergeau, F., UTF-8, a transformation format of Unicode and ISO 10646. October 1996. http://ds.internic.net/rfc/rfc2044.txt [15] Fielding, R., Gettys, J., Mogul, J., Frystyk H., Berners-Lee, T., Hypertext Transfer Protocol – HTTP/1.1. RFC 2068, January 1997. http://ds.internic.net/rfc/rfc2068.txt [16] The ultimate “What Is?” pages. http://www.whatis.com/ [17] Guidelines for designing http://www.w3.org/WAI/
accessible
HTML
documents.
Index LATEX, 9 AIX, 14, 61 Apache, 16, 28, 61 API, 29, 34, 62, 70 ASP, 29, 62, 68 basisontwerp, 29 bestaande systemen, 27 bibliografie, 83 broncode, 82 browser, 16, 63, 64, 74 CGI, 26, 28, 46, 62, 63, 72, 76 client, 64 cmds, 82 add.pl, 31, 82 browse.pl, 31, 82 debug.pl, 31, 82 delete.pl, 31, 82 edit.pl, 31, 82 fsearch.pl, 32, 82 inspect.pl, 32, 82 menu.pl, 32, 82 order.pl, 32, 82 surf.pl, 32, 82 tsearch.pl, 32, 82 undelete.pl, 32, 82 view.pl, 32, 82 concept, 29 conf, 82 1.tks, 82 3.tks, 82 conf.lat, 82
cookie, 45, 46 CSS, 19, 64 DB2, 25, 64 DBI, 28, 43 definitiestudie, 25 directorystruktuur, 31 e-mail, 12, 44, 65 embedded Perl, 52, 55 embedded scripttaal, 27 filebeschrijving, 31 commando-scripts, 31 configuratie, 32 data, 33 libraries, 33 modules, 33 pagina’s, 34 firewall, 15, 65 fork(), 28, 65 globale oplossing, 29 GPL, 26 HTML, 9, 16, 19, 29, 33, 62, 66, 73 HTTP, 26, 63, 66, 77 IBM Belgium, 6 IBM Financial Services, 6 IBM Global Services, 8 profiel, 6 ICMP, 18, 67, 77 index.cgi, 82 inleiding, 5
82 IP, 15, 67 JavaScript, 63, 68 ksh, 14 Linux, 9, 69, 78 Lotus Notes, 13 mod_perl, 72 mod_php, 73 modules, 82 cookie.pm, 33, 82 daglib.pm, 33, 82 db.pm, 34, 82 db_dbi.pm, 34, 82 db_txt.pm, 34, 82 db_xbase.pm, 34, 82 order.pm, 34, 82 netcat, 14, 69 netwerkcontrole, 11 analyse, 12 beschrijving, 16 broncode, 21 inleiding, 11 oplossing, 16 probleemstelling, 11 realisatie, 13 NIC, 14, 70 ODBC, 27, 64, 70 Open Source, 26, 71 open standaarden, 26 ownership, 36, 56 peer-review, 27 Perl, 28, 68, 72 PHP, 27, 72 ping, 73 routing, 15 script, 28
INDEX server, 12, 29, 74, 75 service, 12 SMS, 13 SSI, 29, 75 TCP/IP, 14, 76 The Gimp, 9 tunnel, 15, 77 UNIX, 14, 61, 68, 78 uptime, 12 URL, 20, 35, 67, 79 VIM, 9, 79 Voice Call, 13 voorbeelden, 59 databaseconversie, 60 shoppingmall, 59 website, 59 vooropgestelde eisen, 26 web-farming, 8 web-hosting, 8 webserver, 28