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:
Use this command that writes the environment variables to a file called .env in your project folder.
CMD ["env >> /path/to/project/.env"]
Install dotenv package that loads the env variables from a file to $_ENV
composer require vlucas/phpdotenv
Load the package and use it as
require 'vendor/autoload.php' $dotenv = new Dotenv\Dotenv(__DIR__); $dotenv->load(); getenv('VAR_NAME');
Hope it helps.
Author by
lova
Updated on July 20, 2022Comments
-
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 about 5 yearsWorked for me. That was the answer I was looking for!
-
Nico Haase over 3 yearsPlease 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 over 3 yearsHe 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 over 3 yearsWhat 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 over 2 yearsUse
$_SERVER['VAR_NAME']
instead ofgetenv()
or$_ENV
when accessing environmental variables, to be thread-safe and follow good practice. -
d70rr3s about 2 yearsThe 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 willNULL
orFALSE
since the variable may not be set. But using$_SERVER
will work always