Пробросить fastcgi_params в консольный скрипт

105
19 ноября 2019, 00:50

Моя конфигурация nginx имеет следующий вид

location ~* \.(php)$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

fastcgi_params имеет переменную DB_PASSWORD. И я могу получить значение этой переменной, запустив php-скрипт в браузере через $_SERVER['DB_PASSWORD'], но если я запускаю консольный скрипт, например

./yii migrate/up

То этих переменных $_SERVER уже не содержит. Как их туда пробросить? Использую php-fpm

Answer 1

Пробросить fastcgi_params в консольный скрипт невозможно.

FastCGI - интерфейс между веб-сервером и PHP. Путь такой: переменная из конфига => протокол FastCGI => PHP интерпретатор разбирает запрос по протоколу (см также variables_order) => глобальная переменная в вашем PHP-скрипте.

Консольный скрипт запускает интерпретатор по CLI SAPI (php cli). FastCGI тут не используется, так как запуск из командной строки, и веб-сервер не принимает ни какого участия. Также php cli имеет собственный php.ini файл, поэтому конфигурация у него отдельная. Узнать ее можно так: php --ini

Если вам нужны переменные в php-cli - используйте окружение.

1 способ - через командную строку (мой выбор)

DB_PASSWORD=password php {ваш скрипт}.php

2 способ - экспорт в окружение

export DB_PASSWORD=password
php {ваш скрипт}.php

3 способ - выставить на уровне всей ОС (не рекомендуется)

Нужно отредактировать /etc/environment, изменения будут видны после перезапуска службы (для пользователя - перелогиниться). Для передачи пароля этот способ плохой по безопасности: виден всем.

4 способ - для Docker

Если используется Docker, в Dockerfile возможно записать ENV DB_PASSWORD=password, или передать из командной строки при старте:

docker run ... -e DB_PASSWORD=password ...
Доступ в PHP

Внутри скрипта будет доступно:

var_dump($_SERVER['DB_PASSWORD']); 
var_dump(getenv('DB_PASSWORD'));

PS. Узнать какой SAPI используется можно через php_sapi_name().

READ ALSO
Парсинг таблицы с Simple html dom

Парсинг таблицы с Simple html dom

Всем доброго времени суток Использую парсера Simple html dom, для парсинга

123
Нужна помощь в составлении регулярки

Нужна помощь в составлении регулярки

есть необходимость создать поиск совпадений по строке

144
Не правильная работа сессии

Не правильная работа сессии

При входе в аккаунт: я задаю $_SESSION['authorized'] = 1;

162
Парсер сайтов с XML и добавления в DB. Wordpress

Парсер сайтов с XML и добавления в DB. Wordpress

Разработал парсер, который парсит обменники от 50 до 150 сайтовНа каждом сайта XML с данными ( валюты, курсы, прибыль, резерв, и т

102