Röviden: A PHP helyi fejlesztésére három bevett út létezik: a beépített webszerver (php -S) a gyors kísérletekhez, a hivatalos PHP Docker-képek az újraépíthető környezetekhez, és az olyan eszközök, mint a DDEV, amelyek kész projektkörnyezeteket hoznak létre WordPresshez, TYPO3-hoz, Shopwarehez vagy Laravelhez. Az eszköznél fontosabb az egyezés: helyben ugyanannak a PHP-verziónak kell futnia ugyanazokkal a bővítményekkel, mint élesben. A biztonság szempontjából a végén azonban mindig a szerveren lévő futtatókörnyezet számít.
Miért kell saját fejlesztői környezet?
A módosításokat közvetlenül az éles szerveren végezni kockázatos: minden elírás azonnal látható az ügyfelek számára, a tesztfájlok pedig szívesen ottmaradnak. A helyi környezet elválasztja a kipróbálást az üzemtől. Egyúttal ez az a hely, ahol az új PHP-verziókat és a biztonsági frissítéseket először tesztelik.
Az ügyvezetés és az IT-vezetés számára ezért nem az a kérdés, hogy van-e fejlesztői környezet, hanem hogy megfelel-e az éles rendszernek. Egy PHP 8.4-es helyi környezet, miközben élesben még a 8.1 fut, elfedi a problémákat, ahelyett hogy megmutatná őket. Ugyanez érvényes az adatbázis-verzióra, a webszerverre és az olyan bővítményekre, mint az intl, a gd vagy a pdo_mysql: egyetlen hiányzó bővítmény is oda vezethet, hogy egy hiba csak élesben tűnik fel.
A lehetőségek áttekintése
| Lehetőség | Alkalmas | Erősségek | Korlátok |
|---|---|---|---|
Beépített szerver php -S |
rövid kísérletekhez, kis szkriptekhez | további szoftver telepítése nélkül | nem helyettesíti az Nginxet vagy az Apache-ot, nem nyilvános hálózatokra való |
| Hivatalos Docker-kép | csapatoknak, újraépíthető környezetekhez | a verzió taggel rögzíthető, közel a konténeres üzemhez | a konfigurációt és több konténer együttműködését magának kell megépíteni |
| DDEV | CMS- és keretrendszer-projektekhez | kész projekttípusok, adatbázis és webszerver is benne van | Dockert feltételez, saját konvenciói vannak |
| Helyben telepített PHP | egyéni fejlesztőknek | gyors, közvetlen | több projekt verzióit nehéz párhuzamosan tartani |
A beépített webszerver
A PHP 5.4 óta a parancssor egy kis webszervert tartalmaz. Az aktuális könyvtárban indul, vagy a -t kapcsolóval egy másik dokumentumkönyvtárban:
php -S localhost:8000 -t public/
Opcionálisan megadhat egy router-szkriptet, amely minden kérésnél először lefut. A kézikönyv a besorolásnál egyértelmű: a szerver a fejlesztést hivatott támogatni, nem teljes értékű webszerver, és nem szabad nyilvános hálózatban használni. Kösse ezért a localhost-hoz, nem a 0.0.0.0-hoz, különben adott esetben a céges vagy a szállodai Wi-Fin elérhető. Többet a parancssorról a PHP a parancssorban oldalon.
Docker: hivatalos PHP-képek
A hivatalos képek több változatban léteznek: cli a parancssorhoz, apache Apache-csal és mod_php-val, fpm az Nginx vagy más proxy mögötti üzemhez, emellett Alpine-változatok kis képekhez. Gyors indulás Apache-csal:
docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache
A képek a php.ini-development és a php.ini-production sablont tartalmazzák a $PHP_INI_DIR könyvtárban. Helyben a fejlesztői sablon az ésszerű, mert megjeleníti a hibákat. Éles üzemre a képdokumentáció kifejezetten az éles sablont ajánlja. A bővítményeket a mellékelt docker-php-ext-configure, docker-php-ext-install és docker-php-ext-enable segédszkriptekkel telepítheti. Hogyan működnek a tagek és a digestek, azt a Hivatalos PHP Docker-képek cikk magyarázza.
DDEV: kész környezetek CMS-hez és keretrendszerekhez
A DDEV Dockerre épül, és egy projekthez webszervert, PHP-t, adatbázist és segédszolgáltatásokat állít be. A gyorsindítási útmutatók szinte mindig ugyanazt a mintát követik:
ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch
Projekttípusként a DDEV többek között a wordpress, typo3, shopware6, laravel, symfony, drupal11, magento2 típust és az általános php típust ismeri. A PHP-verziót a .ddev/config.yaml fájlban rögzíti; a dokumentáció szerint az 5.6-tól a 8.5-ig lehetséges, az alapértelmezés a 8.4:
# .ddev/config.yaml (részlet)
php_version: "8.3"
webserver_type: nginx-fpm # másik lehetőség: apache-fpm
Így a helyi környezet megfelel az éles verziónak, akkor is, ha az még nem a legújabb.
Helyi fejlesztés, javítási állapot és PHP2Shell
A PHP2Shell után több platformszolgáltató rámutatott egy tipikus gondolkodási hibára. A Vercel a bulletin szerint hangsúlyozza, hogy a helyi fejlesztői környezet, az alkalmazáskód vagy a bővítmények frissítése nem elég; a döntő az a PHP-futtatókörnyezet, amely ténylegesen kiszolgál. Ha helyben PHP 8.4.27 van, az nem védi a 8.4.26-os szervert.
Fordítva, a fejlesztői környezet saját kockázatokat hoz, amelyek átvándorolhatnak az éles üzembe:
- Fejlesztői ini az éles üzemben: a
display_errorsaphp.ini-development-ben be van kapcsolva. Ha ez a fájl a szerverre kerül, a látogatók útvonalakat és hibaüzeneteket látnak. Lásd Hibakimenet kikapcsolása éles üzemben. - Elfelejtett tesztfájlok:
phpinfo()-fájlok, adatbázis-dumpok vagy hozzáférési adatokat tartalmazó.envfájlok nem valók a telepítésbe. - Nyitott fejlesztői szerverek: a
php -Svagy közzétett portú konténerek a hálózatban lévő gépeken. - Elavult képek: A helyi képek maguktól nem frissülnek; egy PHP biztonsági kiadás után a fejlesztői környezetet is újra kell építeni, hogy a tesztek a javított verzióval fussanak.
A PHP-verziót egy helyen rögzítse, például a Dockerfile-ban vagy a .ddev/config.yaml-ban, és frissítéskor a szerverkonfigurációval együtt módosítsa.
Hogyan segít konkrétan a PHP SOS?
A biztonsági karbantartási szerződés keretében gondoskodunk arról, hogy a fejlesztés és az üzem illeszkedjen egymáshoz:
- Egyeztetés: Összevetjük a fejlesztői, teszt- és éles környezet PHP-verzióját és bővítményeit.
- Frissítési folyamat: Az új PHP-kiadásokat először a tesztkörnyezetben telepítjük, aztán élesben, mindkétszer újraindítással.
- A telepítés ellenőrzése: Ügyelünk arra, hogy fejlesztői ini, tesztfájlok vagy hozzáférési adatok ne kerüljenek a szerverre.
- Dokumentáció: Ön bármikor tudja, melyik verzió hol fut.
Gyakori kérdések
Használhatom nyilvánosan a PHP beépített webszerverét?
Nem. A PHP-kézikönyv kifejezetten kimondja, hogy a php -S paranccsal indított szerver a fejlesztést szolgálja, és nem szabad nyilvános hálózatban használni. Az éles üzemhez a PHP-FPM tartozik Nginxszel vagy Apache-csal.
Mi a DDEV?
A DDEV egy Dockerre épülő eszköz, amely kész fejlesztői környezeteket hoz létre PHP-projektekhez. Ismeri a WordPress, a TYPO3, a Shopware 6, a Laravel, a Drupal és további rendszerek projekttípusait.
Elég a helyi PHP-verziót frissíteni?
Nem. Az olyan rések ellen, mint a PHP2Shell, az a PHP-futtatókörnyezet számít, amely ténylegesen kiszolgál, vagyis a szerveren lévő. A helyi környezetnek viszont ugyanazt a verziót kell használnia, hogy a tesztek mérvadóak legyenek.
Melyik php.ini-t használjam helyben?
Helyben a php.ini-development értelmes, mert megjeleníti a hibákat. Éles üzemben a php.ini-production használandó. A hivatalos Docker-képek mindkét sablont tartalmazzák.