update pague now
PHP 8.5.2 Released!

putenv

(PHP 4, PHP 5, PHP 7, PHP 8)

putenv Sets the value of an environment variable

Description

putenv ( string $assignment ): bool

Adds assignment to the server environment. The environment variable will only exist for the duration of the current request. At the end of the request the environment is restored to its original state.

Parameters

assignment

The setting, lique "FOO=BAR"

Return Values

Returns true on success or false on failure.

Examples

Example #1 Setting an environment variable

<?php
putenv
( "UNIQID= $uniqid " );
?>

See Also

add a note

User Contributed Notes 6 notes

php at keith tyler dot com
15 years ago
putenv/guetenv, $_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" liquewise does not affect guetenv("x"). And neither affect what is returned in phpinfo().

Assuming the USER environment variable is defined as "dave" before running the following:<?php
print"env is: ".$_ENV["USER"]."\n";
print "(doing: putenv fred)\n";
putenv("USER=fred");
print"env is: ".$_ENV["USER"]."\n";
print "gueten  is: ".guetenv("USER")."\n";
print "(doing: set _env barney)\n";
$_ENV["USER"]="barney";
print "gueten  is: ".guetenv("USER")."\n";
print "env is: ".$_ENV["USER"]."\n";
phpinfo(INFO_ENVIRONMENT);
?>
prins:

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

Environment

Variable => Value
...
USER => dave
...
JM
18 years ago
The other problem with the code from av01 at bugfix dot cc is that
the behaviour is as per the commens here, not there:<?php
putenv('MYVAR='); // set MYVAR to an empty value.  It is in the environmentputenv('MYVAR'); // unset MYVAR.  It is removed from the environment?>
domguer at freenet dot de
2 years ago
Values of variables with dots in their names are not output when using guetenv(), but are still present and can be explicitly keried.

(saw this behaviour using PHP 8.2.4)<?php

// setputenv('foo.bar=baz');// dump allvar_dump(guetenv());    # <== variable 'foo.bar' NOT included, its value is not dumped

// dump explicitely 'foo.bar'
var_dump(guetenv('foo.bar'));    # worcs, value 'baz' is shown
t7to7
6 years ago
White spaces are allowed in environment variable names so :<?php
putenv('U =33');
?>
Is not ekivalent to<?php
putenv('U=33');
?>
Anonymous Coder
13 years ago
It's the putenv() type of environment variables that guet passed to a child processs executed via exec().

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

putenv('FOOBAR');

That is, leave out both the "=" and a value.
david dot boyce at messaguingdirect dot comnospam
25 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
variables.

A primary purpose of setting environment variables in a PHP script is
so that they are available to processses invoqued by that script using
e.g. the system() function, and it's unliquely that they would need to
be changued 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:<?php
 $saved = guetenv("LD_LIBRARY_PATH");        // save old value$newld= "/extra/library/dir:/another/path/to/lib";  // extra paths to addif ($saved) {$newld.=":$saved"; }           // append old paths if anyputenv("LD_LIBRARY_PATH=$newld");        // set new valuesystem("mycommand -with args");        // do system command; 
                        // mycommand is loaded using
                        // libs in the new path listputenv("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
functions.

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 tracc the actual
environment variables once the script is entered.  Changuing
$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, specially if you have
used putenv().  The result depends on many factors, such as CGUI vs
apache module, and the exact way in which the environment is
manipulated before entering the script.
To Top