# Lokalni razvoj PHP-a: Docker, DDEV i drugi alati

> Lokalni razvoj PHP-a s ugrađenim poslužiteljem, Dockerom ili DDEV-om: prednosti, granice, primjeri i kako razvoj i produkcija ostaju na istoj razini zakrpa.

Izvor: https://phpsos.de/hr/php/php-lokal-entwickeln/  
Stanje: 25.10.2026  
Pružatelj: PHP SOS, PHP hitna pomoć i sigurnost poslužitelja. Hitna pomoć putem WhatsAppa: https://wa.me/491736494914?text=Pozdrav%20PHP%20SOS%2C%20trebamo%20pomo%C4%87%20s%20na%C5%A1im%20PHP%20poslu%C5%BEiteljem.%20Tvrtka%3A%20%E2%80%A6%20Web-stranica%3A%20%E2%80%A6

**Ukratko:** Za lokalni razvoj PHP-a postoje tri uobičajena puta: ugrađeni web-poslužitelj (`php -S`) za brze pokušaje, službene PHP Docker slike za okruženja koja se mogu ponovno izgraditi i alati poput DDEV-a koji stvaraju gotova projektna okruženja za WordPress, TYPO3, Shopware ili Laravel. Odlučujući je manje alat, a više podudarnost: lokalno bi trebala raditi ista verzija PHP-a s istim ekstenzijama kao uživo. Za sigurnost je na kraju ipak uvijek važno okruženje izvođenja na poslužitelju.

## Zašto zasebno razvojno okruženje?

Mijenjati izravno na živom poslužitelju rizično je: svaka tipfeler odmah je vidljiv kupcima, a testne datoteke rado ostaju ležati. Lokalno okruženje razdvaja isprobavanje od rada. Ujedno je mjesto na kojem se nove verzije PHP-a i sigurnosna ažuriranja najprije testiraju.

Za upravu i IT vodstvo pitanje stoga nije postoji li razvojno okruženje, nego odgovara li živom sustavu. Lokalno okruženje s PHP-om 8.4, dok uživo još radi 8.1, prikriva probleme umjesto da ih pokaže. Isto vrijedi za verziju baze podataka, web-poslužitelj i ekstenzije poput `intl`, `gd` ili `pdo_mysql`: već jedna nedostajuća ekstenzija može dovesti do toga da se pogreška primijeti tek uživo.

## Mogućnosti u pregledu

| Mogućnost | Prikladno za | Prednosti | Granice |
|---|---|---|---|
| Ugrađeni poslužitelj `php -S` | kratke pokušaje, male skripte | bez instalacije dodatnog softvera | nije zamjena za Nginx ili Apache, ne za javne mreže |
| Službena Docker slika | timove, okruženja koja se mogu ponovno izgraditi | verzija se određuje tagom, blizu rada u containeru | konfiguraciju i suradnju više containera gradite sami |
| DDEV | CMS i framework projekte | gotovi tipovi projekata, uključeni baza podataka i web-poslužitelj | zahtijeva Docker, vlastite konvencije |
| Lokalno instaliran PHP | pojedinačne programere | brzo, izravno | verzije više projekata teško je držati paralelno |

## Ugrađeni web-poslužitelj

Od PHP-a 5.4 naredbeni redak sadrži mali web-poslužitelj. Pokreće se u trenutačnom direktoriju ili s `-t` u drugom direktoriju dokumenata:

```bash
php -S localhost:8000 -t public/
```

Po želji predajete router skriptu koja se pri svakom zahtjevu izvršava prva. Priručnik je kod razvrstavanja nedvosmislen: poslužitelj treba podupirati razvoj, nije potpun web-poslužitelj i ne smije se koristiti u javnoj mreži. Vežite ga stoga na `localhost`, a ne na `0.0.0.0`, jer inače može biti dostupan u WLAN-u tvrtke ili hotela. Više o naredbenom retku na stranici [PHP u naredbenom retku](https://phpsos.de/hr/php/php-cli/).

## Docker: službene PHP slike

Službene slike postoje u nekoliko varijanti: `cli` za naredbeni redak, `apache` s Apacheom i mod_php-om, `fpm` za rad iza Nginxa ili drugog proxyja, uz to Alpine varijante za male slike. Brz početak s Apacheom:

```bash
docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache
```

Slike sadrže predloške `php.ini-development` i `php.ini-production` u direktoriju `$PHP_INI_DIR`. Lokalno je razvojni predložak smislen jer prikazuje pogreške. Za produkciju dokumentacija slike izričito preporučuje produkcijski predložak. Ekstenzije instalirate isporučenim pomoćnim skriptama `docker-php-ext-configure`, `docker-php-ext-install` i `docker-php-ext-enable`. Kako tagovi i digestovi funkcioniraju, objašnjava članak [Službene PHP Docker slike](https://phpsos.de/hr/blog/offizielle-php-docker-images/).

## DDEV: gotova okruženja za CMS i frameworke

DDEV se temelji na Dockeru i za projekt postavlja web-poslužitelj, PHP, bazu podataka i pomoćne usluge. Upute za brzi početak gotovo uvijek prate isti obrazac:

```bash
ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch
```

Kao tipove projekata DDEV, među ostalim, poznaje `wordpress`, `typo3`, `shopware6`, `laravel`, `symfony`, `drupal11`, `magento2` i opći tip `php`. Verziju PHP-a određujete u `.ddev/config.yaml`; prema dokumentaciji moguće su verzije od 5.6 do 8.5, a zadana je 8.4:

```yaml
# .ddev/config.yaml (izvadak)
php_version: "8.3"
webserver_type: nginx-fpm   # alternativno apache-fpm
```

Tako lokalno okruženje odgovara živoj verziji, čak i kad ona još nije najnovija.

## Lokalni razvoj, razina zakrpa i PHP2Shell

Nakon PHP2Shella nekoliko je pružatelja platformi ukazalo na tipičnu zabludu. Vercel prema biltenu naglašava da ažuriranje lokalnog razvojnog okruženja, koda aplikacije ili pluginova nije dovoljno; odlučujuće je PHP okruženje koje stvarno poslužuje stranice. Imati lokalno PHP 8.4.27 ne štiti poslužitelj s 8.4.26.

Obrnuto, razvojno okruženje donosi vlastite rizike koji mogu otputovati u produkciju:

1. **Razvojni ini u produkciji:** `display_errors` je u `php.ini-development` uključen. Ako ta datoteka dospije na poslužitelj, posjetitelji vide putanje i poruke o pogreškama. Vidi [Isključivanje ispisa pogrešaka u produkciji](https://phpsos.de/hr/blog/display-errors-produktion/).
2. **Zaboravljene testne datoteke:** `phpinfo()` datoteke, dumpovi baze podataka ili `.env` datoteke s pristupnim podacima ne pripadaju u deployment.
3. **Otvoreni razvojni poslužitelji:** `php -S` ili containeri s objavljenim portovima na računalima u mreži.
4. **Zastarjele slike:** Lokalne se slike ne ažuriraju same od sebe; nakon PHP sigurnosnog izdanja i razvojno okruženje treba iznova izgraditi kako bi se testovi izvodili s ispravljenom verzijom.

> **Savjet:**
> Verziju PHP-a odredite na jednom mjestu, primjerice u Dockerfileu ili u `.ddev/config.yaml`, i pri ažuriranjima je mijenjajte zajedno s konfiguracijom poslužitelja.

## Kako PHP SOS konkretno pomaže?

U [sigurnosnom ugovoru o održavanju](https://phpsos.de/hr/leistungen/security-wartungsvertrag/) brinemo se da razvoj i rad budu usklađeni:

- **Usporedba:** Uspoređujemo verziju PHP-a i ekstenzije razvojnog, testnog i živog okruženja.
- **Tijek ažuriranja:** Nova PHP izdanja najprije se instaliraju u testnom okruženju, zatim uživo, svaki put s ponovnim pokretanjem.
- **Provjera deploymenta:** Pazimo da na poslužitelj ne dospiju razvojni ini, testne datoteke ili pristupni podaci.
- **Dokumentacija:** U svakom trenutku znate koja verzija gdje radi.


## Česta pitanja

**Smijem li ugrađeni PHP web-poslužitelj koristiti javno?**  
Ne. PHP priručnik izričito kaže da poslužitelj pokrenut s php -S služi razvoju i ne smije se koristiti u javnoj mreži. Za produkciju su potrebni PHP-FPM s Nginxom ili Apacheom.

**Što je DDEV?**  
DDEV je alat koji se temelji na Dockeru i stvara gotova razvojna okruženja za PHP projekte. Poznaje tipove projekata za WordPress, TYPO3, Shopware 6, Laravel, Drupal i druge sustave.

**Je li dovoljno ažurirati lokalnu verziju PHP-a?**  
Ne. Protiv ranjivosti poput PHP2Shella važi PHP okruženje koje stvarno poslužuje stranice, dakle ono na poslužitelju. Lokalno okruženje ipak bi trebalo imati istu verziju kako bi testovi bili vjerodostojni.

**Koji php.ini koristim lokalno?**  
Lokalno je php.ini-development smislen jer prikazuje pogreške. U produkciji treba koristiti php.ini-production. Službene Docker slike donose oba predloška.

## Izvori

- [PHP priručnik: Ugrađeni web-poslužitelj](https://www.php.net/manual/en/features.commandline.webserver.php)
- [Docker Official Image: PHP](https://hub.docker.com/_/php)
- [DDEV](https://ddev.com/)
