【问题标题】:Environment variable in PHP-docker containerPHP-docker容器中的环境变量
【发布时间】:2016-05-30 11:47:38
【问题描述】:

我想在我的 docker 容器中显示一个环境变量。 PHP 脚本如下所示:

<html>
 <head>
  <title>Show Use of environment variables</title>
 </head>
 <body>
  <?php
  print "env is: ".$_ENV["USER"]."\n";
  ?>
 </body>
</html>

我使用 OpenShift 来启动容器。 PHP - 容器显示:

env is: 

现在我更改容器的 dc 配置:

oc env dc/envar USER=Pieter
deploymentconfig "envar" updated

当我访问容器时。 USER 的环境变量是 Pieter

docker exec -it 44a0f446ae36 bash
bash-4.2$ echo $USER
Pieter

但我的脚本仍然显示:“env is:”它没有填写变量。

【问题讨论】:

  • 日志显示什么?
  • 有人找到解决办法了吗?

标签: php docker environment-variables openshift openshift-origin


【解决方案1】:

改变

print "env is: ".$_ENV["USER"]."\n";

print "env is: ".getenv("USER")."\n";

.

test.php

<html>
 <head>
  <title>Show Use of environment variables</title>
 </head>
 <body>
  <?php
  print "env via \$_ENV is: ".$_ENV["USER"]."\n";
  print "env via getenv is: ".getenv("USER")."\n";
  ?>
 </body>
</html>
# export USER=Sascha
# echo $USER
Sascha

php test.php

    <html>
     <head>
      <title>Show Use of environment variables</title>
     </head>
     <body>
      PHP Notice:  Array to string conversion in /test.php on line 7
    PHP Notice:  Undefined index: USER in /test.php on line 7
    env via $_ENV is: 
    env via getenv is: Sascha
     </body>
    </html>

【讨论】:

  • 为我工作。这就是我一直在寻找的答案!
【解决方案2】:

我做了以下来解决这个问题:

  1. 使用此命令将环境变量写入项目文件夹中名为 .env 的文件。

    CMD ["env >> /path/to/project/.env"]
    
  2. 安装 dotenv 包,将环境变量从文件加载到 $_ENV

    composer require vlucas/phpdotenv
    
  3. 加载包并用作

    require 'vendor/autoload.php'
    $dotenv = new Dotenv\Dotenv(__DIR__);
    $dotenv->load();
    getenv('VAR_NAME');
    

希望对你有帮助。

【讨论】:

  • 在访问环境变量时使用$_SERVER['VAR_NAME'] 而不是getenv()$_ENV,以保证线程安全并遵循良好实践。
【解决方案3】:

你只需要使用不同的引号,这对我有用

<html>
 <head>
  <title>Show Use of environment variables</title>
 </head>
 <body>
  <?php
  print "env is: ".$_ENV['USER'];
  ?>
 </body>
</html>

【讨论】:

  • 请进一步解释——您指的是哪些“不同的引号”? $_ENV["USER"]$_ENV['USER'] 应该执行完全相同的结果。如果没有,请打开错误报告
  • 他使用 print "env is: ".$_ENV["USER"]."\n"。索引应该用单引号而不是双引号。我在我的电脑上测试了它,它可以工作。
  • 是什么让您认为使用单引号或双引号有任何的区别?您确定使用双引号时您的代码不起作用吗?那么请提交错误报告
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2016-03-07
  • 1970-01-01
  • 2017-12-26
  • 2019-06-26
  • 1970-01-01
  • 2015-07-07
相关资源
最近更新 更多