# Dezvoltarea PHP locală: Docker, DDEV și altele

> Dezvoltarea PHP locală cu serverul integrat, Docker sau DDEV: puncte forte, limite, exemple și cum rămân dezvoltarea și producția la fel în privința stării de patch.

Sursa: https://phpsos.de/ro/php/php-lokal-entwickeln/  
Stadiu: 25.10.2026  
Furnizor: PHP SOS, Asistență de urgență PHP și securitatea serverelor. Ajutor imediat pe WhatsApp: https://wa.me/491736494914?text=Bun%C4%83%20ziua%2C%20PHP%20SOS%2C%20avem%20nevoie%20de%20ajutor%20cu%20serverul%20nostru%20PHP.%20Firma%3A%20%E2%80%A6%20Site%3A%20%E2%80%A6

**Pe scurt:** Pentru a dezvolta PHP local există trei căi uzuale: serverul web integrat (`php -S`) pentru încercări rapide, imaginile Docker PHP oficiale pentru medii reproductibile și instrumente precum DDEV, care creează medii de proiect gata făcute pentru WordPress, TYPO3, Shopware sau Laravel. Decisivă este mai puțin unealta și mai mult concordanța: local ar trebui să ruleze aceeași versiune PHP, cu aceleași extensii, ca în producție. Pentru securitate contează însă la urmă întotdeauna mediul de execuție de pe server.

## De ce un mediu de dezvoltare propriu?

A face modificări direct pe serverul live este riscant: orice greșeală de tastare este imediat vizibilă clienților, iar fișierele de test rămân de bunăvoie pe loc. Un mediu local separă experimentul de exploatare. Este totodată locul în care versiunile noi de PHP și actualizările de securitate se testează mai întâi.

Pentru conducere și pentru responsabilii IT, întrebarea nu este deci dacă există un mediu de dezvoltare, ci dacă el corespunde sistemului live. Un mediu local cu PHP 8.4, în timp ce în producție rulează încă 8.1, ascunde problemele în loc să le arate. Același lucru este valabil pentru versiunea bazei de date, serverul web și extensii precum `intl`, `gd` sau `pdo_mysql`: chiar o singură extensie lipsă poate face ca o eroare să iasă la iveală abia în producție.

## Opțiunile, pe scurt

| Opțiune | Potrivită pentru | Puncte forte | Limite |
|---|---|---|---|
| Serverul integrat `php -S` | încercări scurte, scripturi mici | fără instalarea altor programe | nu înlocuiește Nginx sau Apache, nu pentru rețele publice |
| Imagine Docker oficială | echipe, medii reproductibile | versiune fixabilă prin tag, aproape de exploatarea în containere | configurarea și conlucrarea mai multor containere trebuie construite singur |
| DDEV | proiecte CMS și framework | tipuri de proiect gata făcute, bază de date și server web incluse | presupune Docker, convenții proprii |
| PHP instalat local | dezvoltatori individuali | rapid, direct | versiunile mai multor proiecte sunt greu de menținut în paralel |

## Serverul web integrat

Din PHP 5.4, linia de comandă conține un mic server web. El pornește în directorul curent sau, cu `-t`, într-un alt director de documente:

```bash
php -S localhost:8000 -t public/
```

Opțional transmiteți un script router, care rulează primul la fiecare cerere. Manualul este neechivoc în încadrare: serverul trebuie să sprijine dezvoltarea, nu este un server web complet și nu trebuie folosit într-o rețea publică. Legați-l de aceea la `localhost`, nu la `0.0.0.0`, altfel poate fi accesibil, în anumite condiții, în rețeaua Wi-Fi a firmei sau a hotelului. Mai multe despre linia de comandă la [PHP în linia de comandă](https://phpsos.de/ro/php/php-cli/).

## Docker: imaginile PHP oficiale

Imaginile oficiale există în mai multe variante: `cli` pentru linia de comandă, `apache` cu Apache și mod_php, `fpm` pentru exploatarea în spatele Nginx sau al altui proxy, plus variante Alpine pentru imagini mici. Un start rapid cu Apache:

```bash
docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache
```

Imaginile conțin șabloanele `php.ini-development` și `php.ini-production` în directorul `$PHP_INI_DIR`. Local este potrivit șablonul de dezvoltare, deoarece afișează erorile. Pentru producție, documentația imaginii recomandă explicit șablonul de producție. Extensiile le instalați cu scripturile auxiliare livrate `docker-php-ext-configure`, `docker-php-ext-install` și `docker-php-ext-enable`. Cum funcționează tag-urile și digest-urile explică [Imaginile Docker PHP oficiale](https://phpsos.de/ro/blog/offizielle-php-docker-images/).

## DDEV: medii gata făcute pentru CMS și framework-uri

DDEV se construiește pe Docker și configurează pentru un proiect serverul web, PHP, baza de date și serviciile auxiliare. Ghidurile de pornire rapidă urmează aproape întotdeauna același tipar:

```bash
ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch
```

Ca tipuri de proiect, DDEV cunoaște, printre altele, `wordpress`, `typo3`, `shopware6`, `laravel`, `symfony`, `drupal11`, `magento2` și tipul general `php`. Versiunea PHP o stabiliți în `.ddev/config.yaml`; potrivit documentației sunt posibile versiuni de la 5.6 la 8.5, iar valoarea implicită este 8.4:

```yaml
# .ddev/config.yaml (extras)
php_version: "8.3"
webserver_type: nginx-fpm   # alternativ apache-fpm
```

Astfel, mediul local corespunde versiunii din producție, chiar dacă aceasta nu este încă cea mai nouă.

## Dezvoltarea locală, starea de patch și PHP2Shell

După PHP2Shell, mai mulți furnizori de platforme au atras atenția asupra unei greșeli tipice de gândire. Vercel subliniază, potrivit buletinului, că nu ajunge o actualizare a mediului de dezvoltare local, a codului aplicației sau a plugin-urilor; decisiv este mediul de execuție PHP care livrează efectiv. A avea local PHP 8.4.27 nu protejează serverul cu 8.4.26.

În sens invers, mediul de dezvoltare aduce riscuri proprii, care pot migra în producție:

1. **Ini de dezvoltare în producție:** `display_errors` este activat în `php.ini-development`. Dacă acest fișier ajunge pe server, vizitatorii văd căi și mesaje de eroare. A se vedea [Dezactivarea afișării erorilor în producție](https://phpsos.de/ro/blog/display-errors-produktion/).
2. **Fișiere de test uitate:** fișierele `phpinfo()`, dump-urile de baze de date sau fișierele `.env` cu date de acces nu au ce căuta în deployment.
3. **Servere de dezvoltare deschise:** `php -S` sau containere cu porturi publicate pe calculatoare din rețea.
4. **Imagini vechi:** imaginile locale nu se actualizează de la sine; după o lansare de securitate PHP, și mediul de dezvoltare trebuie reconstruit, pentru ca testele să ruleze cu versiunea corectată.

> **Sfat:**
> Stabiliți versiunea PHP într-un singur loc, de exemplu în Dockerfile sau în `.ddev/config.yaml`, și modificați-o la actualizări împreună cu configurația serverului.

## Cum ajută PHP SOS concret?

În [contractul de mentenanță de securitate](https://phpsos.de/ro/leistungen/security-wartungsvertrag/) ne asigurăm că dezvoltarea și exploatarea se potrivesc:

- **Compararea:** Comparăm versiunea PHP și extensiile mediilor de dezvoltare, de test și de producție.
- **Fluxul de actualizare:** Lansările PHP noi sunt instalate mai întâi în mediul de test, apoi în producție, de fiecare dată cu repornire.
- **Verificarea deployment-ului:** Urmărim ca nicio ini de dezvoltare, niciun fișier de test și nicio dată de acces să nu ajungă pe server.
- **Documentația:** Știți oricând ce versiune rulează unde.


## Întrebări frecvente

**Am voie să folosesc serverul web PHP integrat în mod public?**  
Nu. Manualul PHP spune explicit că serverul pornit cu php -S servește dezvoltării și nu trebuie folosit într-o rețea publică. Pentru exploatare sunt potrivite PHP-FPM cu Nginx sau Apache.

**Ce este DDEV?**  
DDEV este un instrument construit pe Docker, care creează medii de dezvoltare gata făcute pentru proiecte PHP. Cunoaște tipuri de proiect pentru WordPress, TYPO3, Shopware 6, Laravel, Drupal și alte sisteme.

**Este suficient să actualizez versiunea PHP locală?**  
Nu. Împotriva vulnerabilităților precum PHP2Shell contează mediul de execuție PHP care livrează efectiv, adică cel de pe server. Mediul local ar trebui însă să aibă aceeași versiune, pentru ca testele să fie relevante.

**Ce php.ini folosesc local?**  
Local este potrivit php.ini-development, deoarece afișează erorile. În producție trebuie folosit php.ini-production. Imaginile Docker oficiale vin cu ambele șabloane.

## Surse

- [Manualul PHP: serverul web integrat](https://www.php.net/manual/en/features.commandline.webserver.php)
- [Docker Official Image: PHP](https://hub.docker.com/_/php)
- [DDEV](https://ddev.com/)
