Что такое переменные окружения и зачем они нужны в WordPress
Переменные окружения (environment variables) — это способ передавать конфигурационные данные в приложение без хардкода в коде. В WordPress их часто используют для настройки подключения к базе данных, API ключей, режимов отладки и других параметров, чтобы не хранить их в публичных файлах вроде wp-config.php.
Использование переменных окружения повышает безопасность и упрощает миграцию между средами (локальной, тестовой, продакшен).
Диагностика проблем с переменными окружения в WordPress
Симптомы проблем
- WordPress не может подключиться к базе данных — ошибка
Error establishing a database connection. - Не срабатывает отладка, хотя в переменной окружения включён режим
WP_DEBUG. - Плагины и темы не получают значения переменных, конфигурация не применяется.
- Ошибка
Undefined indexилиNoticeпри обращении к переменным окружения.
Как проверить текущие переменные окружения
Создайте в корне сайта файл env-test.php с таким содержимым:
<?php
phpinfo();
?>Откройте https://ваш-сайт/env-test.php и найдите секцию Environment. Там должны отображаться все переменные окружения, доступные PHP.
Если нужных переменных нет — значит, они не передаются на сервер или не прописаны в конфигурации веб-сервера.
Пошаговое решение проблем с переменными окружения
1. Установка переменных окружения на сервере
В зависимости от среды и веб-сервера переменные можно задать так:
- Apache: в файле
.htaccessилиhttpd.confдобавьтеSetEnv WP_DEBUG true - Nginx: в конфигурации сайта
fastcgi_param WP_DEBUG true; - Docker: в
docker-compose.ymlв разделеenvironment - Локально через
.envи библиотекуvlucas/phpdotenv(если используете)
2. Правильное чтение переменных в WordPress
Лучше всего получать переменные через getenv(), а не через $_SERVER или $_ENV. Например:
define('WP_DEBUG', filter_var(getenv('WP_DEBUG'), FILTER_VALIDATE_BOOLEAN));Это гарантирует, что значение будет корректно преобразовано в boolean.
3. Добавление проверки и запасных значений
Чтобы избежать ошибок, добавьте проверку:
$debug = getenv('WP_DEBUG');
if ($debug === false) {
$debug = false; // Значение по умолчанию
}
define('WP_DEBUG', filter_var($debug, FILTER_VALIDATE_BOOLEAN));4. Использование файла .env и библиотеки PHP dotenv
Если хотите централизованно управлять переменными, используйте vlucas/phpdotenv. Пример:
require_once __DIR__ . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
define('WP_DEBUG', filter_var($_ENV['WP_DEBUG'] ?? false, FILTER_VALIDATE_BOOLEAN));Это позволит держать конфиденциальные данные вне репозитория.
Проверка результата после внедрения
- Перейдите в админку WordPress → Инструменты → Здоровье сайта → Информация → Сервер и убедитесь, что нужные переменные (например,
WP_DEBUG) активны. - Включите режим отладки и проверьте вывод ошибок при наличии проблем.
- Проверьте, что плагины и темы получают значения переменных (например, добавьте временный код вывода значений).
Частые ошибки и как исправить
- Переменные не передаются в PHP — проверьте конфигурацию веб-сервера и окружения запуска (например, php-fpm).
- Использование
$_ENVбез настройки — по умолчаниюvariables_orderвphp.iniможет не содержатьE, поэтому$_ENVпуст. - Переменные в неправильном формате — строки "true" или "false" не равны boolean, используйте
filter_var(). - Кэширование — после изменения переменных окружения перезапустите PHP-FPM, очистите кэш OPcache.
Практические советы по безопасности и производительности
- Не храните секреты и ключи в
wp-config.phpили в публичных репозиториях, используйте переменные окружения. - Для локальной разработки используйте
.envиphpdotenv, на продакшене — настройку веб-сервера. - Избегайте большого количества вызовов
getenv()в runtime — считывайте переменные один раз и сохраняйте в константах. - Проверяйте права доступа к файлам с переменными и конфигурации сервера.
Таблица сравнения способов передачи переменных окружения
| Способ | Где задаётся | Плюсы | Минусы |
|---|---|---|---|
| SetEnv (Apache) | .htaccess / httpd.conf | Простота, работает без изменения PHP-кода | Зависит от настроек сервера, не всегда доступно на shared хостингах |
| fastcgi_param (Nginx) | Конфигурация nginx | Надёжно, контролируемо | Требует доступа к конфигу сервера |
| .env + phpdotenv | Файл в корне проекта | Удобно для локалки и CI/CD | Нужно подключать библиотеку, не подходит для shared хостинга без доступа к файлам |
| Docker environment | docker-compose.yml | Удобно для контейнеров, гибко | Требует контейнеризации |