Īsi: PHP lokālai izstrādei ir trīs izplatīti ceļi: iebūvētais tīmekļa serveris (php -S) ātriem mēģinājumiem, oficiālie PHP Docker attēli atkārtoti izveidojamām vidēm un rīki, piemēram, DDEV, kas izveido gatavas projektu vides WordPress, TYPO3, Shopware vai Laravel. Izšķirošs ir ne tik daudz rīks, cik atbilstība: lokāli jādarbojas tai pašai PHP versijai ar tiem pašiem paplašinājumiem kā produkcijā. Drošībai gan galu galā vienmēr svarīga ir izpildes vide serverī.
Kāpēc atsevišķa izstrādes vide?
Izmaiņas veikt tieši produkcijas serverī ir riskanti: katra drukas kļūda uzreiz ir redzama klientiem, un testa faili labprāt paliek. Lokālā vide nošķir izmēģināšanu no ekspluatācijas. Tā vienlaikus ir vieta, kur vispirms tiek testētas jaunas PHP versijas un drošības atjauninājumi.
Uzņēmuma vadībai un IT vadītājam jautājums tāpēc nav par to, vai izstrādes vide ir, bet par to, vai tā atbilst produkcijas sistēmai. Lokālā vide ar PHP 8.4, kamēr produkcijā vēl darbojas 8.1, problēmas aizsedz, nevis parāda. Tas pats attiecas uz datubāzes versiju, tīmekļa serveri un paplašinājumiem, piemēram, intl, gd vai pdo_mysql: jau viens trūkstošs paplašinājums var novest pie tā, ka kļūda tiek pamanīta tikai produkcijā.
Iespēju pārskats
| Iespēja | Piemērota | Stiprās puses | Robežas |
|---|---|---|---|
Iebūvētais serveris php -S |
īsiem mēģinājumiem, maziem skriptiem | bez papildu programmatūras instalēšanas | nav Nginx vai Apache aizstājējs, nav paredzēts publiskiem tīkliem |
| Oficiālais Docker attēls | komandām, atkārtoti izveidojamām vidēm | versiju var noteikt ar tagu, tuvs konteineru darbībai | konfigurācija un vairāku konteineru sadarbība jāveido pašam |
| DDEV | CMS un ietvaru projektiem | gatavi projektu tipi, datubāze un tīmekļa serveris iekļauti | prasa Docker, savas konvencijas |
| Lokāli instalēts PHP | atsevišķiem izstrādātājiem | ātri, tieši | vairāku projektu versijas grūti uzturēt paralēli |
Iebūvētais tīmekļa serveris
Kopš PHP 5.4 komandrindā ir ietverts mazs tīmekļa serveris. Tas startē pašreizējā direktorijā vai ar -t citā dokumentu direktorijā:
php -S localhost:8000 -t public/
Pēc izvēles varat norādīt maršrutētāja skriptu, kas katrā pieprasījumā darbojas pirmais. Rokasgrāmata klasifikācijā ir nepārprotama: serveris paredzēts izstrādes atbalstam, nav pilnvērtīgs tīmekļa serveris un nav lietojams publiskā tīklā. Tāpēc piesaistiet to localhost, nevis 0.0.0.0, citādi tas zināmos apstākļos var būt sasniedzams uzņēmuma vai viesnīcas WLAN. Vairāk par komandrindu sadaļā PHP komandrindā.
Docker: oficiālie PHP attēli
Oficiālie attēli ir vairākos variantos: cli komandrindai, apache ar Apache un mod_php, fpm darbībai aiz Nginx vai cita starpniekservera, kā arī Alpine varianti maziem attēliem. Ātrs starts ar Apache:
docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache
Attēli satur veidnes php.ini-development un php.ini-production direktorijā $PHP_INI_DIR. Lokāli saprātīga ir izstrādes veidne, jo tā rāda kļūdas. Produkcijai attēla dokumentācija skaidri iesaka produkcijas veidni. Paplašinājumus instalējat ar komplektā iekļautajiem palīgskriptiem docker-php-ext-configure, docker-php-ext-install un docker-php-ext-enable. Kā darbojas tagi un digest, izskaidro Oficiālie PHP Docker attēli.
DDEV: gatavas vides CMS un ietvariem
DDEV balstās uz Docker un projektam iestata tīmekļa serveri, PHP, datubāzi un palīgpakalpojumus. Ātrās sākšanas pamācības gandrīz vienmēr seko vienam paraugam:
ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch
Kā projektu tipus DDEV pazīst, cita starpā, wordpress, typo3, shopware6, laravel, symfony, drupal11, magento2 un vispārīgo tipu php. PHP versiju nosaka failā .ddev/config.yaml; saskaņā ar dokumentāciju iespējamas versijas no 5.6 līdz 8.5, noklusējums ir 8.4:
# .ddev/config.yaml (izvilkums)
php_version: "8.3"
webserver_type: nginx-fpm # alternatīva apache-fpm
Tā lokālā vide atbilst produkcijas versijai, pat ja tā vēl nav jaunākā.
Lokālā izstrāde, ielāpu stāvoklis un PHP2Shell
Pēc PHP2Shell vairāki platformu sniedzēji norādīja uz tipisku domāšanas kļūdu. Vercel saskaņā ar biļetenu uzsver, ka ar lokālās izstrādes vides, lietojumprogrammas koda vai spraudņu atjaunināšanu nepietiek; izšķiroša ir PHP izpildes vide, kas patiešām apkalpo. Lokāli būt PHP 8.4.27 serveri ar 8.4.26 neaizsargā.
Savukārt izstrādes vide nes arī savus riskus, kas var nokļūt produkcijā:
- Izstrādes ini produkcijā:
display_errorsfailāphp.ini-developmentir ieslēgts. Ja šis fails nonāk serverī, apmeklētāji redz ceļus un kļūdu ziņojumus. Skatiet Kļūdu izvades izslēgšana produkcijā. - Aizmirsti testa faili:
phpinfo()faili, datubāzes dampi vai.envfaili ar pieejas datiem nepieder izvietošanai. - Atvērti izstrādes serveri:
php -Svai konteineri ar publicētiem portiem datoros tīklā. - Novecojuši attēli: lokālie attēli neatjaunojas paši; pēc PHP drošības izlaiduma arī izstrādes vide jāpārbūvē, lai testi darbotos ar labojumu saturošo versiju.
PHP versiju nosakiet vienā vietā, piemēram, Dockerfile vai .ddev/config.yaml, un atjauninājumu gadījumā mainiet to kopā ar servera konfigurāciju.
Kā PHP SOS palīdz konkrēti?
Drošības uzturēšanas līgumā mēs rūpējamies, lai izstrāde un ekspluatācija saskanētu:
- Salīdzināšana: mēs salīdzinām izstrādes, testa un produkcijas vides PHP versiju un paplašinājumus.
- Atjaunināšanas norise: jaunie PHP izlaidumi vispirms tiek ieviesti testa vidē, pēc tam produkcijā, katrreiz ar pārstartēšanu.
- Izvietošanas pārbaude: mēs sekojam, lai serverī nenonāktu izstrādes ini, testa faili vai pieejas dati.
- Dokumentācija: jūs jebkurā laikā zināt, kura versija kur darbojas.
Biežāk uzdotie jautājumi
Vai drīkst iebūvēto PHP tīmekļa serveri lietot publiski?
Nē. PHP rokasgrāmata skaidri norāda, ka ar php -S startētais serveris kalpo izstrādei un nav lietojams publiskā tīklā. Darbībai paredzēts PHP-FPM ar Nginx vai Apache.
Kas ir DDEV?
DDEV ir rīks, kas balstās uz Docker un izveido gatavas izstrādes vides PHP projektiem. Tas pazīst projektu tipus WordPress, TYPO3, Shopware 6, Laravel, Drupal un citām sistēmām.
Vai pietiek atjaunināt lokālo PHP versiju?
Nē. Pret ievainojamībām, piemēram, PHP2Shell, svarīga ir PHP izpildes vide, kas patiešām apkalpo, tātad tā, kas atrodas serverī. Taču lokālajai videi vajadzētu būt tai pašai versijai, lai testi būtu ticami.
Kādu php.ini lietot lokāli?
Lokāli saprātīgs ir php.ini-development, jo tas rāda kļūdas. Produkcijā jālieto php.ini-production. Oficiālie Docker attēli satur abas veidnes.