Environment variable in PHP-docker container

17,139

Solution 1

Change

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

to

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>

Solution 2

I did the following to solve this issue:

  1. Use this command that writes the environment variables to a file called .env in your project folder.

    CMD ["env >> /path/to/project/.env"]
    
  2. Install dotenv package that loads the env variables from a file to $_ENV

    composer require vlucas/phpdotenv
    
  3. Load the package and use it as

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

Hope it helps.

Share:
17,139
lova
Author by

lova

Updated on July 20, 2022

Comments

  • lova
    lova almost 2 years

    I want to show an env var in my docker container. The PHP script looks like this:

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

    I use OpenShift to start the container. The PHP - container shows:

    env is: 
    

    Now I change the dc config of my container:

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

    When I access the container. The env var of USER is Pieter

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

    But my script remains showing: "env is:" It does not fill in the variable.

  • lsd
    lsd about 5 years
    Worked for me. That was the answer I was looking for!
  • Nico Haase
    Nico Haase over 3 years
    Please explain that further - which "different quotes" do you mean? $_ENV["USER"] and $_ENV['USER'] should perform the exact same result. If not, please open a bug report
  • emir
    emir over 3 years
    He used print "env is: ".$_ENV["USER"]."\n". Index should be in single quotes not in double quotes. I tested it on my computer and it works.
  • Nico Haase
    Nico Haase over 3 years
    What makes you think that there is any difference between using single or double quotes? Are you sure that your code does not work when using double quotes? Then please file a bug report
  • Deele
    Deele over 2 years
    Use $_SERVER['VAR_NAME'] instead of getenv() or $_ENV when accessing environmental variables, to be thread-safe and follow good practice.
  • d70rr3s
    d70rr3s about 2 years
    The comment from @Deele should be the right answer, depending on how those variables are set can appear either on getenv or $_ENV and you can get ending will NULL or FALSE since the variable may not be set. But using $_SERVER will work always