# Lokální vývoj PHP: Docker, DDEV a další

> Lokální vývoj PHP s vestavěným serverem, Dockerem nebo DDEV: silné stránky, meze, příklady a shoda vývoje s produkcí ve stavu záplat.

Zdroj: https://phpsos.de/cs/php/php-lokal-entwickeln/  
Stav: 25.10.2026  
Poskytovatel: PHP SOS, Nouzová pomoc pro PHP a bezpečnost serverů. Okamžitá pomoc přes WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20den%2C%20PHP%20SOS%2C%20pot%C5%99ebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20PHP%20serverem.%20Firma%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručně:** Pro lokální vývoj v PHP existují tři běžné cesty: vestavěný webový server (`php -S`) pro rychlé pokusy, oficiální image PHP pro Docker pro reprodukovatelná prostředí a nástroje jako DDEV, které vytvářejí hotová projektová prostředí pro WordPress, TYPO3, Shopware nebo Laravel. Rozhodující není tolik nástroj jako shoda: lokálně by měla běžet stejná verze PHP se stejnými rozšířeními jako naostro. Pro bezpečnost ale nakonec vždy rozhoduje běhové prostředí na serveru.

## Proč vlastní vývojové prostředí?

Provádět změny přímo na živém serveru je riskantní: každý překlep je okamžitě vidět zákazníkům a testovací soubory tam rády zůstávají ležet. Lokální prostředí odděluje zkoušení od provozu. Je zároveň místem, kde se nové verze PHP a bezpečnostní aktualizace testují jako první.

Pro vedení firmy a IT proto není otázka, zda vývojové prostředí existuje, ale zda odpovídá živému systému. Lokální prostředí s PHP 8.4, zatímco naostro stále běží 8.1, problémy spíše zakrývá, než aby je ukázalo. Totéž platí pro verzi databáze, webový server a rozšíření jako `intl`, `gd` nebo `pdo_mysql`: už jediné chybějící rozšíření může způsobit, že se chyba projeví teprve naostro.

## Možnosti v přehledu

| Možnost | Vhodné pro | Silné stránky | Meze |
|---|---|---|---|
| Vestavěný server `php -S` | krátké pokusy, malé skripty | bez instalace dalšího softwaru | není náhradou za Nginx nebo Apache, ne pro veřejné sítě |
| Oficiální image Dockeru | týmy, reprodukovatelná prostředí | verzi lze určit tagem, blízko provozu v kontejneru | konfiguraci a součinnost více kontejnerů si musíte postavit sami |
| DDEV | projekty CMS a frameworků | hotové typy projektů, databáze a webový server v ceně | vyžaduje Docker, vlastní konvence |
| Lokálně nainstalované PHP | jednotliví vývojáři | rychlé, přímé | verze více projektů se těžko udržují souběžně |

## Vestavěný webový server

Od PHP 5.4 obsahuje příkazová řádka malý webový server. Spustí se v aktuálním adresáři nebo pomocí `-t` v jiném dokumentovém adresáři:

```bash
php -S localhost:8000 -t public/
```

Volitelně můžete předat skript routeru, který se při každém požadavku spustí jako první. Příručka je v zařazení jednoznačná: server má podporovat vývoj, není plnohodnotným webovým serverem a nemá se používat ve veřejné síti. Vážte jej proto na `localhost`, ne na `0.0.0.0`, jinak může být za určitých okolností dostupný ve firemní nebo hotelové Wi-Fi. Více o příkazové řádce najdete v článku [PHP na příkazové řádce](https://phpsos.de/cs/php/php-cli/).

## Docker: oficiální image PHP

Oficiální image existují v několika variantách: `cli` pro příkazovou řádku, `apache` s Apache a mod_php, `fpm` pro provoz za Nginx nebo jinou proxy, k tomu varianty Alpine pro malé image. Rychlý start s Apache:

```bash
docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache
```

Image obsahují šablony `php.ini-development` a `php.ini-production` v adresáři `$PHP_INI_DIR`. Lokálně dává smysl vývojová šablona, protože zobrazuje chyby. Pro produkci dokumentace image výslovně doporučuje produkční šablonu. Rozšíření instalujete pomocí dodávaných pomocných skriptů `docker-php-ext-configure`, `docker-php-ext-install` a `docker-php-ext-enable`. Jak fungují tagy a digesty, vysvětluje článek [Oficiální image PHP pro Docker](https://phpsos.de/cs/blog/offizielle-php-docker-images/).

## DDEV: hotová prostředí pro CMS a frameworky

DDEV staví na Dockeru a pro projekt zřídí webový server, PHP, databázi a pomocné služby. Rychlé návody téměř vždy sledují stejný vzor:

```bash
ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch
```

Jako typy projektů zná DDEV mimo jiné `wordpress`, `typo3`, `shopware6`, `laravel`, `symfony`, `drupal11`, `magento2` a obecný typ `php`. Verzi PHP určíte v `.ddev/config.yaml`; podle dokumentace jsou možné verze od 5.6 do 8.5, výchozí je 8.4:

```yaml
# .ddev/config.yaml (výřez)
php_version: "8.3"
webserver_type: nginx-fpm   # případně apache-fpm
```

Lokální prostředí tak odpovídá živé verzi, i když ta ještě není nejnovější.

## Lokální vývoj, stav záplat a PHP2Shell

Po PHP2Shell několik poskytovatelů platforem upozornilo na typickou chybu v úvaze. Vercel podle bulletinu zdůrazňuje, že aktualizace lokálního vývojového prostředí, aplikačního kódu nebo pluginů nestačí; rozhodující je běhové prostředí PHP, které skutečně odpovídá. Mít lokálně PHP 8.4.27 nechrání server s 8.4.26.

Naopak vývojové prostředí přináší vlastní rizika, která mohou přejít do produkce:

1. **Vývojové ini v produkci:** `display_errors` je v `php.ini-development` zapnuto. Pokud se tento soubor dostane na server, návštěvníci uvidí cesty a chybová hlášení. Viz [Vypnutí výpisu chyb v produkci](https://phpsos.de/cs/blog/display-errors-produktion/).
2. **Zapomenuté testovací soubory:** soubory `phpinfo()`, dumpy databáze nebo soubory `.env` s přístupovými údaji do nasazení nepatří.
3. **Otevřené vývojové servery:** `php -S` nebo kontejnery s publikovanými porty na počítačích v síti.
4. **Zastaralé image:** lokální image se samy neaktualizují; po bezpečnostním vydání PHP je nutné znovu sestavit i vývojové prostředí, aby testy běžely s opravenou verzí.

> **Tip:**
> Verzi PHP určete na jednom místě, například v Dockerfile nebo v `.ddev/config.yaml`, a při aktualizacích ji měňte společně s konfigurací serveru.

## Jak konkrétně pomáhá PHP SOS?

V rámci [bezpečnostní servisní smlouvy](https://phpsos.de/cs/leistungen/security-wartungsvertrag/) dbáme na to, aby vývoj a provoz do sebe zapadaly:

- **Srovnání:** Porovnáme verzi PHP a rozšíření ve vývojovém, testovacím a živém prostředí.
- **Postup aktualizace:** Nová vydání PHP se nejprve nasadí v testovacím prostředí, poté naostro, vždy s restartem.
- **Kontrola nasazení:** Dbáme na to, aby se na server nedostalo vývojové ini, testovací soubory ani přístupové údaje.
- **Dokumentace:** Kdykoli víte, jaká verze kde běží.


## Časté dotazy

**Smím vestavěný webový server PHP používat veřejně?**  
Ne. Příručka PHP výslovně uvádí, že server spuštěný pomocí php -S slouží k vývoji a nemá se používat ve veřejné síti. Pro provoz patří PHP-FPM s Nginx nebo Apache.

**Co je DDEV?**  
DDEV je nástroj, který staví na Dockeru a vytváří hotová vývojová prostředí pro projekty v PHP. Zná typy projektů pro WordPress, TYPO3, Shopware 6, Laravel, Drupal a další systémy.

**Stačí aktualizovat lokální verzi PHP?**  
Ne. Proti zranitelnostem jako PHP2Shell se počítá běhové prostředí PHP, které skutečně odpovídá, tedy to na serveru. Lokální prostředí by ale mělo mít stejnou verzi, aby byly testy vypovídající.

**Jakou php.ini použít lokálně?**  
Lokálně dává smysl php.ini-development, protože zobrazuje chyby. V produkci je třeba použít php.ini-production. Oficiální image Dockeru obsahují obě šablony.

## Zdroje

- [Příručka PHP: Vestavěný webový server](https://www.php.net/manual/en/features.commandline.webserver.php)
- [Docker Official Image: PHP](https://hub.docker.com/_/php)
- [DDEV](https://ddev.com/)
