Aktuálna situácia: PHP2Shell. Dve kritické zraniteľnosti PHP (CVSS 9.2) umožňujú spustenie škodlivého kódu bez prihlásenia. Záplaty od 21. 10. 2026.Čo treba urobiť teraz →

Lokálny vývoj PHP: Docker, DDEV a ďalšie

Pre lokálny vývoj PHP existuje vstavaný webový server, oficiálne obrazy Dockeru a nástroje ako DDEV. Dôležité je, aby lokálne bežala rovnaká verzia PHP ako naostro.

Stav 4 min čítaniaZnalosti o PHP

Stručne: Na lokálny vývoj PHP existujú tri bežné cesty: vstavaný webový server (php -S) na rýchle pokusy, oficiálne obrazy PHP pre Docker pre reprodukovateľné prostredia a nástroje ako DDEV, ktoré vytvárajú hotové projektové prostredia pre WordPress, TYPO3, Shopware alebo Laravel. Rozhodujúci je menej nástroj než zhoda: lokálne by mala bežať rovnaká verzia PHP s rovnakými rozšíreniami ako naostro. Pre bezpečnosť však nakoniec vždy rozhoduje prostredie na serveri.

Prečo vlastné vývojové prostredie?

Robiť zmeny priamo na živom serveri je riskantné: každý preklep je okamžite viditeľný pre zákazníkov a testovacie súbory tam radi zostanú. Lokálne prostredie oddeľuje skúšanie od prevádzky. Je zároveň miestom, kde sa nové verzie PHP a bezpečnostné aktualizácie testujú ako prvé.

Pre vedenie firmy a vedúcich IT preto otázka nie je, či vývojové prostredie existuje, ale či zodpovedá živému systému. Lokálne prostredie s PHP 8.4, kým naostro beží ešte 8.1, problémy zahmlieva namiesto toho, aby ich ukázalo. To isté platí pre verziu databázy, webový server a rozšírenia ako intl, gd alebo pdo_mysql: už jedno chýbajúce rozšírenie môže spôsobiť, že sa chyba prejaví až naostro.

Možnosti v prehľade

Možnosť Vhodné pre Silné stránky Hranice
Vstavaný server php -S krátke pokusy, malé skripty bez inštalácie ďalšieho softvéru nie je náhradou za Nginx alebo Apache, nie pre verejné siete
Oficiálny obraz Dockeru tímy, reprodukovateľné prostredia verziu možno určiť tagom, blízko prevádzke v kontajneroch konfiguráciu a súčinnosť viacerých kontajnerov si treba postaviť sám
DDEV projekty CMS a frameworkov hotové typy projektov, databáza a webový server v cene vyžaduje Docker, vlastné konvencie
Lokálne nainštalované PHP jednotliví vývojári rýchle, priame verzie viacerých projektov sa ťažko udržiavajú paralelne

Vstavaný webový server

Od PHP 5.4 obsahuje príkazový riadok malý webový server. Spustí sa v aktuálnom adresári alebo pomocou -t v inom adresári dokumentov:

php -S localhost:8000 -t public/

Voliteľne môžete odovzdať skript routera, ktorý sa pri každej požiadavke spustí ako prvý. Príručka je pri zaradení jednoznačná: server má podporovať vývoj, nie je plnohodnotným webovým serverom a nemá sa používať vo verejnej sieti. Viažte ho preto na localhost, nie na 0.0.0.0, inak môže byť za istých okolností dostupný vo firemnej alebo hotelovej sieti WiFi. Viac o príkazovom riadku v PHP v príkazovom riadku.

Docker: oficiálne obrazy PHP

Oficiálne obrazy existujú vo viacerých variantoch: cli pre príkazový riadok, apache s Apache a mod_php, fpm pre prevádzku za Nginx alebo iným proxy, k tomu varianty Alpine pre malé obrazy. Rýchly štart s Apache:

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

Obrazy obsahujú šablóny php.ini-development a php.ini-production v adresári $PHP_INI_DIR. Lokálne dáva zmysel vývojová šablóna, pretože zobrazuje chyby. Pre produkciu dokumentácia obrazu výslovne odporúča produkčnú šablónu. Rozšírenia nainštalujete dodávanými pomocnými skriptmi docker-php-ext-configure, docker-php-ext-install a docker-php-ext-enable. Ako fungujú tagy a digesty, vysvetľuje Oficiálne obrazy PHP pre Docker.

DDEV: hotové prostredia pre CMS a frameworky

DDEV stavia na Dockeri a pre projekt nastaví webový server, PHP, databázu a pomocné služby. Rýchle návody na štart takmer vždy nasledujú rovnaký vzor:

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

Ako typy projektov pozná DDEV okrem iného wordpress, typo3, shopware6, laravel, symfony, drupal11, magento2 a všeobecný typ php. Verziu PHP určíte v .ddev/config.yaml; podľa dokumentácie sú možné verzie od 5.6 po 8.5, štandard je 8.4:

# .ddev/config.yaml (výrez)
php_version: "8.3"
webserver_type: nginx-fpm   # alternatívne apache-fpm

Lokálne prostredie tak zodpovedá živej verzii, aj keď ešte nie je najnovšia.

Lokálny vývoj, stav záplat a PHP2Shell

Po PHP2Shell viacerí poskytovatelia platforiem upozornili na typickú chybu v úsudku. Vercel podľa bulletinu zdôrazňuje, že aktualizácia lokálneho vývojového prostredia, aplikačného kódu alebo pluginov nestačí; rozhodujúce je prostredie PHP, ktoré skutočne odpovedá. Mať lokálne PHP 8.4.27 nechráni server s 8.4.26.

Naopak, vývojové prostredie prináša vlastné riziká, ktoré sa môžu preniesť do produkcie:

  1. Vývojový ini v produkcii: display_errors je v php.ini-development zapnuté. Ak sa tento súbor dostane na server, návštevníci vidia cesty a chybové hlásenia. Pozri Vypnutie výpisu chýb v produkcii.
  2. Zabudnuté testovacie súbory: súbory phpinfo(), výpisy databázy alebo súbory .env s prístupovými údajmi do nasadenia nepatria.
  3. Otvorené vývojové servery: php -S alebo kontajnery so zverejnenými portmi na počítačoch v sieti.
  4. Zastarané obrazy: Lokálne obrazy sa neaktualizujú samy; po bezpečnostnom vydaní PHP sa má znova zostaviť aj vývojové prostredie, aby testy bežali s opravenou verziou.
Tip

Verziu PHP určte na jednom mieste, napríklad v Dockerfile alebo v .ddev/config.yaml, a pri aktualizáciách ju meňte spoločne s konfiguráciou servera.

Ako PHP SOS konkrétne pomáha?

V zmluve o bezpečnostnej údržbe dbáme na to, aby vývoj a prevádzka k sebe pasovali:

  • Porovnanie: Porovnávame verziu PHP a rozšírenia vo vývojovom, testovacom a živom prostredí.
  • Postup aktualizácie: Nové vydania PHP sa nasadzujú najprv v testovacom prostredí, potom naostro, vždy s reštartom.
  • Kontrola nasadenia: Dbáme na to, aby sa na server nedostal vývojový ini, testovacie súbory ani prístupové údaje.
  • Dokumentácia: Kedykoľvek viete, ktorá verzia kde beží.

Časté otázky

Smiem vstavaný webový server PHP používať verejne?

Nie. Príručka PHP výslovne uvádza, že server spustený pomocou php -S slúži na vývoj a nemá sa používať vo verejnej sieti. Do prevádzky patrí PHP-FPM s Nginx alebo Apache.

Čo je DDEV?

DDEV je nástroj, ktorý stavia na Dockeri a vytvára hotové vývojové prostredia pre projekty PHP. Pozná typy projektov pre WordPress, TYPO3, Shopware 6, Laravel, Drupal a ďalšie systémy.

Stačí aktualizovať lokálnu verziu PHP?

Nie. Proti zraniteľnostiam ako PHP2Shell rozhoduje prostredie PHP, ktoré skutočne odpovedá, teda to na serveri. Lokálne prostredie by však malo mať rovnakú verziu, aby boli testy výpovedné.

Ktorý php.ini mám lokálne používať?

Lokálne dáva zmysel php.ini-development, pretože zobrazuje chyby. V produkcii patrí používať php.ini-production. Oficiálne obrazy Dockeru obsahujú obe šablóny.

Zdroje

Okamžitý kontakt

Každá hodina sa počíta. Napíšte nám hneď.

Stručne opíšte systém, verziu PHP a svoje pozorovanie. Ozveme sa, vyjasníme situáciu a budeme pracovať na diaľku, kým nebude incident uzavretý a zdokumentovaný.

Okamžitá pomoc