# PHP helyi fejlesztése: Docker, DDEV és társaik

> PHP helyi fejlesztése beépített szerverrel, Dockerrel vagy DDEV-vel: erősségek, korlátok, példák, és hogyan marad egyező a fejlesztés és az éles üzem.

Forrás: https://phpsos.de/hu/php/php-lokal-entwickeln/  
Állapot: 2026. 10. 25.  
Szolgáltató: PHP SOS, PHP-vészhelyzeti segítség és szerverbiztonság. Azonnali segítség WhatsAppon: https://wa.me/491736494914?text=%C3%9Cdv%C3%B6zl%C3%B6m%2C%20PHP%20SOS%21%20Seg%C3%ADts%C3%A9gre%20van%20sz%C3%BCks%C3%A9g%C3%BCnk%20a%20PHP-szerver%C3%BCnkkel.%20C%C3%A9g%3A%20%E2%80%A6%20Weboldal%3A%20%E2%80%A6

**Röviden:** A PHP helyi fejlesztésére három bevett út létezik: a beépített webszerver (`php -S`) a gyors kísérletekhez, a hivatalos PHP Docker-képek az újraépíthető környezetekhez, és az olyan eszközök, mint a DDEV, amelyek kész projektkörnyezeteket hoznak létre WordPresshez, TYPO3-hoz, Shopwarehez vagy Laravelhez. Az eszköznél fontosabb az egyezés: helyben ugyanannak a PHP-verziónak kell futnia ugyanazokkal a bővítményekkel, mint élesben. A biztonság szempontjából a végén azonban mindig a szerveren lévő futtatókörnyezet számít.

## Miért kell saját fejlesztői környezet?

A módosításokat közvetlenül az éles szerveren végezni kockázatos: minden elírás azonnal látható az ügyfelek számára, a tesztfájlok pedig szívesen ottmaradnak. A helyi környezet elválasztja a kipróbálást az üzemtől. Egyúttal ez az a hely, ahol az új PHP-verziókat és a biztonsági frissítéseket először tesztelik.

Az ügyvezetés és az IT-vezetés számára ezért nem az a kérdés, hogy van-e fejlesztői környezet, hanem hogy megfelel-e az éles rendszernek. Egy PHP 8.4-es helyi környezet, miközben élesben még a 8.1 fut, elfedi a problémákat, ahelyett hogy megmutatná őket. Ugyanez érvényes az adatbázis-verzióra, a webszerverre és az olyan bővítményekre, mint az `intl`, a `gd` vagy a `pdo_mysql`: egyetlen hiányzó bővítmény is oda vezethet, hogy egy hiba csak élesben tűnik fel.

## A lehetőségek áttekintése

| Lehetőség | Alkalmas | Erősségek | Korlátok |
|---|---|---|---|
| Beépített szerver `php -S` | rövid kísérletekhez, kis szkriptekhez | további szoftver telepítése nélkül | nem helyettesíti az Nginxet vagy az Apache-ot, nem nyilvános hálózatokra való |
| Hivatalos Docker-kép | csapatoknak, újraépíthető környezetekhez | a verzió taggel rögzíthető, közel a konténeres üzemhez | a konfigurációt és több konténer együttműködését magának kell megépíteni |
| DDEV | CMS- és keretrendszer-projektekhez | kész projekttípusok, adatbázis és webszerver is benne van | Dockert feltételez, saját konvenciói vannak |
| Helyben telepített PHP | egyéni fejlesztőknek | gyors, közvetlen | több projekt verzióit nehéz párhuzamosan tartani |

## A beépített webszerver

A PHP 5.4 óta a parancssor egy kis webszervert tartalmaz. Az aktuális könyvtárban indul, vagy a `-t` kapcsolóval egy másik dokumentumkönyvtárban:

```bash
php -S localhost:8000 -t public/
```

Opcionálisan megadhat egy router-szkriptet, amely minden kérésnél először lefut. A kézikönyv a besorolásnál egyértelmű: a szerver a fejlesztést hivatott támogatni, nem teljes értékű webszerver, és nem szabad nyilvános hálózatban használni. Kösse ezért a `localhost`-hoz, nem a `0.0.0.0`-hoz, különben adott esetben a céges vagy a szállodai Wi-Fin elérhető. Többet a parancssorról a [PHP a parancssorban](https://phpsos.de/hu/php/php-cli/) oldalon.

## Docker: hivatalos PHP-képek

A hivatalos képek több változatban léteznek: `cli` a parancssorhoz, `apache` Apache-csal és mod_php-val, `fpm` az Nginx vagy más proxy mögötti üzemhez, emellett Alpine-változatok kis képekhez. Gyors indulás Apache-csal:

```bash
docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache
```

A képek a `php.ini-development` és a `php.ini-production` sablont tartalmazzák a `$PHP_INI_DIR` könyvtárban. Helyben a fejlesztői sablon az ésszerű, mert megjeleníti a hibákat. Éles üzemre a képdokumentáció kifejezetten az éles sablont ajánlja. A bővítményeket a mellékelt `docker-php-ext-configure`, `docker-php-ext-install` és `docker-php-ext-enable` segédszkriptekkel telepítheti. Hogyan működnek a tagek és a digestek, azt a [Hivatalos PHP Docker-képek](https://phpsos.de/hu/blog/offizielle-php-docker-images/) cikk magyarázza.

## DDEV: kész környezetek CMS-hez és keretrendszerekhez

A DDEV Dockerre épül, és egy projekthez webszervert, PHP-t, adatbázist és segédszolgáltatásokat állít be. A gyorsindítási útmutatók szinte mindig ugyanazt a mintát követik:

```bash
ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch
```

Projekttípusként a DDEV többek között a `wordpress`, `typo3`, `shopware6`, `laravel`, `symfony`, `drupal11`, `magento2` típust és az általános `php` típust ismeri. A PHP-verziót a `.ddev/config.yaml` fájlban rögzíti; a dokumentáció szerint az 5.6-tól a 8.5-ig lehetséges, az alapértelmezés a 8.4:

```yaml
# .ddev/config.yaml (részlet)
php_version: "8.3"
webserver_type: nginx-fpm   # másik lehetőség: apache-fpm
```

Így a helyi környezet megfelel az éles verziónak, akkor is, ha az még nem a legújabb.

## Helyi fejlesztés, javítási állapot és PHP2Shell

A PHP2Shell után több platformszolgáltató rámutatott egy tipikus gondolkodási hibára. A Vercel a bulletin szerint hangsúlyozza, hogy a helyi fejlesztői környezet, az alkalmazáskód vagy a bővítmények frissítése nem elég; a döntő az a PHP-futtatókörnyezet, amely ténylegesen kiszolgál. Ha helyben PHP 8.4.27 van, az nem védi a 8.4.26-os szervert.

Fordítva, a fejlesztői környezet saját kockázatokat hoz, amelyek átvándorolhatnak az éles üzembe:

1. **Fejlesztői ini az éles üzemben:** a `display_errors` a `php.ini-development`-ben be van kapcsolva. Ha ez a fájl a szerverre kerül, a látogatók útvonalakat és hibaüzeneteket látnak. Lásd [Hibakimenet kikapcsolása éles üzemben](https://phpsos.de/hu/blog/display-errors-produktion/).
2. **Elfelejtett tesztfájlok:** `phpinfo()`-fájlok, adatbázis-dumpok vagy hozzáférési adatokat tartalmazó `.env` fájlok nem valók a telepítésbe.
3. **Nyitott fejlesztői szerverek:** a `php -S` vagy közzétett portú konténerek a hálózatban lévő gépeken.
4. **Elavult képek:** A helyi képek maguktól nem frissülnek; egy PHP biztonsági kiadás után a fejlesztői környezetet is újra kell építeni, hogy a tesztek a javított verzióval fussanak.

> **Tipp:**
> A PHP-verziót egy helyen rögzítse, például a Dockerfile-ban vagy a `.ddev/config.yaml`-ban, és frissítéskor a szerverkonfigurációval együtt módosítsa.

## Hogyan segít konkrétan a PHP SOS?

A [biztonsági karbantartási szerződés](https://phpsos.de/hu/leistungen/security-wartungsvertrag/) keretében gondoskodunk arról, hogy a fejlesztés és az üzem illeszkedjen egymáshoz:

- **Egyeztetés:** Összevetjük a fejlesztői, teszt- és éles környezet PHP-verzióját és bővítményeit.
- **Frissítési folyamat:** Az új PHP-kiadásokat először a tesztkörnyezetben telepítjük, aztán élesben, mindkétszer újraindítással.
- **A telepítés ellenőrzése:** Ügyelünk arra, hogy fejlesztői ini, tesztfájlok vagy hozzáférési adatok ne kerüljenek a szerverre.
- **Dokumentáció:** Ön bármikor tudja, melyik verzió hol fut.


## Gyakori kérdések

**Használhatom nyilvánosan a PHP beépített webszerverét?**  
Nem. A PHP-kézikönyv kifejezetten kimondja, hogy a php -S paranccsal indított szerver a fejlesztést szolgálja, és nem szabad nyilvános hálózatban használni. Az éles üzemhez a PHP-FPM tartozik Nginxszel vagy Apache-csal.

**Mi a DDEV?**  
A DDEV egy Dockerre épülő eszköz, amely kész fejlesztői környezeteket hoz létre PHP-projektekhez. Ismeri a WordPress, a TYPO3, a Shopware 6, a Laravel, a Drupal és további rendszerek projekttípusait.

**Elég a helyi PHP-verziót frissíteni?**  
Nem. Az olyan rések ellen, mint a PHP2Shell, az a PHP-futtatókörnyezet számít, amely ténylegesen kiszolgál, vagyis a szerveren lévő. A helyi környezetnek viszont ugyanazt a verziót kell használnia, hogy a tesztek mérvadóak legyenek.

**Melyik php.ini-t használjam helyben?**  
Helyben a php.ini-development értelmes, mert megjeleníti a hibákat. Éles üzemben a php.ini-production használandó. A hivatalos Docker-képek mindkét sablont tartalmazzák.

## Források

- [PHP-kézikönyv: Beépített webszerver](https://www.php.net/manual/en/features.commandline.webserver.php)
- [Docker Official Image: PHP](https://hub.docker.com/_/php)
- [DDEV](https://ddev.com/)
