# Lokalni razvoj PHP: Docker, DDEV in drugo

> Lokalni razvoj PHP z vgrajenim strežnikom, Dockerjem ali DDEV: prednosti, meje, primeri in kako razvoj ter produkcija ostaneta enaka pri stanju popravkov.

Vir: https://phpsos.de/sl/php/php-lokal-entwickeln/  
Stanje: 25.10.2026  
Ponudnik: PHP SOS, Nujna pomoč za PHP in varnost strežnikov. Takojšnja pomoč po WhatsAppu: https://wa.me/491736494914?text=Pozdravljeni%2C%20PHP%20SOS%2C%20potrebujemo%20pomo%C4%8D%20z%20na%C5%A1im%20stre%C5%BEnikom%20PHP.%20Podjetje%3A%20%E2%80%A6%20Spletna%20stran%3A%20%E2%80%A6

**Na kratko:** Za lokalni razvoj PHP so tri običajne poti: vgrajeni spletni strežnik (`php -S`) za hitre poskuse, uradne slike PHP Docker za ponovljiva okolja in orodja, kot je DDEV, ki ustvarijo pripravljena projektna okolja za WordPress, TYPO3, Shopware ali Laravel. Odločilno ni toliko orodje kot ujemanje: lokalno naj teče ista različica PHP z istimi razširitvami kot v živo. Za varnost pa na koncu vedno šteje izvajalno okolje na strežniku.

## Zakaj lastno razvojno okolje?

Spremembe neposredno na živem strežniku so tvegane: vsaka tipkarska napaka je takoj vidna strankam, testne datoteke pa rade ostanejo. Lokalno okolje ločuje preizkušanje od obratovanja. Hkrati je mesto, kjer se nove različice PHP in varnostne posodobitve najprej preizkusijo.

Za vodstvo in vodjo IT zato vprašanje ni, ali razvojno okolje obstaja, temveč ali ustreza živemu sistemu. Lokalno okolje s PHP 8.4, medtem ko v živo še teče 8.1, težave zakriva, namesto da bi jih pokazalo. Enako velja za različico podatkovne baze, spletni strežnik in razširitve, kot so `intl`, `gd` ali `pdo_mysql`: že ena manjkajoča razširitev lahko povzroči, da se napaka opazi šele v živo.

## Možnosti na hitro

| Možnost | Primerno za | Prednosti | Meje |
|---|---|---|---|
| Vgrajeni strežnik `php -S` | kratke poskuse, majhne skripte | brez namestitve dodatne programske opreme | ni nadomestilo za Nginx ali Apache, ne za javna omrežja |
| Uradna slika Docker | ekipe, ponovljiva okolja | različico je mogoče določiti z oznako, blizu delovanju v vsebnikih | konfiguracijo in sodelovanje več vsebnikov je treba zgraditi samemu |
| DDEV | projekti CMS in ogrodij | pripravljene vrste projektov, vključena podatkovna baza in spletni strežnik | zahteva Docker, lastne konvencije |
| Lokalno nameščen PHP | posamezni razvijalci | hitro, neposredno | različic več projektov je težko hkrati vzdrževati |

## Vgrajeni spletni strežnik

Od PHP 5.4 ukazna vrstica vsebuje majhen spletni strežnik. Zažene se v trenutnem imeniku ali z `-t` v drugem imeniku dokumentov:

```bash
php -S localhost:8000 -t public/
```

Po želji podate skripto usmerjevalnika (router), ki se ob vsaki zahtevi izvede prva. Priročnik je pri uvrstitvi nedvoumen: strežnik naj podpira razvoj, ni polnovreden spletni strežnik in naj se ne uporablja v javnem omrežju. Zato ga vežite na `localhost`, ne na `0.0.0.0`, sicer je lahko dosegljiv v podjetniškem ali hotelskem omrežju WiFi. Več o ukazni vrstici pod [PHP v ukazni vrstici](https://phpsos.de/sl/php/php-cli/).

## Docker: uradne slike PHP

Uradne slike obstajajo v več različicah: `cli` za ukazno vrstico, `apache` z Apacheem in mod_php, `fpm` za delovanje za Nginxom ali drugim proxyjem, poleg tega različice Alpine za majhne slike. Hiter začetek z Apacheem:

```bash
docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache
```

Slike vsebujejo predlogi `php.ini-development` in `php.ini-production` v imeniku `$PHP_INI_DIR`. Lokalno je razvojna predloga smiselna, ker prikazuje napake. Za produkcijo dokumentacija slik izrecno priporoča produkcijsko predlogo. Razširitve namestite s priloženimi pomožnimi skriptami `docker-php-ext-configure`, `docker-php-ext-install` in `docker-php-ext-enable`. Kako delujejo oznake in digesti, razlaga [Uradne slike PHP Docker](https://phpsos.de/sl/blog/offizielle-php-docker-images/).

## DDEV: pripravljena okolja za CMS in ogrodja

DDEV gradi na Dockerju in za projekt vzpostavi spletni strežnik, PHP, podatkovno bazo in pomožne storitve. Navodila za hiter začetek skoraj vedno sledijo istemu vzorcu:

```bash
ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch
```

Kot vrste projektov DDEV med drugim pozna `wordpress`, `typo3`, `shopware6`, `laravel`, `symfony`, `drupal11`, `magento2` in splošno vrsto `php`. Različico PHP določite v `.ddev/config.yaml`; po dokumentaciji so mogoče različice od 5.6 do 8.5, privzeta je 8.4:

```yaml
# .ddev/config.yaml (izvleček)
php_version: "8.3"
webserver_type: nginx-fpm   # druga možnost apache-fpm
```

Tako lokalno okolje ustreza živi različici, tudi če ta še ni najnovejša.

## Lokalni razvoj, stanje popravkov in PHP2Shell

Po PHP2Shell je več ponudnikov platform opozorilo na tipičen miselni spodrsljaj. Vercel po biltenu poudarja, da posodobitev lokalnega razvojnega okolja, kode aplikacije ali vtičnikov ne zadošča; odločilno je izvajalno okolje PHP, ki dejansko streže. Lokalno imeti PHP 8.4.27 strežnika z 8.4.26 ne ščiti.

Obratno razvojno okolje prinaša lastna tveganja, ki lahko preidejo v produkcijo:

1. **Razvojni ini v produkciji:** `display_errors` je v `php.ini-development` vklopljen. Če ta datoteka pride na strežnik, obiskovalci vidijo poti in sporočila o napakah. Glejte [Izklop izpisa napak v produkciji](https://phpsos.de/sl/blog/display-errors-produktion/).
2. **Pozabljene testne datoteke:** datoteke `phpinfo()`, izvozi podatkovne baze ali datoteke `.env` z dostopnimi podatki ne sodijo v namestitev.
3. **Odprti razvojni strežniki:** `php -S` ali vsebniki z objavljenimi vrati na računalnikih v omrežju.
4. **Zastarele slike:** lokalne slike se ne posodabljajo same od sebe; po varnostni izdaji PHP je treba znova zgraditi tudi razvojno okolje, da testi tečejo s popravljeno različico.

> **Nasvet:**
> Različico PHP določite na enem mestu, na primer v Dockerfile ali `.ddev/config.yaml`, in jo ob posodobitvah spreminjajte skupaj s konfiguracijo strežnika.

## Kako PHP SOS pomaga konkretno?

V [varnostni vzdrževalni pogodbi](https://phpsos.de/sl/leistungen/security-wartungsvertrag/) poskrbimo, da razvoj in obratovanje sovpadata:

- **Primerjava:** primerjamo različico PHP in razširitve razvojnega, testnega in živega okolja.
- **Potek posodobitev:** nove izdaje PHP se najprej namestijo v testnem okolju, nato v živo, vsakič s ponovnim zagonom.
- **Preverjanje namestitve:** pazimo, da na strežnik ne pridejo razvojni ini, testne datoteke ali dostopni podatki.
- **Dokumentacija:** kadar koli veste, katera različica teče kje.


## Pogosta vprašanja

**Ali smem vgrajeni spletni strežnik PHP uporabljati javno?**  
Ne. Priročnik PHP izrecno navaja, da je strežnik, zagnan s php -S, namenjen razvoju in naj se ne uporablja v javnem omrežju. Za obratovanje sodita PHP-FPM z Nginxom ali Apacheem.

**Kaj je DDEV?**  
DDEV je orodje, ki gradi na Dockerju in ustvarja pripravljena razvojna okolja za projekte PHP. Pozna vrste projektov za WordPress, TYPO3, Shopware 6, Laravel, Drupal in druge sisteme.

**Ali zadošča posodobiti lokalno različico PHP?**  
Ne. Proti vrzelim, kot je PHP2Shell, šteje izvajalno okolje PHP, ki dejansko streže, torej tisto na strežniku. Lokalno okolje pa naj ima isto različico, da so testi zanesljivi.

**Katero php.ini uporabim lokalno?**  
Lokalno je smiselna php.ini-development, ker prikazuje napake. V produkciji je treba uporabiti php.ini-production. Uradne slike Docker prinašajo obe predlogi.

## Viri

- [Priročnik PHP: vgrajeni spletni strežnik](https://www.php.net/manual/en/features.commandline.webserver.php)
- [Docker Official Image: PHP](https://hub.docker.com/_/php)
- [DDEV](https://ddev.com/)
