Actuele situatie: PHP2Shell. Twee kritieke PHP-kwetsbaarheden (CVSS 9.2) maken schadelijke code zonder inloggen mogelijk. Patches sinds 21-10-2026.Wat u nu moet doen →

PHP lokaal ontwikkelen: Docker, DDEV en meer

Voor lokale PHP-ontwikkeling zijn er de ingebouwde webserver, officiële Docker-images en hulpmiddelen zoals DDEV. Belangrijk is dat lokaal dezelfde PHP-versie draait als live.

Stand 4 min. leestijdPHP-kennis

Kort gezegd: Om PHP lokaal te ontwikkelen zijn er drie gangbare wegen: de ingebouwde webserver (php -S) voor snelle proeven, de officiële PHP-Docker-images voor reproduceerbare omgevingen en hulpmiddelen zoals DDEV, die kant-en-klare projectomgevingen voor WordPress, TYPO3, Shopware of Laravel genereren. Beslissend is minder het hulpmiddel dan de overeenkomst: lokaal moet dezelfde PHP-versie met dezelfde extensies draaien als live. Voor de beveiliging telt uiteindelijk altijd de runtime op de server.

Waarom een eigen ontwikkelomgeving?

Wijzigingen rechtstreeks op de live-server doorvoeren is riskant: elke typefout is meteen zichtbaar voor klanten en testbestanden blijven graag liggen. Een lokale omgeving scheidt uitproberen van bedrijf. Ze is tegelijk de plek waar nieuwe PHP-versies en beveiligingsupdates het eerst worden getest.

Voor directie en IT-leiding is de vraag daarom niet of er een ontwikkelomgeving is, maar of ze overeenkomt met het live-systeem. Een lokale omgeving met PHP 8.4, terwijl live nog 8.1 draait, verhult problemen in plaats van ze te tonen. Hetzelfde geldt voor databaseversie, webserver en extensies zoals intl, gd of pdo_mysql: al een ontbrekende extensie kan ertoe leiden dat een fout pas live opvalt.

De opties in een overzicht

Optie Geschikt voor Sterke punten Grenzen
Ingebouwde server php -S korte proeven, kleine scripts zonder installatie van verdere software geen vervanging van Nginx of Apache, niet voor openbare netwerken
Officiële Docker-image teams, reproduceerbare omgevingen versie via tag vast te leggen, dicht bij containerbedrijf configuratie en samenspel van meerdere containers zelf bouwen
DDEV CMS- en frameworkprojecten kant-en-klare projecttypen, database en webserver inbegrepen vereist Docker, eigen conventies
Lokaal geïnstalleerd PHP individuele ontwikkelaars snel, direct versies van meerdere projecten moeilijk parallel te houden

De ingebouwde webserver

Sinds PHP 5.4 bevat de opdrachtregel een kleine webserver. Hij start in de huidige map of met -t in een andere documentmap:

php -S localhost:8000 -t public/

Optioneel geeft u een routerscript mee dat bij elk verzoek eerst draait. De handleiding is bij de indeling eenduidig: de server moet de ontwikkeling ondersteunen, is geen volwaardige webserver en mag niet in een openbaar netwerk worden gebruikt. Bind hem daarom aan localhost, niet aan 0.0.0.0, anders is hij onder omstandigheden bereikbaar in het bedrijfs- of hotel-wifi. Meer over de opdrachtregel onder PHP op de opdrachtregel.

Docker: officiële PHP-images

De officiële images zijn er in meerdere varianten: cli voor de opdrachtregel, apache met Apache en mod_php, fpm voor bedrijf achter Nginx of een andere proxy, plus Alpine-varianten voor kleine images. Een snelle start met Apache:

docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache

De images bevatten de sjablonen php.ini-development en php.ini-production in de map $PHP_INI_DIR. Lokaal is het ontwikkelsjabloon zinvol, omdat het fouten toont. Voor productie adviseert de imagedocumentatie uitdrukkelijk het productiesjabloon. Extensies installeert u met de meegeleverde hulpscripts docker-php-ext-configure, docker-php-ext-install en docker-php-ext-enable. Hoe tags en digests werken, legt Officiële PHP-Docker-images uit.

DDEV: kant-en-klare omgevingen voor CMS en frameworks

DDEV bouwt voort op Docker en richt voor een project webserver, PHP, database en hulpdiensten in. De snelstartgidsen volgen bijna altijd hetzelfde patroon:

ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch

Als projecttypen kent DDEV onder meer wordpress, typo3, shopware6, laravel, symfony, drupal11, magento2 en het algemene type php. De PHP-versie legt u vast in .ddev/config.yaml; volgens de documentatie zijn versies van 5.6 tot 8.5 mogelijk, de standaard is 8.4:

# .ddev/config.yaml (uittreksel)
php_version: "8.3"
webserver_type: nginx-fpm   # alternatief apache-fpm

Zo komt de lokale omgeving overeen met de live-versie, ook als die nog niet de nieuwste is.

Lokale ontwikkeling, patchstatus en PHP2Shell

Na PHP2Shell hebben meerdere platformaanbieders gewezen op een typische denkfout. Vercel benadrukt volgens de bulletin dat een update van de lokale ontwikkelomgeving, de toepassingscode of de plugins niet volstaat; beslissend is de PHP-runtime die daadwerkelijk uitlevert. Lokaal PHP 8.4.27 hebben, beschermt de server met 8.4.26 niet.

Omgekeerd brengt de ontwikkelomgeving eigen risico's mee die naar productie kunnen doorsijpelen:

  1. Ontwikkel-ini in productie: display_errors staat in php.ini-development aan. Belandt dit bestand op de server, dan zien bezoekers paden en foutmeldingen. Zie Foutweergave in productie uitschakelen.
  2. Vergeten testbestanden: phpinfo()-bestanden, database-dumps of .env-bestanden met toegangsgegevens horen niet in de deployment.
  3. Open ontwikkelservers: php -S of containers met gepubliceerde poorten op computers in het netwerk.
  4. Verouderde images: Lokale images worden niet vanzelf bijgewerkt; na een PHP-beveiligingsrelease moet ook de ontwikkelomgeving opnieuw worden gebouwd, zodat tests met de gecorrigeerde versie draaien.
Tip

Leg de PHP-versie op één plek vast, bijvoorbeeld in het Dockerfile of in .ddev/config.yaml, en wijzig haar bij updates samen met de serverconfiguratie.

Hoe helpt PHP SOS concreet?

In het security-onderhoudscontract zorgen wij ervoor dat ontwikkeling en bedrijf bij elkaar passen:

  • Vergelijking: Wij vergelijken PHP-versie en extensies van ontwikkel-, test- en live-omgeving.
  • Updateverloop: Nieuwe PHP-releases worden eerst in de testomgeving doorgevoerd, dan live, telkens met herstart.
  • Deployment controleren: Wij letten erop dat er geen ontwikkel-ini, testbestanden of toegangsgegevens op de server terechtkomen.
  • Documentatie: U weet op elk moment welke versie waar draait.

Veelgestelde vragen

Mag ik de ingebouwde PHP-webserver openbaar gebruiken?

Nee. De PHP-handleiding zegt uitdrukkelijk dat de met php -S gestarte server voor ontwikkeling dient en niet in een openbaar netwerk mag worden gebruikt. Voor bedrijf horen PHP-FPM met Nginx of Apache.

Wat is DDEV?

DDEV is een hulpmiddel dat op Docker voortbouwt en kant-en-klare ontwikkelomgevingen voor PHP-projecten genereert. Het kent projecttypen voor WordPress, TYPO3, Shopware 6, Laravel, Drupal en andere systemen.

Is het voldoende om de lokale PHP-versie bij te werken?

Nee. Tegen lekken zoals PHP2Shell telt de PHP-runtime die daadwerkelijk uitlevert, dus die op de server. De lokale omgeving moet wel dezelfde versie hebben, zodat tests betekenisvol zijn.

Welke php.ini gebruik ik lokaal?

Lokaal is php.ini-development zinvol, omdat ze fouten toont. In productie hoort php.ini-production te worden gebruikt. De officiële Docker-images bevatten beide sjablonen.

Bronnen

Direct contact

Elk uur telt. Schrijf ons nu.

Beschrijf kort het systeem, de PHP-versie en wat u opmerkt. Wij nemen contact op, brengen de situatie in kaart en werken op afstand tot het incident is afgerond en gedocumenteerd.

Directe hulp