1. Что такое open_basedir и почему возникает ошибка?
Параметр open_basedir ограничивает доступ PHP к определённым директориям. Если скрипт пытается получить доступ к файлу или директории за пределами этих путей, ему будет отказано. Некоторые CMS или плагины требуют полного отключения open_basedir для корректной работы.
Когда появляется ошибка "Please disable the open_basedir setting to continue", это означает, что приложение не может работать из-за включённых ограничений.
2. Проверка текущей ситуации
Прежде чем что-то менять, важно убедиться, какую именно версию PHP использует ваш сайт и действительно ли включён open_basedir.
2.1. Узнаём, где PHP берёт свои настройки
Создайте в корневой директории вашего сайта example.com файл info.php:
echo "<?php phpinfo();" > /home/USER/web/example.com/public_html/info.php
Замените на:
- USER - пользователь в котором создан сайт;
- example.com - домен вашего сайта.
Откройте его в браузере:
https://example.com/info.php
Найдите строку Loaded Configuration File – это путь к основному php.ini, который действительно загружается.
2.2. Проверяем значение open_basedir
В терминале (SSH) выполните:
php -i | grep open_basedir
Если в выводе будет что-то вроде:
open_basedir => /home/USER/web/example.com/public_html:/tmp
– значит, open_basedir установлен.
Если результат будет no value => no value
– глобально open_basedir отключён. Однако он может быть задан в конфигурации PHP-FPM для сайта (об этом ниже).
3. Основные способы отключить open_basedir
3.1. Отключение в глобальном php.ini
Если вы выяснили, что сайт использует, например, vim /etc/php/8.2/fpm/php.ini, откройте этот файл:
vim /etc/php/8.2/fpm/php.ini
Найдите строку:
open_basedir = ...
И замените её на:
open_basedir =
(пустое значение)
Примечание: Если строка закомментирована ;open_basedir =, проверьте, чтобы она содержала пустое значение или была просто откомментирована без пути.
После сохранения:
systemctl restart php8.2-fpm
Однако в HestiaCP такие глобальные изменения могут не сработать, если open_basedir прописан в файлах пулов pool.d.
3.2. Отключение в файлах пулов PHP-FPM (/etc/php/X.X/fpm/pool.d/*.conf)
HestiaCP создаёт отдельные конфигурационные файлы для каждого домена или пользователя в директории:
/etc/php/8.3/fpm/pool.d/
или
/etc/php/8.2/fpm/pool.d/
(версия PHP может отличаться)
Для домена example.com может существовать файл example.com.conf. В нём часто встречается строка:
php_admin_value[open_basedir] = /home/USER/web/example.com/public_html:/tmp
Чтобы полностью отключить open_basedir, откройте этот файл:
vim /etc/php/8.3/fpm/pool.d/example.com.conf
Найдите строку с php_admin_value[open_basedir] и поменяйте её на:
php_admin_value[open_basedir] = none
Или просто закомментируйте, добавив # в начале:
#php_admin_value[open_basedir] = ...
Сохраните изменения и перезапустите PHP-FPM:
systemctl restart php8.3-fpm
После этого проверьте сайт заново.
Именно этот способ (редактирование в pool.d) чаще всего помогает в HestiaCP, так как панель генерирует свои конфигурационные файлы для каждого домена.
3.3. Отключение через панель HestiaCP (если доступно)
В некоторых версиях HestiaCP предусмотрена команда:
v-options-set v_host_open_basedir NO
systemctl restart hestia
Она глобально отключает использование open_basedir в шаблонах конфигурации.
Если ваша HestiaCP поддерживает эту команду, выполните её и проверьте, не будет ли конфигурация перезаписываться снова.
3.4. Отключение в шаблонах HestiaCP
Иногда HestiaCP автоматически перезаписывает файлы pool.d согласно шаблонам, которые обычно лежат по пути:
/usr/local/hestia/data/templates/web/php-fpm/
Например, шаблон может называться default.tpl или PHP-XYZ.tpl.
Откройте соответствующий шаблон:
vim /usr/local/hestia/data/templates/web/php-fpm/default.tpl
Найдите строку:
php_admin_value[open_basedir] = …
Удалите её или закомментируйте:
#php_admin_value[open_basedir] = …
- Сохраните и выйдите.
Если HestiaCP создаёт новые конфиги на основе этого шаблона, впредь open_basedir не будет автоматически включаться.
3.5. Использование .user.ini или .htaccess
В некоторых случаях (особенно на Apache с модулем PHP-FPM) можно попробовать отключить open_basedir через .user.ini или .htaccess. Но часто это не срабатывает, потому что php_admin_value в pool.d имеет более высокий приоритет, а также open_basedir может быть заблокирован в глобальных настройках.
3.5.1. .user.ini
; /home/USER/web/example.com/public_html/.user.ini
open_basedir =
3.5.2. .htaccess
php_admin_value open_basedir none
Если php_admin_value установлено в конфигурации PHP-FPM, эти методы могут быть проигнорированы.
3.6. Защита файла конфигурации от перезаписи (если необходимо)
Бывает, что HestiaCP при каждом сохранении настроек в панели заново генерирует файл pool.d/*.conf. Тогда можно воспользоваться атрибутом chattr в Linux, чтобы сделать файл неизменным даже для root (до тех пор, пока атрибут не будет снят).
Сделать файл неизменным:
chattr +i /etc/php/7.2/fpm/pool.d/example.com.conf
Если нужно внести правки, сначала снимите атрибут:
chattr -i /etc/php/7.2/fpm/pool.d/example.com.conf
После изменений снова установите +i, если хотите продолжать блокировку.
Однако помните, что такой подход может усложнить работу панели управления.
4. Пример полного решения (метод, который помог в нашем случае)
Нашли файл пула PHP-FPM для домена:
/etc/php/7.2/fpm/pool.d/example.com.conf
Открыли его в редакторе:
vim /etc/php/7.2/fpm/pool.d/example.com.conf
Заменили строку:
php_admin_value[open_basedir] = /home/USER/web/example.com/public_html:/tmp ...
на
php_admin_value[open_basedir] = none
Сохранили файл и перезапустили PHP-FPM:
systemctl restart php7.2-fpm
Проверили работу сайта https://example.com/info.php – ошибка пропала.
5. Часто задаваемые вопросы
5.1. Почему в php.ini написано, что open_basedir отключён, а сайт всё равно ругается?
Ваша глобальная конфигурация может не содержать open_basedir, но HestiaCP добавляет его на уровне файлов pool.d. Приоритет в php-fpm имеет именно файл пула.
5.2. Безопасно ли отключать open_basedir?
open_basedir – это одна из мер безопасности, ограничивающая работу PHP только в определённых директориях. Если у вас нет жёстких требований к безопасности (например, изоляции разных клиентов на одном сервере), его можно отключить. Однако в продакшен-средах стоит внимательно относиться к отключению этой опции.
5.3. Нужно ли перезапускать HestiaCP?
Иногда да. Если вы меняли шаблоны HestiaCP:
systemctl restart hestia
Но самое главное – перезапустить PHP-FPM:
systemctl restart php8.2-fpm
(или другую версию PHP, которую использует ваш сайт).
Вывод
- Проверьте фактические настройки PHP через phpinfo() и узнайте, какой файл pool.d/*.conf действительно используется вашим доменом.
- Измените или удалите директиву php_admin_value[open_basedir], поставив none.
- Перезапустите PHP-FPM (при необходимости и HestiaCP).
- Если HestiaCP продолжает перезаписывать файл – измените шаблон в /usr/local/hestia/data/templates/web/php-fpm/ или используйте chattr +i.
Чаще всего именно правка pool.d/example.com.conf решает проблему:
php_admin_value[open_basedir] = none
После перезапуска PHP-FPM ошибка "Please disable the open_basedir setting to continue" должна исчезнуть, и ваш сайт example.com заработает корректно. Если же панель по-прежнему восстанавливает настройки, обратите внимание на шаблоны PHP-FPM внутри самой HestiaCP и их конфигурации.