(PHP 4, PHP 5, PHP 7)

putenv Setzt den Wert einer Umgebungsvariablen.


putenv ( string $setting ) : bool

Fügt setting zur Server-Umgebung hinzu. Die Umgebungsvariable existiert nur für die Dauer des aktuellen Request. Am Ende des Requests wird der Originalzustand der Umgebung wiederhergestellt.

Das Ändern bestimmter Umgebungsvariablen kann potentiell die Sicherheit gefährden. Die safe_mode_allowed_env_vars Direktive enthält eine durch Komma getrennte Liste von Präfixen. Im Safe-Mode kann der Benutzer nur Umgebungsvariablen ändern, deren Name mit einem der in dieser Direktive angegeben Präfix beginnt. Standardmäßig können Benutzer nur Umgebungsvariablen ändern, die mit PHP_ beginnen (z.B. PHP_FOO=BAR). Beachte: ist diese Direktive leer, erlaubt PHP dem Benutzer das Ändern BELIEBIGER Umgebungsvariablen.

Die safe_mode_protected_env_vars Direktive enthält eine durch Komma getrennte Liste von Umgebungsvariablen, die der Endanwender durch putenv() nicht ändern kann. Diese Variablen werden auch dann geschützt, wenn safe_mode_allowed_env_vars so eingestellt ist, dass sie geändert werden könnten.



Die Einstellung, beispielsweise "FOO=BAR"


Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.


Beispiel #1 Setzen einer Umgebungsvariablen




Die safe_mode_allowed_env_vars und safe_mode_protected_env_vars Direktiven wirken nur, wenn safe_mode aktiviert ist.

Siehe auch

add a note add a note

User Contributed Notes 7 notes

php at keith tyler dot com
10 years ago
putenv/getenv, $_ENV, and phpinfo(INFO_ENVIRONMENT) are three completely distinct environment stores. doing putenv("x=y") does not affect $_ENV; but also doing $_ENV["x"]="y" likewise does not affect getenv("x"). And neither affect what is returned in phpinfo().

Assuming the USER environment variable is defined as "dave" before running the following:

print "env is: ".$_ENV["USER"]."\n";
"(doing: putenv fred)\n";
"env is: ".$_ENV["USER"]."\n";
"getenv is: ".getenv("USER")."\n";
"(doing: set _env barney)\n";
"getenv is: ".getenv("USER")."\n";
"env is: ".$_ENV["USER"]."\n";


env is: dave
(doing: putenv fred)
env is: dave
getenv is: fred
(doing: set _env barney)
getenv is: fred
env is: barney


Variable => Value
USER => dave
11 months ago
White spaces are allowed in environment variable names so :

('U =33');

Is not equivalent to

13 years ago
The other problem with the code from av01 at bugfix dot cc is that
the behaviour is as per the comments here, not there:
('MYVAR='); // set MYVAR to an empty value.  It is in the environment
putenv('MYVAR'); // unset MYVAR.  It is removed from the environment
david dot boyce at messagingdirect dot comnospam
19 years ago
Environment variables are part of the underlying operating system's
way of doing things, and are used to pass information between a parent
process and its child, as well as to affect the way some internal
functions behave.  They should not be regarded as ordinary PHP

A primary purpose of setting environment variables in a PHP script is
so that they are available to processes invoked by that script using
e.g. the system() function, and it's unlikely that they would need to
be changed for other reasons.

For example, if a particular system command required a special value
of the environment variable LD_LIBRARY_PATH to execute successfully,
then the following code might be used on a *NIX system:

= getenv("LD_LIBRARY_PATH");        // save old value
$newld = "/extra/library/dir:/another/path/to/lib"// extra paths to add
if ($saved) { $newld .= ":$saved"; }           // append old paths if any
putenv("LD_LIBRARY_PATH=$newld");        // set new value
system("mycommand -with args");        // do system command;
                        // mycommand is loaded using
                        // libs in the new path list
putenv("LD_LIBRARY_PATH=$saved");        // restore old value

It will usually be appropriate to restore the old value after use;
LD_LIBRARY_PATH is a particularly good example of a variable which it
is important to restore immediately, as it is used by internal

If php.ini configuration allows, the values of environment variables
are made available as PHP global variables on entry to a script, but
these global variables are merely copies and do not track the actual
environment variables once the script is entered.  Changing
$REMOTE_ADDR (or even $HTTP_ENV_VARS["REMOTE_ADDR"]) should not be
expected to affect the actual environment variable; this is why
putenv() is needed.

Finally, do not rely on environment variables maintaining the same
value from one script invocation to the next, especially if you have
used putenv().  The result depends on many factors, such as CGI vs
apache module, and the exact way in which the environment is
manipulated before entering the script.
Anonymous Coder
8 years ago
It's the putenv() type of environment variables that get passed to a child process executed via exec().

If you need to delete an existing environment variable so the child process does not see it, use:


That is, leave out both the "=" and a value.
broussardrobert at sbcglobal dot net
2 years ago
Great examples for the trivial case that most can figure out directly from the manual, but where is the trivially more complex example describing how to set multiple variables?  I tried separating with spaces, commas, semicolons, multiple invocations of setenv, all to no avail.  Please try to include trivial extensions to the examples...
broussardrobert at sbcglobal dot net
2 years ago
Multiple invocations of putenv() work as expected: the real problem was that some of the putenv() invocations in my script contained typographical errors.

I typed, e.g., putenv( "IMAGE_DATABASE=" . $_SERVER{'IMAGE_DATABASE'} );
which of course is incorrect.  '{' and '}' should have been '[' and ']'.
Because my first call to putenv() did not have that typo, it worked correctly, but the remaining three calls I coded with the typo merely cleared the corresponding environment variables and thus did not make it into the external script I invoked via a system() call.  I suspect the fact my first invocation was typed correctly affected my efforts looking at the syntax in the following invocations.

The trivial extension to the example provided is to merely call putenv() multiple times, once for each variable.
To Top