SQLite SQLiteLinuxWindowsPHPPython

SQLite: Приложение SQLite работает локально, но не через PHP-FPM

  • Обновлено
  • Чтение ≈ 3 минуты

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

Если SQLite работает при запуске PHP из терминала, но отказывает через PHP-FPM, обычно различаются версия PHP, набор расширений, пользователь пула, рабочий каталог, open_basedir и права на базу/каталог.

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

#Что происходит и когда инструкция применима

Если SQLite работает при запуске PHP из терминала, но отказывает через PHP-FPM, обычно различаются версия PHP, набор расширений, пользователь пула, рабочий каталог, open_basedir и права на базу/каталог.

Характерный признак: Команда php script.php успешно читает SQLite, а запрос через Nginx/Apache отдаёт 500, PDOException или сообщает, что драйвер SQLite не найден.

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

Возможная причинаКак узнатьЧто делать
Разные сборки PHPCLI и FPM могут использовать разные php.ini и наборы модулейCLI показывает pdo_sqlite, FPM — нетПроверить именно FPM
Пользователь пула не имеет доступаРабочий процесс FPM выполняется не от учётной записи разработчикаPermission denied только в веб-запросеПроверить точечные права
Относительный путь или open_basedirТекущий каталог PHP-FPM отличается от терминала, либо путь запрещёнОткрывается пустая база или error 14Указать абсолютный путь

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

  1. 1. Сохраните сообщение об ошибке из журнала FPMПовторите один тестовый запрос и запишите точную строку PDOException/SQLSTATE и время. На управляемом сервере смотрите журнал выбранного сайта и пула через панель управления, а не произвольный общий лог.
  1. 2. Проверяйте CLI только как исходную точкуОткройте терминал Linux и запустите реальный бинарный файл PHP, используемый в консоли. Вывод php -m показывает набор модулей только CLI, не веб-обработчика.
  2. Linux CLI; ожидается PDO и pdo_sqlite/sqlite3 для этой конкретной сборки
    Linux · Терминал (Bash)Команда
    Linux CLI; ожидается PDO и pdo_sqlite/sqlite3 для этой конкретной сборки. Отсутствие grep в Windows не означает отсутствия модулей.
    php -v && php -m | grep -Ei 'pdo|sqlite'
  1. 3. Узнайте версию PHP и расширения именно FPMВ панели управления сайтом посмотрите режим обработчика и версию PHP. Администратор может сделать временный закрытый диагностический сценарий с PHP_VERSION, PHP_SAPI и extension_loaded("pdo_sqlite") — не публикуйте полный phpinfo.
  1. 4. Определите пользователя нужного пулаПосмотрите user/group в конфигурации выбранного FPM-пула или в панели хостинга. При нескольких сайтах и версиях PHP эти пользователи могут быть разными. Не считайте www-data универсальным ответом.
  1. 5. Замените относительный путь абсолютнымВ конфигурации PHP используйте путь, который реально существует на сервере, например /var/www/site/data/app.db; для приложений в контейнерах путь внутри контейнера может отличаться от пути на хосте. Не допускайте создания нового файла пустой базы в случайном каталоге.
  1. 6. Проверьте права файла и каталогаНа Linux администратор проверяет цепочку каталогов. Если есть WAL, процессу обычно нужна возможность создавать файлы в каталоге базы; задавайте права только нужной учётной записи.
  2. Чтение; path пример
    Linux · Терминал (Bash)Команда
    Чтение; path пример. Вывод позволяет найти каталог, где отсутствует проход/доступ.
    namei -l /var/www/site/data/app.db
  1. 7. Проверьте ограничения PHP и защитные журналыСверьте open_basedir, настройки chroot, контейнерные монтирования, ACL/SELinux/AppArmor с реальным расположением базы. Ошибка расширения обычно требует установки именно для нужной FPM-сборки, а не только для CLI.
  1. 8. Протестируйте один запрос через HTTP и уберите диагностикуВ закрытом тестовом окружении выполните SELECT к существующей таблице через настоящий веб-запрос. Ожидается тот же результат, что из CLI. Сразу удалите временный диагностический сценарий, проверьте журнал, сохраните рабочие права и настройки.

#Как проверить исправление

Через веб-запрос FPM PDO_SQLITE загружается, путь ведёт к нужной базе, чтение и контролируемая запись на тесте работают; временный диагностический файл удалён.

#Если исправление не помогло

Если только FPM даёт ошибку, проверьте конфигурацию конкретного пула, разрешения каталога, блокировку open_basedir, SELinux и логи веб-сервера; не меняйте глобальные настройки вслепую.

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

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

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