PHP-FPM Linux (PHP-FPM)

PHP-FPM: Задание PHP выполняется в CLI, но ошибается через веб-сервер

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

PHP-скрипт может исправно выполняться из командной строки, но давать ошибку при HTTP-запросе, поскольку CLI и FPM различаются пользователем, рабочим каталогом, переменными окружения, временем выполнения и доступными расширениями. Решать проблему повышением всех прав и отключением ограничений нельзя.

В этой статье
  1. Симптом и границы применимости
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Как проверить результат
  5. Если проблема не устранена

#Симптом и границы применимости

PHP-скрипт может исправно выполняться из командной строки, но давать ошибку при HTTP-запросе, поскольку CLI и FPM различаются пользователем, рабочим каталогом, переменными окружения, временем выполнения и доступными расширениями. Решать проблему повышением всех прав и отключением ограничений нельзя.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Нет доступа к файлу или каталогуCLI запускают от владельца, FPM — от отдельного пользователя.В журнале PHP Permission deniedСравнить пользователей, каталоги и ACL
Отличается рабочий каталог или окружениеPHP CLI и FPM могут иметь разные getcwd и окружение.В PHP файлы через относительный путь не находятсяИспользовать __DIR__ и явные пути
Расходятся конфигурация и расширенияВерсия веб-SAPI может быть другой.Undefined function/Class not found только через вебСравнить PHP_VERSION, ini и loaded extensions

#Пошаговая диагностика и исправление

  1. Определите безопасный точный примерВыберите действие, которое не приводит к оплате, отправке писем или изменению производственных данных. Зафиксируйте ошибку CLI и HTTP-запроса на одной копии кода и одинаковых тестовых данных. В браузере F12 → «Сеть» запишите код ответа, время и URL без персональных параметров.
  1. Найдите ошибку из веб-журналаВ SSH посмотрите журнал конкретного пула PHP-FPM и ErrorLog веб-сервера в момент HTTP-запроса. Если продакшен скрывает stack trace (правильно), не включайте display_errors публично — пользуйтесь закрытым error_log.
  2. Имя службы замените на установленное
    Linux · Терминал (Bash)КомандаНужен sudo
    Имя службы замените на установленное. Стек и пути файлов могут быть конфиденциальны.
    sudo journalctl -u php8.2-fpm -n 80 --no-pager
  1. Сравните PHP-параметры двух средВ терминале запустите php -v и php --ini от того же пользователя, что и рабочее CLI-задание. В закрытом тестовом веб-запросе посмотрите PHP_VERSION, php_ini_loaded_file(), getcwd(), __DIR__, extension_loaded(). После теста удалите диагностический файл.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)Команда
    php -v; php --ini
  1. Проверьте фактические файловые праваПо тексту ошибки найдите точный файл и путь. В SSH запустите namei -l и ls -l, затем определите пользователя пула из конфигурации FPM. Разрешение может отсутствовать на родительском каталоге. Не делайте глобальный chmod или chown для исправления одного пути.
    Linux · Терминал (Bash)Команда
    Путь замените на свой, команда только читает права.
    namei -l /var/www/example.com/private/file.dat
  1. Исправьте код или изолированную настройкуДля путей к файлам используйте __DIR__ и заранее заданные каталоги, не полагайтесь на текущую директорию. Для нужного расширения установите модуль в версию FPM и убедитесь, что его загрузка разрешена. Для внешних переменных окружения используйте безопасный механизм конфигурации приложения, учитывая clear_env пула.
  1. Повторно проверьте обе средыПосле резервной копии и минимального изменения запустите тот же безопасный сценарий через CLI и HTTP. Сверьте коды, файлы результата и журнал, проверьте работу соседних сайтов. Если правка повысила доступ к приватным файлам без необходимости, немедленно откатите её.

#Как проверить результат

Один и тот же безопасный сценарий отрабатывает через CLI и HTTP, журнал FPM не показывает ошибок, необходимые файлы доступны только правильному пользователю.

#Если проблема не устранена

Если команды одинаковы, а результат отличается, сравните версию, SAPI, переменные, текущую папку, ограничения open_basedir и компоненты PHP; ищите минимально необходимое изменение.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.