Innledning
Du skal nå lære hvordan du installerer og konfigurerer programvaren du trenger for å lage dynamiske nettsteder:
Alle disse tre komponentene er fri programvare, hvilket betyr at de er fritt tilgjengelige med full kildekode. For oss betyr det blant annet at vi kan laste dem ned og bruke de uten å betale for det.
Dette er tre separate komponenter, men de skal jobbe sammen for å oppnå det vi ønsker. Det er derfor viktig å installere og konfigurere de riktig for at det skal fungere.
Dette er heldigvis enkelt å få til, fordi det finnes ferdige programpakker som inkluderer alle tre uten at vi behøver å gjøre så mye mer enn å trykke "install". Før vi ser på dette skal vi ta for oss hvordan Apache, PHP og MySQL henger sammen, slik at det blir lettere å forstå hvordan de jobber.
Samspillet Apache - PHP - MySQL
Hvordan henger de tre programvarekomponentene Apache, PHP og MySQL sammen? På figuren ser vi hva som skjer når en person besøker en webside med PHP-kode som henter/skriver data fra/til en database.

Følgende hendelser skjer når brukeren besøker websiden (vi ser bort fra at nettleseren må bruke navnesystemet DNS for å finne IP-adressen til test.com):
- Brukeren ber nettleseren besøke en URL, for eksempel http://test.com/test.php
- Nettleseren sender en HTTP-forespørsel om å få tilsendt /test.php til test.com
- Apache ser av filetternavnet .php at forespørselen gjelder en fil som inneholder PHP-kode og ber PHP-tolkeren behandle den
- PHP-tolkeren ber operativsystemet om få lese den aktuelle fila
- Operativsystemet returnerer innholdet av fila til PHP-tolkeren
- PHP-tolkeren kjører PHP-koden. PHP-koden inneholder i dette tilfellet kode for å laste data fra en database, så PHP-tolkeren sender en forespørsel til MySQL om disse dataene
- MySQL behandler forespørselen og ber operativsystemet om å hente ut aktuelle datablokker fra datalageret (selve databasen er lagret som en eller flere filer i filsystemet)
- Operativsystemet returnerer aktuelle datablokker til MySQL
- MySQL returnerer de etterspurte dataene til PHP-tolkeren
- PHP-tolkeren setter sammen en komplett webside (HTML) basert på resultatet av koden som er kjørt og sender denne til Apache
- Apache sender et HTTP-svar tilbake til nettleseren med den komplette websiden (HTML)
- Nettleseren viser websiden til brukeren
Kan vi kjøre all programvaren på samme maskin?
Som vi så av eksemplet inngår fire parter i samspillet: nettleser, Apache, PHP og MySQL. Kan disse kjøre på samme maskin, må de kjøre på ulike maskiner, eller...?
Følgende gjelder:
- Nettleseren og Apache kommuniserer ved hjelp av den TCP/IP-baserte protokollen HTTP. Dette betyr at de kan kommunisere over Internett og følgelig ligge på ulike maskiner. Men det er også fint mulig å kjøre de på samme maskin, da vi kan godt bruke TCP/IP til å kommunisere internt på samme maskin.
- Apache og PHP er integrert med hverandre -- PHP er en utvidelse av Apache. PHP er altså ikke en egen prosess, men et programvarebibliotek som Apache benytter. Apache og PHP må derfor kjøre på samme maskin.
- PHP og MySQL kan kommunisere med hverandre på flere måter. PHP er en del av Apache-prosessen, mens MySQL er en egen prosess. PHP kan kommunisere med MySQL prosessen enten direkte prosess-til-prosess på samme maskin, eller via MySQL sin egen protokoll over TCP/IP. Brukes TCP/IP kan MySQL enten ligge på samme maskin eller ligge på en annen maskin.
Som vi forstår er det ingenting i veien for at alle komponentene (nettleser, Apache, PHP og MySQL) kan kjøre på samme maskin, og dette er veldig nyttig for oss som jobber med webutvikling.
Dersom vi skal splitte opp komponentene maksimalt, kan nettleseren kjøre på én maskin, Apache/PHP på en annen og MySQL på en tredje. Dette er vanlig i større løsninger. En mellomløsning er å ha Apache/PHP og MySQL på samme maskin, noe som er vanlig i mindre løsninger.
Installasjon av LAMP, WAMP og MAMP
Vi nevnte innledningsvis at Apache, PHP og MySQL kan installeres som en ferdig pakke, hvor vi får de ferdig konfigurert til å snakke sammen. Dette skyldes at denne kombinasjonen av programvare er svært vanlig. Den er faktisk så vanlig at den har gitt navn til et sett begreper: LAMP (Linux, Apache, MySQL, PHP), WAMP (Windows, ...) og MAMP (Mac, ...).
For alle operativsystemene finnes det ferdige pakker som installerer hele kombinasjonen for oss og konfigurerer programvaren så de snakker sammen. Foruten de tre kjernekomponentene Apache, PHP og MySQL inkluderer mange av pakkene også andre ting, og spesielt interessant å merke seg er databaseadministrasjonsverktøyet phpMyAdmin. Dette verkøyet er nyttig når du senere i faget skal jobbe med databaser.
Dersom du ønsker å sette sammen kombinasjonen selv kan du laste ned og konfigurere komponentene på egen hånd. Det er slett ikke så vanskelig som du kanskje tror, og det finnes mye hjelp på Internett. I Webteknikker legger vi imidlertid opp til at du bruker en ferdig pakke.
Vi skal se på installasjon av ferdigpakker for ulike operativsystemer.
WAMP (Windows)
Det finnes mange ulike ferdigpakker av AMP for Windows. Vi anbefaler at du bruker WampServer, da vi har god erfaring med denne. Last ned, start installasjon og følg installasjonsveiviseren.
Dersom du ønsker en mer omfattende ferdigpakke enn WampServer anbefaler vi at du ser på pakken XAMPP. Denne inkluderer flere verktøy enn det WampServer gjør.
MAMP (Mac)
På Mac kan du installere pakken MAMP.
LAMP (LAMP)
Dersom du bruker Linux er du antageligvis kjent med at programvareinstallasjon her vanligvis innebærer å bruke ferdige programpakker laget for den distribusjonen av Linux du kjører. Dette er også den beste metoden for å installere AMP-pakken.
For å være sikker på at du får det til å fungere kan du søke på Internett etter en oppskrift for akkurat din distribusjon.
Eksempel: Søk etter ubuntu 10.10 lamp på Google. Se enkel installasjon av LAMP i Ubuntu.
Dersom du ønsker å installere AMP uten å bruke pakker for din distribusjon anbefaler vi at du ser på pakken XAMPP. Det kan for eksempel være aktuelt dersom det følger med svært gamle versjoner av AMP-programmene i distribusjonen du kjører.
Teste AMP
Når du har installert programvaren er tiden inne for å teste om den fungerer som den skal. Start en nettleser på maskina og tast inn følgende adresse: localhost
Du skal nå få opp en webside som ønsker deg velkommen til din webtjener. Dersom du har installert WampServer ser det ut som på bildet nedenfor.

Apache vil ikke starte
Dersom du
- ser at du ikke får startet Apache
- eller får opp en annen webside enn du forventet (for eksempel velkomstbildet til Microsoft Internet Information Services (IIS)
...skyldes dette at en annen tjeneste på maskina allerede lytter på samme TCP-port som Apache forsøker å bruke.
Synes du dette hørtes uforståelig ut? Vi skal se hva som menes med dette. Når du kjører en Internett-tjeneste (TCP/IP-tjeneste) på maskinen din, åpner du en dør inn til maskinen. Disse dørene er nummererte, og det er mulig å tilby mange tjenester på samme maskin ved å la de ha ulike dør-numre, eller TCP-porter for å være presis.
Mange tjenester har definert standard TCP-port, for eksempel er port 80 standard for webtjenere. Når Apache starter vil den forsøke å ta i bruk TCP-port 80. Dersom en annen tjeneste, typisk en annen webtjener, allerede benytter port 80, vil Apache ikke få tilgang til denne ressursen og dermed avsluttes. Det kan for eksempel være Internet Information Services (IIS) i Windows.
Et annet program bruker port 80, hva gjør jeg?
Dersom et annet program, typisk en annen webtjener, allerede bruker port 80 har du følgende valgmuligheter:
- Stoppe det andre programmet, slik at porten frigjøres. Husk å sørge for at programmet ikke starter igjen neste gang maskinen startes.
- Konfigurere det andre programmet til å bruke en annen port
- Konfigurere Apache til å bruke en annen port
Det enkleste er dersom du kan gjøre det første. Dersom du ønsker å benytte deg av alternativ to, må du se i dette programmets dokumentasjon for hvordan dette utføres. Husk at endringen må aktiveres etter den er utført, i mange programmer betyr dette at programmet må stoppes og startes på nytt.
Dersom du ønsker å benytte alternativ tre må du inn i konfigurasjonsfilen til Apache og endre det riktige konfigurasjonsdirektivet, og så starte Apache. Direktivet ligger vanligvis i fila httpd.conf, se etter "Listen 80", og endre dette til noe annet.
Hvordan sjekke hvem som bruker TCP-port 80 i Windows
For å sjekke hvem som bruker TCP-port 80 i Windows kan du finne funksjonen Test Port 80 i menyen til WampServer. Menyen får du opp ved å klikke på Wamp-ikonet i høyre hjørne av oppgavelinjen, slik vi ser på bildet nedenfor.

Hvordan stoppe IIS
Dersom du ønsker å stoppe IIS går du inn i Kontrollpanel => Administrative verktøy og starter IIS-administrasjonsprogrammet (har litt ulike navn i ulike Windows-versjoner). Naviger så frem til Områder => Default Web Site, slik som på skjermbildet nedenfor. På høyre kant kan du nå velge Stopp.

Dersom du ønsker å hindre IIS fra å starte neste gang maskinen starter, går du inn på Avanserte Innstillinger (jmfr. figuren ovenfor) og velger at IIS ikke skal starte automatisk, slik vi ser på figuren nedenfor.

Hvordan sjekke hvem som bruker port 80 i Linux
I Linux kan du sjekke hvem som bruker port 80 på flere måter, for eksempel ved å bruke programmet lsof (LiSt Open Files). Programmet må kjøre som root. Dersom du ikke har installert lsof må dette gjøres på forhånd, for eksempel slik i Debian og Ubuntu:
root@minmaskin:~# apt-get install lsof
Når programmet er installert kan du kjøre følgende:
root@minmaskin:~# lsof -i :80
Dette gir en utlisting som nedenfor, hvor vi ser navnet på programmet som lytter på TCP-port 80 (i tiltfellet nedenfor er det programmet apache2):
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME apache2 10437 root 3u IPv6 22890556 TCP *:www (LISTEN) apache2 10438 www-data 3u IPv6 22890556 TCP *:www (LISTEN) apache2 10439 www-data 3u IPv6 22890556 TCP *:www (LISTEN) apache2 10440 www-data 3u IPv6 22890556 TCP *:www (LISTEN) apache2 10441 www-data 3u IPv6 22890556 TCP *:www (LISTEN) apache2 10442 www-data 3u IPv6 22890556 TCP *:www (LISTEN) apache2 25966 www-data 3u IPv6 22890556 TCP *:www (LISTEN) apache2 25968 www-data 3u IPv6 22890556 TCP *:www (LISTEN)
Grunnleggende konfigurasjon av Apache
For å endre konfigurasjonen til Apache må du gjøre endringer i den aktuelle konfigurasjonsfilen. I enkle Apache-installasjoner er all konfigurasjon samlet i httpd.conf, men du skal være klar over at det går an å splitte den i flere filer.
Når du gjør endringer i konfigurasjonsfilene må Apache gjøres oppmerksom på dette. Den enkleste måten å aktivere endringene på er å restarte Apache.
Hvor lagres websidene?
Apache lagrer websidene på et definert sted på harddisken. Dette bestemmes av direktivet DocumentRoot i httpd.conf. Det kan for eksempel se slik ut:
DocumentRoot "c:/wamp/www/"
Dette betyr at om du oppretter fila C:\wamp\www\test.html vil dette tilsvare http://localhost/test.html
Du kan også opprette kataloger under dokumentrota. La oss si at du har lagret fila C:\wamp\www\minkatalog\test.html vil dette tilsvare http://localhost/minkatalog/test.html
Aliaser
Dersom du ønsker å ha dokumentrota ett sted, men ha en adresse som peker til et helt annet sted på harddisken din kan du bruke direktivet Alias. Eksempel:
Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.2.0.1/"
Dersom du oppretter fila C:\wamp\apps\phpmyadmin3.2.0.1\test.html vil dette tilsvare http://localhost/phpmyadmin/test.html
Hvilken TCP-port lytter Apache på
Hvilken TCP-port Apache lytter på bestemmes av direktivet Listen. Eksempel:
Listen 80
Logger
Apache opererer med to logger, aksesslogg (access log) og feillogg (error log). I aksessloggen vises alle forespørsler som nettlesere har sendt til webtjeneren. Dette ser slik ut:
127.0.0.1 - - [29/Aug/2010:14:53:08 +0200] "GET / HTTP/1.1" 200 4063 127.0.0.1 - - [29/Aug/2010:14:53:08 +0200] "GET /index.php?img=gifLogo HTTP/1.1" 200 5172 127.0.0.1 - - [29/Aug/2010:14:53:08 +0200] "GET /index.php?img=favicon HTTP/1.1" 200 13262 127.0.0.1 - - [29/Aug/2010:14:53:08 +0200] "GET /index.php?img=favicon HTTP/1.1" 200 13262 127.0.0.1 - - [29/Aug/2010:14:53:09 +0200] "GET /index.php?img=pngWrench HTTP/1.1" 200 741 127.0.0.1 - - [29/Aug/2010:14:53:09 +0200] "GET /index.php?img=pngPlugin HTTP/1.1" 200 548
Lokasjonen til aksessloggen styres av direktivet CustomLog og ser for eksempel slik ut:
CustomLog "c:/wamp/logs/access.log" common
Feilloggen har et litt misvisende navn, og inneholder foruten feilmeldinger også andre loggdata som Apache har behov for å skrive. Loggen ser slik ut:
[Sun Aug 29 15:13:52 2010] [notice] Apache/2.2.16 (Win32) PHP/5.3.3 configured -- resuming normal operations [Sun Aug 29 15:13:52 2010] [notice] Server built: Jul 30 2010 16:15:37 [Sun Aug 29 15:13:52 2010] [notice] Parent: Created child process 3068 [Sun Aug 29 15:13:52 2010] [notice] Child 3068: Child process is running [Sun Aug 29 15:13:52 2010] [notice] Child 3068: Acquired the start mutex. [Sun Aug 29 15:13:52 2010] [notice] Child 3068: Starting 64 worker threads. [Sun Aug 29 15:13:52 2010] [notice] Child 3068: Starting thread to listen on port 80. [Sun Aug 29 15:15:35 2010] [error] [client 127.0.0.1] File does not exist: C:/wamp/www/favicon.ico [Sun Aug 29 15:15:35 2010] [error] [client 127.0.0.1] File does not exist: C:/wamp/www/favicon.ico
Lokasjonen til feilloggen styres av direktivet ErrorLog og ser for eksempel slik ut:
ErrorLog "c:/wamp/logs/apache_error.log"
Konfigurasjon av PHP
PHP kan også konfigureres, for eksempel kan du bestemme om PHP skal støtte bruk av MySQL. Konfigurasjon av PHP gjøres i fila php.ini. Vi anbefaler at du ser igjennom fila, som er godt dokumentert, for å sette deg inn i hva du har mulighet til å gjøre av endringer. Endringer gjort i php.ini blir ikke aktivet før du gjør Apache oppmerksom på dette, for eksempel gjennom å restarte Apache.
Vis feilmeldinger i nettleseren
Når du besøker en PHP-webside hvor PHP-scriptet feiler, for eksempel fordi du har skrevet ukorrekt kode, genereres en feilmelding. Standard i mange PHP-installasjoner er at feilmeldingene kun lagres i Apache sin error-logg. På en utviklingstjener er det nyttig om feilmeldingene også kommer opp i nettleservinduet slik at du hurtig ser hva som er galt.
Du kan slå på feilmeldinger i nettleservinduet ved å sette direktivet display_errors i php.ini slik som dette:
display_errors = On