Поскольку symfony4 использует dotenv и переменные окружения для конфигурации, они также необходимы на сервере.
для передачи переменных в конфигурацию пула можно добавить следующее:
example-pool.conf
:
env[APP_ENV] = 'prod'
Проблема заключается в следующем:
Все переменные $ VARIABLE берутся из текущего "окружения".
поскольку почти каждая строка зашифрованного / хешированного пароля содержит $
, я столкнулся с проблемой, что переменные среды, содержащие $
пусты.
php bin/console security:encode-password
...snip...
------------------ ---------------------------------------------------------------
Key Value
------------------ ---------------------------------------------------------------
Encoder used Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder
Encoded password $2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
------------------ ---------------------------------------------------------------
...snip...
конечно, я могу использовать nginx для передачи моих переменных окружения в php-fpm
nginx-vhost.conf
:
fastcgi_param APP_ENV "prod";
но в этом случае мне придется реорганизовать рецепт марионетки, поэтому я ищу альтернативный способ установить это в php-fpm
Я попытался использовать одинарные, двойные кавычки и избежать $
example-pool.conf
:
...snip...
env[PASSWORD1] = $2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
env[PASSWORD2] = "$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
env[PASSWORD3] = '$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'
env[PASSWORD4] = "'$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'"
env[PASSWORD5] = '"$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."'
env[PASSWORD6] = "\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
env[PASSWORD7] = '\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'
env[PASSWORD8] = \$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
env[PASSWORD9] = $$2y$$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
env[PASSWORD10] = '$$2y$$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'
...snip...
приводит к следующему выводу в php test.php
содержащий простой:
вывод:
"PASSWORD10" => ""
"PASSWORD9" => ""
"PASSWORD8" => "\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
"PASSWORD7" => "\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
"PASSWORD6" => ""
"PASSWORD5" => ""$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.""
"PASSWORD4" => "'$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'"
"PASSWORD3" => ""
"PASSWORD2" => ""
"PASSWORD1" => ""
отметил, что это связано с безопасностью, потому что это приводит к использованию слабых (буквенных) текстовых паролей.
связанные, но не такие, как
побочный вопрос, поскольку процесс php-fpm запускается как пользователь, определенный в user
какие файлы среды загружаются? проверено .bashrc
и .profile
так как это места, где php-cli читает переменные env, я был бы рад объявить их только в одном месте и использовать их из cli и fpm. этот вопрос уже косвенно задается здесь Передача переменных среды в PHP CLI и FPM
подумайте о создании отчета об ошибке на php, поскольку обходной путь к этому приводит к прямому использованию файлов dotenv: