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:
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.
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:
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.
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:
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:
# .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:
- Razvojni ini v produkciji:
display_errorsje vphp.ini-developmentvklopljen. Če ta datoteka pride na strežnik, obiskovalci vidijo poti in sporočila o napakah. Glejte Izklop izpisa napak v produkciji. - Pozabljene testne datoteke: datoteke
phpinfo(), izvozi podatkovne baze ali datoteke.envz dostopnimi podatki ne sodijo v namestitev. - Odprti razvojni strežniki:
php -Sali vsebniki z objavljenimi vrati na računalnikih v omrežju. - 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.
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 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.