Les 2
PHP installeren en je eerste script
PHP draaien op de commandline en met de ingebouwde webserver.
🎯 Na deze les kun je
- PHP-scripts uitvoeren op de commandline
- de ingebouwde webserver starten
- PHP en HTML combineren
In de hoofdcursus schreef je Python-scripts en draaide je ze met python bestand.py. PHP werkt op dezelfde manier, met één groot verschil: PHP is gemaakt om webpagina's te bouwen. Een PHP-script draait meestal op een webserver en de uitvoer is HTML die naar de browser gaat.
In deze les installeer je PHP, draai je een script in de terminal en start je de ingebouwde webserver, zodat je je eerste dynamische pagina in de browser ziet.
PHP installeren en controleren
Installeer PHP 8.2 of nieuwer:
| Systeem | Commando |
|---|---|
| Ubuntu/Debian | sudo apt install php-cli php-sqlite3 php-mbstring |
| macOS (Homebrew) | brew install php |
| Windows | download de Thread Safe zip van windows.php.net, of gebruik WSL met de Ubuntu-regel |
Controleer daarna de versie:
php -v
PHP 8.3.6 (cli) (built: ...)
cli betekent command line interface: deze PHP draait in je terminal. Werk je in het lab, dan staat PHP al klaar.
Je eerste script
Maak een bestand hallo.php:
<?php
echo "Hallo, wereld!\n";
En draai het:
php hallo.php
Hallo, wereld!
Drie dingen vallen op als je uit Python komt:
- Elk PHP-bestand begint met
<?php. Alles daarvoor is gewone tekst die PHP ongewijzigd doorgeeft. echozet tekst in de uitvoer, zoalsprintin Python. Het is een taalconstructie, dus haakjes zijn niet nodig.- Elke opdracht eindigt met een puntkomma
;.
\n is een nieuwe regel. In de terminal heb je die nodig; in HTML gebruik je later tags.
Een bestand dat alleen PHP bevat, sluit je niet af met ?>. Zo voorkom je dat een verdwaalde spatie of lege regel na ?> per ongeluk in de uitvoer komt.
De ingebouwde webserver
PHP heeft een kleine webserver voor ontwikkelen. Start hem in de map met je bestanden:
php -S localhost:8000
[Tue Oct 13 10:00:00 2026] PHP 8.3.6 Development Server (http://localhost:8000) started
Open nu http://localhost:8000/hallo.php in je browser. Je ziet Hallo, wereld!. Bij elk verzoek voert de server het script opnieuw uit; je hoeft dus niets te herstarten als je de code aanpast. Stoppen doe je met Ctrl+C.
Wat gebeurt er precies?
- De browser vraagt
/hallo.phpop. - De server ziet
.phpen laat PHP het bestand uitvoeren. - Alles wat het script uitvoert (
echo), gaat als antwoord terug naar de browser.
De browser ziet dus nooit je PHP-code, alleen het resultaat.
php -S is alleen bedoeld voor ontwikkelen op je eigen computer. Voor een echte website gebruik je nginx of Apache met PHP-FPM; dat komt in les 23.
PHP en HTML mengen
Omdat alles buiten <?php ... ?> letterlijk wordt doorgegeven, kun je PHP midden in HTML zetten. Maak index.php:
<!doctype html>
<html lang="nl">
<head>
<meta charset="utf-8">
<title>Mijn eerste PHP-pagina</title>
</head>
<body>
<h1>Welkom!</h1>
<p>Het is vandaag <?= date('d-m-Y') ?>.</p>
<p>Het is nu <?php echo date('H:i'); ?> uur.</p>
</body>
</html>
Voorspel eerst: wat staat er in de broncode die de browser ontvangt (rechtermuisknop → Paginabron bekijken)?
Antwoord: gewone HTML, met op de plek van de PHP-stukjes de datum en tijd, bijvoorbeeld <p>Het is vandaag 13-10-2026.</p>. Van <?= en date() is niets meer te zien.
<?= ... ?> is de korte vorm van <?php echo ... ?>. Die gebruik je veel in templates.
Foutmeldingen zichtbaar maken
Tijdens het leren wil je fouten zien. Vergeet je een puntkomma:
<?php
echo "Hallo"
echo "wereld";
PHP Parse error: syntax error, unexpected token "echo", expecting "," or ";" in hallo.php on line 3
Lees de melding zoals in de hoofdcursus: wat (syntax error, puntkomma verwacht), waar (regel 3). Let op: de fout zit vaak op de regel ervóór, want PHP merkt pas bij de volgende echo dat er iets mist.
Zie je in de browser een lege, witte pagina? Dan staan fouten waarschijnlijk uit. Zet ze bovenaan je script aan, alleen tijdens ontwikkelen:
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
Met php -S staan ze meestal al aan, omdat de CLI-instellingen gebruikt worden. Op een productieserver horen ze uit te staan (les 15).
Typische fouten
| Melding of symptoom | Oorzaak |
|---|---|
| Je ziet je PHP-code letterlijk in de browser | Je opende het bestand direct (file://...) in plaats van via http://localhost:8000 |
syntax error, unexpected ... |
Vergeten puntkomma of aanhalingsteken, vaak op de regel ervoor |
Failed to listen on localhost:8000 (Address already in use) |
Er draait al een server; stop die of kies localhost:8001 |
Oefeningen
Oefening 1. Schrijf naam.php dat in de terminal twee regels toont: je naam en je woonplaats.
Modelantwoord oefening 1
<?php
echo "Sam de Vries\n";
echo "Utrecht\n";
Oefening 2. Pas index.php aan zodat er ook het jaartal in een <footer> staat: © 2026. Tip: date('Y').
Modelantwoord oefening 2
<footer>© <?= date('Y') ?></footer>
© is de HTML-code voor ©. Het jaartal komt uit PHP, dus volgend jaar klopt het vanzelf.
Oefening 3. Wat toont de browser bij deze pagina, en waarom?
<p>Eén</p>
<?php echo "<p>Twee</p>"; ?>
<p>Drie</p>
Modelantwoord oefening 3
Drie alinea's: Eén, Twee, Drie. De eerste en laatste regel gaan letterlijk mee, de middelste maakt PHP aan. Voor de browser is er geen verschil: hij ontvangt alleen HTML.
Lab: hallo-wereldpagina
- Maak in je labmap
index.phpmet een<h1>Hallo, wereld! en een alinea met de datum van vandaag (date('d-m-Y')). - Start
php -S localhost:8000en controleer de pagina in de browser. - Bekijk de paginabron: staat er nog PHP-code in? (Dat hoort niet.)
beetje check php-les2
Samenvatting
- PHP-bestanden beginnen met
<?php; opdrachten eindigen met;. php bestand.phpdraait een script in de terminal;php -S localhost:8000start een ontwikkelserver.- Alles buiten
<?php ... ?>gaat letterlijk naar de browser.<?= ... ?>zet een waarde in de HTML. - De browser ziet alleen de uitvoer, nooit je PHP-code.
- Zet tijdens ontwikkelen foutmeldingen aan; op productie uit.
In de volgende les kijk je naar variabelen en typen in PHP, en zie je waar die verschillen van Python.
Lab
Hallo-wereldpagina
💻 Dit lab doe je op je eigen computer met Docker. Start de lab-container met (geeft de opdracht een eigen startcommando, gebruik dan dat):
$ docker run -it --rm registry.wizg.it/webhosting/beetje-labs:php-les2
Klaar? Controleer je werk met:
$ beetje check php-les2