Modul 1 · 1.2
Under motorhjelmen: webserver, PHP og database
Modul 1: Sådan virker WordPress · Læsetid: 8 minutter
Læringsmål: Efter denne lektion kan du trin for trin forklare, hvordan en sideforespørgsel til WordPress bliver til en HTML-side, og hvor en cache afkorter den vej.
Nøglebegreber: webserver (LiteSpeed, Apache, nginx), PHP, MariaDB/MySQL, query, index.php, skabelonhierarki, dynamisk vs. statisk, TTFB
En statisk og en dynamisk side
På et statisk websted ligger hver side som en færdig fil på serveren. Webserveren henter filen og sender den afsted. Det er hurtigt og enkelt, men enhver ændring betyder en ny fil.
WordPress er dynamisk: siden findes først i det øjeblik, nogen beder om den. Der findes ingen fil contact.html. Der er en tekst i databasen, et tema med skabeloner og en bunke PHP-kode, der samler de to dele. Det giver bekvemmelighed (du retter teksten i din browser), men det koster beregning ved hvert besøg. Forstår du det regnearbejde, forstår du senere også, hvorfor et websted er langsomt, hvorfor caching gør så stor en forskel, og hvorfor en PHP-opgradering kan gå galt.
Rejsen for en sideforespørgsel
Forestil dig, at en besøgende åbner https://example.com/contact/. Dette sker:
- DNS: browseren slår IP-adressen op for
example.com(se DNS-kurset). Den opretter en sikker forbindelse til den adresse. - Webserver: på serveren kører en webserver, for eksempel LiteSpeed, Apache eller nginx. Den modtager forespørgslen. Findes der en rigtig fil eller mappe med det navn (et billede, et stylesheet), sender den det direkte. Hvis ikke, gælder reglen fra
.htaccess(hos LiteSpeed og Apache) eller fra nginx-konfigurationen: "giv alt, der ikke findes, tilindex.php". - PHP:
index.phper en PHP-fil. Webserveren lader den køre af PHP, det programmeringssprog WordPress er skrevet i. PHP indlæser førstwp-config.php(indstillingerne, med databaseoplysningerne), derefter resten af WordPress, så alle aktive plugins og det aktive tema. - Database: WordPress undersøger, hvilket indhold der hører til
/contact/, og stiller databasen (MariaDB eller MySQL) spørgsmål: hvilken side har slug'encontact, hvad er webstedets indstillinger, hvilken menu hører til? Et sådant spørgsmål kaldes en query. En enkel side koster hurtigt snesevis af queries; med plugins kan det blive hundredvis. - Tema: WordPress vælger, hvilken skabelon fra temaet der formaterer siden. Det sker efter skabelonhierarkiet: for en side med slug'en
contactleder WordPress først efter en skabelonpage-contact, derefterpage-<id>(sidens nummer), såpage, dereftersingularog til sidstindex. Den første, der findes, vinder. - HTML tilbage: resultatet er en HTML-side, som PHP giver til webserveren, og webserveren giver videre til browseren.
- Browseren læser HTML'en og henter derefter stylesheets, scripts, skrifttyper og billeder. Det er almindelige filer, så de kommer direkte fra webserveren (eller fra en cache).
Mellem trin 2 og trin 6 ligger den tid, serveren bruger på at danne siden. Det ser du som TTFB (time to first byte): tiden mellem forespørgslen og den første byte af svaret. På et velindrettet websted ligger den godt under et sekund. I modul 6 måler du det selv.
Hvorfor hver plugin tæller
I trin 3 indlæses alle aktive plugins, ved hver forespørgsel. Også selvom pluginnen ikke gør noget på denne side. En plugin til et fotogalleri indlæses altså også, når nogen åbner din kontaktside. Hver plugin kan lave ekstra queries, indlæse ekstra kode og tilføje ekstra scripts til siden.
Det forklarer to ting, du oftere støder på i dette kursus:
- Færre plugins er normalt hurtigere. Ikke fordi antallet i sig selv betyder noget, men fordi hver plugin kan udføre arbejde ved hver forespørgsel.
- Én defekt plugin kan lukke hele websted ned. Går noget galt i trin 3 (for eksempel en plugin, der ikke virker med den nye PHP-version), når PHP aldrig frem til trin 6. Den besøgende får en hvid side eller meddelelsen "Der er opstået en kritisk fejl på dette websted" (lektion 5.4).
Hvor PHP og databasen kommer fra
PHP og databasen kører på din hostingudbyders server. Du vælger normalt selv PHP-versionen i kontrolpanelet (hos DirectAdmin hedder det Select PHP version, se lektion 8.4). Databasen oprettes under installationen; installationsprogrammet gør det ofte for dig (lektion 2.2).
Et par ting at huske:
- PHP-version: hver ny PHP-version er hurtigere og mere sikker, men gammel kode kan gå i stykker på den. wordpress.org anbefaler i øjeblikket PHP 8.3 eller nyere (status november 2026).
- Database: wordpress.org anbefaler MariaDB 10.11 eller nyere, eller MySQL 8.0 eller nyere. MariaDB er en afgrening af MySQL; for WordPress gør det ingen forskel.
- Databasen ligger som regel på samme server (
DB_HOSTer sålocalhost). Ved større hosting kan den ligge på en separat server.
Cache: at afkorte vejen
Hvis hundrede besøgende efterspørger den samme kontaktside, danner WordPress den hundrede gange uden cache. Hver gang de samme queries, samme skabelon, samme HTML. En sidecache gemmer HTML'en efter første gang. Den næste besøgende får den gemte version: trin 3 til og med 6 falder væk.
Zonder cache: browser > webserver > PHP > WordPress + plugins > database > thema > HTML
Met cache: browser > webserver > opgeslagen HTMLDet er derfor, caching giver den største hastighedsgevinst (lektion 6.2). Det forklarer også en hyppig forvirring: "jeg har rettet teksten, men ser stadig den gamle version." Så får du en gemt version; efter at have ryddet cachen ser du den nye.
Ikke alt må komme fra en cache. En logget ind administrator, en indkøbskurv eller en kassesidee er forskellig for hver besøgende. En god cacheplugin springer disse over.
Headere: hvad serveren fortæller dig
Hvert svar fra en webserver starter med headere, før HTML'en. Dem ser du ikke på siden, men du kan se dem i din browsers udviklerværktøjer (F12, fanen Netværk, klik på den første forespørgsel). Et eksempel:
HTTP/2 200
server: LiteSpeed
content-type: text/html; charset=UTF-8
link: <https://example.com/wp-json/>; rel="https://api.w.org/"
x-litespeed-cache: hitserverfortæller, hvilken webserver der svarer.linkmedwp-jsonafslører, at det er WordPress.x-litespeed-cache: hitbetyder, at denne side kom fra LiteSpeed-cachen. Andre caches bruger andre navne, somx-cache: HITellercf-cache-status: HIThos Cloudflare.
Du behøver ikke kunne disse regler udenad. Men den, der kan læse dem, kan selv finde mange problemer.
Opsummering
- WordPress danner hver side i det øjeblik, forespørgslen kommer: webserver, PHP, plugins, database, tema, HTML.
- Ved hver forespørgsel indlæses alle aktive plugins; én defekt plugin kan stoppe hele webstedet.
- Skabelonhierarkiet bestemmer, hvilken skabelon fra temaet der formaterer en side.
- En sidecache springer regnearbejdet over ved at give en gemt HTML. Indloggede brugere og indkøbskurve hører ikke hjemme i den cache.
- Headerne i et svar fortæller, hvilken webserver der svarer, og om siden kom fra en cache.
Quiz
Opgave
Opgave A1.2: Læs dit websteds headere. Åbn dit eget websted (eller wordpress.org) med din browsers udviklerværktøjer (F12, fanen Netværk, genindlæs siden, klik på den første forespørgsel). Udfyld, hvilken webserver der står i headeren server (eller "ingen", hvis den ikke er der), og om der er en header, der siger, at siden kom fra en cache (hvilket navn og hvilken værdi). Programmet henter den samme side og sammenligner.
Læs mere
Disse artikler beskriver trinnene i WebOkés kontrolpaneler; i andre kontrolpaneler fungerer det på lignende vis.
- DirectAdmin vejledning 1.9: Begreber forklaret: domæne, underdomæne, pointer, DNS, postkasse og database
- DirectAdmin vejledning 14.1: Sådan vælger du PHP-version (Select PHP version)
- Gratis DNS-kursus 1.4: En DNS-forespørgsels rejse
- Skabelonhierarki (developer.wordpress.org, Engelsk): https://developer.wordpress.org/themes/basics/template-hierarchy/
