#Симптом и границы применимости
После обновления PHP расширение, например mbstring, intl, mysqli или imagick, может остаться установленным только для старой версии либо CLI, но отсутствовать в веб-пуле FPM. Проверять нужно конкретный веб-SAPI, а не только команду php -m. Не устанавливайте пакет наугад без совместимости с точной сборкой.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Модуль остался в старой версии PHPДвоичные расширения часто привязаны к версии PHP. | Рабочая CLI показывает его, новый сайт — нет | Проверить пакеты/модули для выбранной версии FPM |
| Отдельный ini для FPM не включает модульНастройки CLI и FPM могут различаться. | В каталоге CLI конфиг есть, в FPM отсутствует | Сверить conf.d и загрузку в веб-SAPI |
| Модуль не загружается из-за несовместимостиКопирование .so со старой версии может сломать загрузку. | Журнал FPM содержит Unable to load dynamic library | Исследовать зависимости и версию ABI |
#Пошаговая диагностика и исправление
- Уточните название модуля по ошибкеВ журнале приложения найдите конкретное сообщение: Call to undefined function mb_strlen, Class IntlDateFormatter not found либо Unable to load dynamic library. Это не универсальное доказательство одного расширения — выясните требуемый модуль по документации программы.
- Сравните CLI и действующий FPMЧерез SSH посмотрите php -v и php -m. Затем по конфигурации Nginx/Apache определите точную версию FPM, обслуживающую домен. Не делайте вывод «расширение есть», пока закрытый тестовый веб-запрос не подтвердил extension_loaded().
- CLI показывает только свою сборку PHP; не определяет модули веб-сайтаLinux · Терминал (Bash)КомандаCLI показывает только свою сборку PHP; не определяет модули веб-сайта.
php -v; php -m
- Проверьте модуль через закрытый запросНа тестовой копии либо в администраторской диагностике проверьте extension_loaded с именем нужного модуля. Для большинства расширений вернётся true или false. Не публикуйте страницу phpinfo(), список путей и секреты в открытой части сайта; удалите её после теста.
- Посмотрите журналы запуска нужного FPMВ journalctl выбранной FPM-службы найдите ошибку загрузки расширения и путь к .so. При несовпадении ABI модуль нельзя просто скопировать из старой версии. Если в системе несколько PHP (например, отдельная панель), используйте именно её установщик или менеджер пакетов.Linux · Терминал (Bash)КомандаНужен sudoПример для PHP 8.2, измените имя службы по факту.
sudo journalctl -u php8.2-fpm -n 100 --no-pager | grep -Ei "module|extension|library|error"
- Установите совместимый модуль управляемым способомСохраните список старых модулей и копию конфигурации. В панели хостинга выберите конкретную версию PHP и нужное расширение; для Debian пакет типа php8.2-mbstring применим только если используется пакетная PHP 8.2 из соответствующего репозитория. Не запускайте установку без проверки доступности пакета и политики обновлений. В отдельных сборках требуется собственный каталог расширений.
- Примените и проверьтеПротестируйте конфигурацию FPM бинарным файлом именно целевой версии и перезапустите только её службу через панель в согласованное окно. Повторите extension_loaded и исходную функцию сайта; после теста удалите диагностическую страницу. При ошибке запуска верните конфигурацию и пакетное состояние по плану отката.
- Дополнительная команда по темеLinux · Терминал (Bash)С осторожностьюНужен sudoПример команды; на вашей системе может называться иначе, проверяйте наличие и используйте права администратора.
sudo php-fpm8.2 -tКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как проверить результат
Нужный модуль активен именно в веб-FPM, ранее ошибавшееся действие приложения проходит, другие расширения и сайты работают; новая ошибка загрузки в журнале отсутствует.
#Если проблема не устранена
Если установка успешна, но FPM не видит модуль, проверьте отдельный php.ini и конфигурацию пула. Если библиотека не загружается, изучите ABI, бинарные зависимости и совместимость сборки.