Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

Lokalni razvoj PHP-a: Docker, DDEV i drugi alati

Za lokalni razvoj PHP-a postoje ugrađeni web-poslužitelj, službene Docker slike i alati poput DDEV-a. Važno je da lokalno radi ista verzija PHP-a kao i uživo.

Stanje 4 min čitanjaPHP znanje

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:

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.

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:

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.

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:

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:

# .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.
  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 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

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć