Настройка PHP 7 окружения на веб-сервере

Раздел: Разработка на PHP -> Инструменты разработки PHP

Настройка PHP 7 для веб-сервера: практические решения

Как выбрать и настроить базовую версию PHP 7 на сервере с Ubuntu?

Основное эффективное решение

Использование репозитория ppa:ondrej/php позволяет установить любую версию PHP 7.x (например, 7.0, 7.1, 7.2, 7.3, 7.4) и переключаться между ними. Это наиболее гибкий способ для серверов под управлением Ubuntu/Debian.

sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.4 php7.4-fpm php7.4-cli php7.4-common php7.4-mbstring php7.4-xml php7.4-mysql

Php 7 server (php 7 сервер (версия и настройки))

После установки проверьте версию:

php -v
# PHP 7.4.33 (cli) (built: Feb 15 2023 10:22:03) ( NTS )

Основной файл конфигурации - /etc/php/7.4/cli/php.ini для CLI и /etc/php/7.4/fpm/php.ini для FPM. Измените параметры в соответствии с требованиями проекта.

Типичные ошибки и проблемы:

  • Конфликт версий после установки нескольких PHP - используйте update-alternatives для выбора активной версии CLI.
  • Отсутствие модуля для работы с БД - установите соответствующий пакет (например, php7.4-mysql).
  • Ошибки при переключении FPM - перезапускайте службу после изменения конфигурации: sudo systemctl restart php7.4-fpm.

Цель использования: получить стабильную и контролируемую среду для разработки или продакшена с поддержкой конкретной минорной версии PHP 7.

Как переключиться между версиями PHP 7.x на сервере без переустановки?

Используйте update-alternatives для управления симлинками. Например, после установки PHP 7.2 и 7.4:

sudo update-alternatives --config php
# Выберите номер из списка для нужной версии

Для FPM аналогично: sudo update-alternatives --config php-fpm.sock или переключите службу вручную.

Возможные трудности:

  • После переключения CLI может остаться старая версия в PATH - проверьте which php.
  • Модули для разных версий несовместимы - требуется установка соответствующих пакетов (например, php7.2-xml).

Этот вариант полезен, когда нужно временно протестировать проект на другой версии или поддерживать совместимость с legacy-кодом.

Как настроить PHP-FPM для высоконагруженного проекта?

Оптимизация пула FPM. Основные параметры в файле /etc/php/7.4/fpm/pool.d/www.conf:

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

Для статического режима:

pm = static
pm.max_children = 20

Перезагрузите FPM: sudo systemctl reload php7.4-fpm.

Распространённые ошибки:

  • Слишком высокое значение pm.max_children при недостатке памяти - используйте pm.max_requests для предотвращения утечек памяти.
  • Неверный режим pm для конкретной нагрузки - тестируйте с помощью ab или wrk.

Цель: обеспечить стабильную работу при большом количестве одновременных запросов.

Как оптимизировать OpCache для PHP 7?

Включите и настройте OpCache в php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.validate_timestamps=0

Для продакшена validate_timestamps=0 даёт максимальную производительность, но требует ручного сброса кэша при обновлении файлов.

Проблемы:

  • Кэш не обновляется при изменении файлов - устанавливайте validate_timestamps=1 и уменьшите revalidate_freq.
  • Недостаточный memory_consumption - отслеживайте через opcache_get_status().

Используется для ускорения выполнения PHP-скриптов за счёт кэширования скомпилированного байт-кода.

Как установить необходимые расширения для PHP 7 из репозитория?

Расширения устанавливаются отдельными пакетами. Например, для работы с Redis:

sudo apt install php7.4-redis

Проверьте подключённые модули:

php -m | grep redis
# redis

Если расширение не в репозитории, используйте pecl:

sudo pecl install redis-5.3.7
# Затем добавьте extension=redis.so в php.ini

Трудности:

  • Конфликт версий - для PHP 7.4 может потребоваться старая версия PECL-пакета.
  • Отсутствие заголовочных файлов - установите php7.4-dev.

Необходимость в расширениях возникает при подключении к внешним сервисам (Memcached, MongoDB, Redis).

Как настроить php.ini для разработки и продакшена?

Создайте отдельные конфиги для окружений. Для разработки:

error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
memory_limit = 256M
max_execution_time = 300

Для продакшена:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
log_errors = On
memory_limit = 128M
max_execution_time = 30

Используйте .user.ini в корне проекта для локальных переопределений.

Ошибки:

  • Включённый display_errors на проде - угроза безопасности.
  • Слишком низкий memory_limit - скрипты аварийно завершаются.

Разделение конфигураций позволяет безопасно тестировать и эксплуатировать приложение.

Расширенные примеры конфигурации PHP 7 сервера

Пример 1. Полный php.ini для продакшена (PHP 7.4)

Пример
[PHP]
expose_php = Off
max_execution_time = 30
max_input_time = 60
memory_limit = 256M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
log_errors = On
file_uploads = On
upload_max_filesize = 64M
post_max_size = 68M
date.timezone = Europe/Moscow

[opcache]
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 20000
opcache.revalidate_freq = 0
opcache.validate_timestamps = 0

[session]
session.save_handler = files
session.use_strict_mode = 1

Результат: максимальная производительность и безопасность для production-среды.

Пример 2. Настройка пула FPM для нескольких пользователей (chroot)

Пример
[www]
user = www-data
group = www-data
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
chroot = /var/www

Результат: изоляция пользователя и корневой файловой системы для повышения безопасности.

Пример 3. Использование .user.ini в проекте для переопределения опций

Пример
; .user.ini (помещается в корень документа)
memory_limit = 512M
max_execution_time = 600
upload_max_filesize = 128M

Эти параметры применяются только к текущему каталогу и его подкаталогам. Это полезно для проектов, требующих нестандартных лимитов.

Пример 4. Настройка Xdebug для отладки PHP 7 в IDE

Пример
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.log=/var/log/xdebug.log

После установки модуля через pecl перезапустите FPM. Результат: возможность пошаговой отладки в PhpStorm или VS Code.

Пример 5. Проверка производительности OpCache

Пример
// PHP-скрипт для вывода статистики OpCache
$status = opcache_get_status(false);
echo 'Memory used: ' . $status['memory_usage']['used_memory'] / 1024 / 1024 . ' MB\n';
echo 'Hits: ' . $status['opcache_statistics']['hits'] . '\n';
echo 'Misses: ' . $status['opcache_statistics']['misses'] . '\n';
Memory used: 45.7 MB
Hits: 12345
Misses: 12

Высокое отношение hits к misses говорит об эффективности кэширования.

PHP 7 сервер (версия и настройки) - comments

En
Php 7 server (php)