#Когда возникает проблема и как её отличить
Расширение PHP может исчезнуть после переключения веб-сайта на PHP 8, даже если оно доступно старой версии или командному PHP. Сначала установите, какой обработчик обслуживает сайт, затем проверьте наличие конкретного модуля и его настройки.
#Возможные причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Модуль установлен для другой версии PHPCLI и PHP-FPM используют разные версии и каталоги расширений. | php -m показывает модуль, но веб-приложение пишет об отсутствии функции | Проверить конфигурацию именно обработчика сайта. |
| Расширение не подключено к PHP-FPMДля активного обработчика отключено или не установлено необходимое расширение. | В сообщениях есть Call to undefined function или Class ZipArchive not found | Включить подходящий модуль средствами панели либо дистрибутива. |
| Расширение не подходит к данной сборкеДвоичный файл может быть собран для другого PHP API или отсутствовать по пути. | В журнале запуска Unable to load dynamic library | Использовать совместимый пакет расширения, не копировать старые .so/.dll. |
#Пошаговая диагностика и исправление
- Определите нужное расширение по ошибкеВ журнале PHP найдите точное имя функции или класса:
mb_strlenотносится к mbstring,ZipArchive— к zip,PDO— к PDO, но драйвер базы может требоваться отдельно. Не ставьте все возможные модули подряд; выпишите имя и проверьте требования вашего приложения. - Проверьте веб-PHP в панели хостингаОткройте панель управления сайтом → настройки PHP (названия пунктов отличаются у хостеров). Запишите выбранную версию PHP и способ запуска: PHP-FPM, CGI или модуль веб-сервера. Если панель показывает список расширений, найдите нужное. Для теста используйте временную диагностическую страницу только в закрытом каталоге и удалите её сразу после проверки.
- Сравните командную строку с веб-обработчикомПо SSH в терминале выполните
php -vиphp -m: сначала версия CLI, затем список его расширений. Если консоль показывает модуль, это ещё не значит, что он включён в PHP-FPM. Для веб-проверки в закрытом тестовом скрипте временно выполнитеextension_loaded("mbstring")(замените имя модуля) иPHP_VERSION, не публикуя весь результатphpinfo(). - Включите модуль для правильной версииНа управляемом хостинге выберите расширение в настройках активного PHP и сохраните изменения. На собственном Debian/Ubuntu сначала определите имена пакетов, доступных для установленной версии: они могут называться
php8.x-имяи зависеть от репозитория. Установку согласуйте с администратором; не переносите старый бинарный файл модуля в новую директорию и не правьте системный php.ini наугад. - Проверьте ошибки запуска PHP и конфигурациюЕсли расширение отмечено включённым, но функция недоступна, посмотрите журнал PHP-FPM на ошибки загрузки. Сравните
extension_dir, путь к файлу и используемую версию PHP. Перезапуск конкретного обработчика выполняйте только после проверки конфигурации и с учётом других сайтов, которые обслуживает тот же процесс. - Повторите точную операцию приложенияНа тестовом сайте повторите ранее неработавший запрос. Проверьте не только
extension_loaded, но и функциональный вызов приложения: например, открытие ZIP или подключение к БД. Если расширение есть, а операция падает, проверьте требуемый драйвер, конфигурацию и права. Удалите диагностический файл, затем переносите изменение на рабочую площадку. - Команды в SSH/терминале от пользователя проекта, без администратораLinux · Терминал (Bash)КомандаКоманды в SSH/терминале от пользователя проекта, без администратора. Проверяют только CLI-версию и модули, не PHP-FPM.
php -vphp -m
#Как проверить, что проблема устранена
Веб-обработчик должен показывать требуемый модуль, а ранее неработавшая функция выполнять реальную задачу. php -m в консоли сам по себе не является подтверждением.
#Если ошибка осталась
Повторите исходный сценарий в тестовой среде, откройте свежую запись журнала с точным временем, именем функции, файлом и строкой. Сравните новое сообщение с исходным: ошибка могла переместиться на следующий участок кода. Не подавляйте все ошибки общим обработчиком. Если изменения затрагивали работающий проект, восстановите сохранённую копию и разберите новое сообщение до повторного переноса.