Aktuālā situācija: PHP2Shell. Divas kritiskas PHP ievainojamības (CVSS 9.2) ļauj izpildīt ļaunprātīgu kodu bez pieteikšanās. Ielāpi kopš 21.10.2026.Kas jādara tagad →

PHP lokāla izstrāde: Docker, DDEV un citi

PHP lokālai izstrādei ir iebūvētais tīmekļa serveris, oficiālie Docker attēli un rīki, piemēram, DDEV. Svarīgi, lai lokāli darbotos tā pati PHP versija kā produkcijā.

Aktuāls uz 4 min lasīšanas laiksPHP zināšanas

Ī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ā:

  1. Izstrādes ini produkcijā: display_errors failā php.ini-development ir 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ā.
  2. Aizmirsti testa faili: phpinfo() faili, datubāzes dampi vai .env faili ar pieejas datiem nepieder izvietošanai.
  3. Atvērti izstrādes serveri: php -S vai konteineri ar publicētiem portiem datoros tīklā.
  4. 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.
Padoms

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.

Avoti

Tūlītējs kontakts

Katra stunda ir svarīga. Rakstiet mums tūlīt.

Īsi aprakstiet sistēmu, PHP versiju un novēroto. Mēs sazināsimies, noskaidrosim situāciju un strādāsim attālināti, līdz incidents ir slēgts un dokumentēts.

Tūlītēja palīdzība