Текуща ситуация: PHP2Shell. Две критични уязвимости в PHP (CVSS 9,2) позволяват злонамерен код без вход. Корекции от 21.10.2026 г.Какво да направите сега →

Локална разработка с PHP: Docker, DDEV и други

За локалната разработка с PHP има вграден уеб сървър, официални Docker образи и инструменти като DDEV. Важно е локално да работи същата версия на PHP като в продукция.

Актуалност 5 мин. четенеЗнания за PHP

Накратко: За локална разработка с PHP има три разпространени пътя: вграденият уеб сървър (php -S) за бързи опити, официалните Docker образи на PHP за възпроизводими среди и инструменти като DDEV, които създават готови проектни среди за WordPress, TYPO3, Shopware или Laravel. Решаващо е не толкова инструментът, колкото съвпадението: локално трябва да работи същата версия на PHP със същите разширения като в продукция. За сигурността в крайна сметка винаги е от значение средата за изпълнение на сървъра.

Защо отделна среда за разработка?

Промените директно на живия сървър са рисковани: всяка грешка в написването е веднага видима за клиентите, а тестовите файлове лесно остават. Локалната среда отделя експериментирането от експлоатацията. Тя е същевременно мястото, където първо се тестват новите версии на PHP и актуализациите за сигурност.

За ръководството и ИТ директорите въпросът затова не е дали има среда за разработка, а дали тя съответства на живата система. Локална среда с PHP 8.4, докато в продукция още работи 8.1, замъглява проблемите, вместо да ги показва. Същото важи за версията на базата данни, уеб сървъра и разширения като intl, gd или pdo_mysql: дори едно липсващо разширение може да доведе до това грешката да проличи едва в продукция.

Опциите накратко

Опция Подходяща за Силни страни Граници
Вграден сървър php -S кратки опити, малки скриптове без инсталиране на друг софтуер не е заместител на Nginx или Apache, не за публични мрежи
Официален Docker образ екипи, възпроизводими среди версията се определя с таг, близо до работа с контейнери конфигурацията и взаимодействието на няколко контейнера се правят сами
DDEV проекти с CMS и фреймуърци готови типове проекти, включени база данни и уеб сървър изисква Docker, собствени конвенции
Локално инсталиран PHP отделни разработчици бързо, директно версиите на няколко проекта трудно се поддържат паралелно

Вграденият уеб сървър

От PHP 5.4 командният ред съдържа малък уеб сървър. Той стартира в текущата директория или с -t в друга директория на документите:

php -S localhost:8000 -t public/

По желание подавате router скрипт, който се изпълнява първи при всяка заявка. Ръководството е недвусмислено в оценката: сървърът трябва да подпомага разработката, не е пълноценен уеб сървър и не бива да се използва в публична мрежа. Затова го свързвайте към localhost, не към 0.0.0.0, иначе при някои обстоятелства е достъпен във фирмената или хотелската Wi-Fi мрежа. Повече за командния ред има в PHP в командния ред.

Docker: официални образи на PHP

Официалните образи съществуват в няколко варианта: cli за командния ред, apache с Apache и mod_php, fpm за работа зад Nginx или друго прокси, както и варианти с Alpine за малки образи. Бърз старт с Apache:

docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.4-apache

Образите съдържат шаблоните php.ini-development и php.ini-production в директорията $PHP_INI_DIR. Локално е разумен шаблонът за разработка, защото показва грешките. За продукция документацията на образа изрично препоръчва шаблона за продукция. Разширенията се инсталират с доставените помощни скриптове docker-php-ext-configure, docker-php-ext-install и docker-php-ext-enable. Как работят таговете и digest, обяснява Официални Docker образи на PHP.

DDEV: готови среди за CMS и фреймуърци

DDEV се основава на Docker и настройва за един проект уеб сървър, PHP, база данни и помощни услуги. Ръководствата за бърз старт почти винаги следват един и същ модел:

ddev config --project-type=wordpress --docroot=web
ddev start
ddev composer install
ddev launch

Като типове проекти DDEV познава, наред с други, wordpress, typo3, shopware6, laravel, symfony, drupal11, magento2 и общия тип php. Версията на PHP се определя в .ddev/config.yaml; според документацията са възможни версии от 5.6 до 8.5, по подразбиране е 8.4:

# .ddev/config.yaml (откъс)
php_version: "8.3"
webserver_type: nginx-fpm   # алтернативно apache-fpm

Така локалната среда съответства на версията в продукция, дори тя още да не е най-новата.

Локална разработка, състояние на пачовете и PHP2Shell

След PHP2Shell няколко доставчици на платформи обърнаха внимание на типична грешка в разсъжденията. Vercel подчертава според бюлетина, че актуализацията на локалната среда за разработка, на кода на приложението или на плъгините не е достатъчна; решаваща е PHP средата за изпълнение, която действително обслужва заявките. Ако локално имате PHP 8.4.27, това не защитава сървъра с 8.4.26.

Обратно, средата за разработка носи собствени рискове, които могат да мигрират към продукцията:

  1. Ini за разработка в продукция: display_errors е включен в php.ini-development. Ако този файл попадне на сървъра, посетителите виждат пътища и съобщения за грешки. Вижте Изключване на извеждането на грешки в продукция.
  2. Забравени тестови файлове: файловете phpinfo(), дъмповете на бази данни или файловете .env с данни за достъп не принадлежат към внедряването.
  3. Отворени сървъри за разработка: php -S или контейнери с публикувани портове на компютри в мрежата.
  4. Остарели образи: Локалните образи не се актуализират сами; след издание на PHP за сигурност и средата за разработка трябва да се изгради наново, за да се тества с коригираната версия.
Съвет

Определяйте версията на PHP на едно място, например в Dockerfile или в .ddev/config.yaml, и я променяйте при актуализации заедно с конфигурацията на сървъра.

Как помага PHP SOS конкретно?

В договора за поддръжка на сигурността се грижим разработката и експлоатацията да си пасват:

  • Съпоставяне: Сравняваме версията на PHP и разширенията в средите за разработка, тестване и продукция.
  • Процес на актуализиране: Новите издания на PHP първо се внедряват в тестовата среда, после в продукция, всеки път с рестартиране.
  • Проверка на внедряването: Следим в сървъра да не попадат ini за разработка, тестови файлове или данни за достъп.
  • Документация: Знаете по всяко време коя версия къде работи.

Често задавани въпроси

Мога ли да използвам вградения уеб сървър на PHP публично?

Не. Ръководството на PHP изрично казва, че сървърът, стартиран с php -S, служи за разработка и не бива да се използва в публична мрежа. За експлоатация са нужни PHP-FPM с Nginx или Apache.

Какво е DDEV?

DDEV е инструмент, изграден върху Docker, който създава готови среди за разработка за PHP проекти. Той познава типове проекти за WordPress, TYPO3, Shopware 6, Laravel, Drupal и други системи.

Достатъчно ли е да актуализирам локалната версия на PHP?

Не. Срещу уязвимости като PHP2Shell важи PHP средата за изпълнение, която действително обслужва заявките, т.е. тази на сървъра. Локалната среда обаче трябва да е със същата версия, за да са тестовете смислени.

Кой php.ini да използвам локално?

Локално е разумно да се ползва php.ini-development, защото показва грешките. В продукция трябва да се използва php.ini-production. Официалните Docker образи носят и двата шаблона.

Източници

Незабавен контакт

Всеки час има значение. Пишете ни сега.

Опишете накратко системата, версията на PHP и какво сте забелязали. Ние се свързваме с Вас, уточняваме ситуацията и работим отдалечено, докато инцидентът бъде приключен и документиран.

Незабавна помощ