#Что происходит и когда применима инструкция
PHP в командной строке и PHP, обслуживающий сайт через FPM или модуль Apache, могут быть разными сборками. Это нормально в системах с несколькими версиями: php -v показывает лишь CLI по PATH, а composer, cron и веб-сервер могут работать на разных интерпретаторах.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| В PATH выбран другой исполняемый файлВ PATH выбран другой исполняемый файл. which php указывает на системную версию, сайт — на отдельный FPM-сокет. | which php указывает на системную версию, сайт — на отдельный FPM-сокет. | Разделить назначения CLI и веб-сайта. |
| У сайта другой FPM-пул или контейнерУ сайта другой FPM-пул или контейнер. В панели показана конкретная версия, а SSH подключён к хосту. | В панели показана конкретная версия, а SSH подключён к хосту. | Сверить FastCGI-маршрут и окружение. |
| Планировщик запускает php без абсолютного путиПланировщик запускает php без абсолютного пути. cron использует другую переменную PATH и неправильную версию. | cron использует другую переменную PATH и неправильную версию. | Прописать нужный бинарник в задании. |
#Подробная пошаговая инструкция
- Снимите версии в обоих режимахВ SSH выполните php -v и command -v php. Для веба используйте версию PHP, указанную в настройках домена, либо защищённый временный маршрут, возвращающий PHP_VERSION. Не оставляйте phpinfo() общедоступным.Linux · Терминал (Bash)КомандаSSH, только чтение. type -a может показать несколько бинарников в PATH; это не отражает версию FPM.
command -v php; php -v; type -a php
- Проверьте явный путь к нужному CLI-бинарникуВ зависимости от сервера он может находиться по адресу /usr/bin/php8.2 или /opt/php85/bin/php. Убедитесь, что файл существует, затем запустите его с -v; не создавайте случайный глобальный симлинк /usr/bin/php на новую версию.
- Пример Debian PHP 8.2 в SSH, только чтениеLinux · Терминал (Bash)КомандаПример Debian PHP 8.2 в SSH, только чтение. В другой системе /usr/bin/php8.2 может отсутствовать; используйте реально установленный путь.
ls -l /usr/bin/php* 2>/dev/null; /usr/bin/php8.2 -v
- Выясните FPM-сокет сайтаОткройте конфигурацию домена в панели либо найдите fastcgi_pass в виртуальном хосте Nginx и путь listen у соответствующего пула. Убедитесь, что не путаете версию одного сайта с версией другого. При mod_php Apache процесс PHP запускается иначе, чем в FPM.
- Сравните важные параметры, а не только номер версииПроверьте в защищённом веб-маршруте php_ini_loaded_file(), extension_loaded для требуемых модулей, date.timezone, memory_limit. В SSH запустите отдельный бинарник с --ini. Слишком разные ini-файлы объясняют «работает в cron, но падает в браузере».
- SSH, только чтение CLI указанной версииLinux · Терминал (Bash)КомандаSSH, только чтение CLI указанной версии. Сравнивайте результат с настройками FPM, полученными внутри закрытой веб-проверки.
/usr/bin/php8.2 --ini; /usr/bin/php8.2 -m | head -n 40
- Исправьте только нужное место запускаЕсли проблема в cron, замените команду задания на абсолютный путь к требуемому PHP и проверьте сценарий с безопасными данными. Если проблема в версии сайта, выберите её в панели или правильно настройте FastCGI-сокет после резервной копии и проверки совместимости.
- Проверьте сторонние команды и зависимостиДля Composer, планировщика и скриптов развертывания уточните, какой php запускается в текущем окружении. Путь в интерактивном SSH может отличаться от cron или systemd. Не менять глобальный update-alternatives ради одного сайта без оценки всех задач.
- Завершите сравнением фактических окруженийОтдельно запустите пробный CLI-сценарий с явным бинарником и запрос через веб-сайт. Если ошибка воспроизводится только в одном режиме, сравните расширения, переменные окружения, рабочий каталог и разрешения файлов.
#Как проверить, что проблема исправлена
Веб-сайт и его запланированные задачи используют осознанно выбранные версии PHP, а все критические расширения и настройки соответствуют требованиям приложения.
#Если не помогло — дальнейшая диагностика и откат
Если версия веба не меняется, проверьте механизм настройки панели, отдельный контейнер или mod_php. При отсутствии новой версии для cron используйте абсолютный путь к доступному исполняемому файлу либо обратитесь к администратору.