Как на PHP реализовать автоматическую подстановку $captcha_secret из переменных окружения (.env) для Google reCAPTCHA?

Хранить секретные ключи прямо в коде — плохая практика. Правильный подход — использовать переменные окружения через `.env`-файл. Рассмотрим, как реализовать автоматическую подстановку `$captcha_secret` для Google reCAPTCHA в PHP.

## Шаг 1: Установка библиотеки vlucas/phpdotenv

Самый популярный способ работы с `.env` в PHP — библиотека `vlucas/phpdotenv`. Установите её через Composer:

bash
composer require vlucas/phpdotenv

## Шаг 2: Создание .env-файла

В корне проекта создайте файл `.env` и добавьте в него секретный ключ:

RECAPTCHA_SECRET_KEY=6LcXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
RECAPTCHA_SITE_KEY=6LcYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

Обязательно добавьте `.env` в `.gitignore`, чтобы не публиковать секреты в репозиторий:

.env

## Шаг 3: Загрузка переменных окружения в PHP

В точке входа приложения (например, `index.php` или `bootstrap.php`) подключите и загрузите `.env`:

php
require_once __DIR__ . ‘/vendor/autoload.php’;

$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();

// Опционально: проверка обязательных переменных
$dotenv->required([‘RECAPTCHA_SECRET_KEY’, ‘RECAPTCHA_SITE_KEY’]);

## Шаг 4: Получение $captcha_secret и проверка reCAPTCHA

Теперь можно безопасно получить секретный ключ и использовать его для верификации токена:

php
$captcha_secret = $_ENV[‘RECAPTCHA_SECRET_KEY’];
// или через getenv():
// $captcha_secret = getenv(‘RECAPTCHA_SECRET_KEY’);

$recaptcha_response = $_POST[‘g-recaptcha-response’] ?? »;

$verify_url = ‘https://www.google.com/recaptcha/api/siteverify’;

$response = file_get_contents($verify_url . ‘?’ . http_build_query([
‘secret’ => $captcha_secret,
‘response’ => $recaptcha_response,
‘remoteip’ => $_SERVER[‘REMOTE_ADDR’],
]));

$result = json_decode($response, true);

if ($result[‘success’] === true) {
echo ‘Капча пройдена успешно!’;
} else {
echo ‘Ошибка проверки капчи: ‘ . implode(‘, ‘, $result[‘error-codes’] ?? []);
}

## Альтернатива: без сторонних библиотек

Если вы не хотите использовать Composer, можно вручную парсить `.env`:

php
$lines = file(__DIR__ . ‘/.env’, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
if (strpos(trim($line), ‘#’) === 0) continue;
[$key, $value] = explode(‘=’, $line, 2);
$_ENV[trim($key)] = trim($value);
}
$captcha_secret = $_ENV[‘RECAPTCHA_SECRET_KEY’];

## Важные рекомендации

— Никогда не коммитьте `.env` в Git — используйте `.env.example` с пустыми значениями как шаблон.
— На продакшн-сервере переменные окружения лучше задавать через настройки сервера (Apache `SetEnv`, Nginx `fastcgi_param`, системные переменные), а не через файл.
— Используйте `createImmutable` вместо `create`, чтобы системные переменные не перезаписывались.
— Для фреймворков (Laravel, Symfony) механизм `.env` уже встроен — используйте `config(‘services.recaptcha.secret’)` или аналоги.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.