如何在 php-fpm 池中的环境变量中转义/引用美元符号“$”?

如何在 php-fpm 池中的环境变量中转义/引用美元符号“$”?

由于 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";

但在这种情况下,我必须重构我的 Puppet 配方,所以我正在寻找在 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 读取环境变量的位置,我很乐意只在一个地方声明它们并从 cli 和 fpm 中使用它们。这个问题已经间接地在这里问过了将环境变量传递给 PHP CLI 和 FPM

考虑在 php 上创建一个错误报告,因为解决这个问题的方法是直接使用 dotenv 文件:

PHP 应用程序的环境变量

相关内容