search for in the  
<phpversionrestore_include_path>
Last updated: Thu, 19 May 2005

putenv

(PHP 3, PHP 4, PHP 5)

putenv -- Sets the value of an environment variable

Description

void putenv ( string setting )

Adds setting 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.

Setting certain environment variables may be a potential security breach. The safe_mode_allowed_env_vars directive contains a comma-delimited list of prefixes. In Safe Mode, the user may only alter environment variables whose names begin with the prefixes supplied by this directive. By default, users will only be able to set environment variables that begin with PHP_ (e.g. PHP_FOO=BAR). Note: if this directive is empty, PHP will let the user modify ANY environment variable!

The safe_mode_protected_env_vars directive contains a comma-delimited list of environment variables, that the end user won't be able to change using putenv(). These variables will be protected even if safe_mode_allowed_env_vars is set to allow to change them.

Warning

These directives have only effect when safe-mode itself is enabled!

Example 1. Setting an environment variable

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

See also getenv().



User Contributed Notes
putenv
otie at ev1 dot net
26-Mar-2005 10:02
trying to change timezones using putenv:
In my case (php 4.2.2) (redhat 2.4.21-1.1931.2.274) TZ does not show up in either the PHP or Linux environment. I'm not sure what the format for TZ is. I tried TZ=EST5EDT. It seemed to work. When I started a session with another browser, it worked there too. Even though I didn't change the environment there.... Hmmm.
When I ran the test without the putenv... the date() function would sometimes show CST (my zone), sometimes EST. Every time I reloaded the page, the time would change zones. All times from a database - not time() time.
Restoring my TZ=CST didn't help. The times would still switch back and forth.
I finally restarted Apache. That worked. The times are now stable.
I think the only solution is subtracting (or adding) the appropriate time difference from the time stamp.

I wonder what the time functions are looking at.

O.
Iavor
07-Feb-2005 04:06
Compare to apache_setenv() and apache_getenv().

I had a case setting an env var in VirtualHost which I tried to change with putenv() - but did not work.

apache_setenv() worked.
cap at capsi dot com
28-Mar-2003 12:18
I've been using putenv with PHP 4.3.1 and Apache 2.0.44, but it does not seem to restore variables correctly. I'm getting +0100 and -0800 entries all across my Apache logs. Manually adding a putenv in page footers to restore the original value seems to fix things, but I still wish I could set the time zone for a specific request only.

I'm not sure whether using putenv affects all threads within the process, that could be another problem.
verkoop at it-design dot com
08-Mar-2001 05:19
for those who have problems with the putenv ('TZ=Europe/Amsterdam').
I found that there is a solution/work-a-round. It will work, but only if you add  mktime(0,0,0,1,1,1970) on the next line. So:

putenv ('TZ=Europe/Amsterdam');
mktime(0,0,0,1,1,1970)
echo date("H:i:s");
johnhill at webtendon dot com
10-Feb-2001 03:46
Here is an example of using putenv to change the timezone for the current script.  You would have to add a putenv() call to each page in which you wanted to change the timezone.  This was posted here about a year ago...I forgot the author's name.  He mentioned to "see the zoneinfo directory-tree on your System for a list". This is usually /usr/share/zoneinfo or /usr/lib/zoneinfo.  It works in PHP3, not sure about PHP4.

  //Set the Timezone
print("server timezone is: " . getenv('TZ') . "<br>\n");
  print("server time is: " . date("H:i:s") . "<br><br>\n");
  print("changing server time zone to US/Pacific....<br><br>\n");
  putenv("TZ=US/Pacific");
  print("new server time is: " . date("H:i:s") . "<br>\n");
  print("new server timezone for this script is: " . getenv('TZ'));

some Unix servers may use a different format for TZ.  Example: putenv("TZ=PST8EDT");
david dot boyce at messagingdirect dot comnospam
14-Sep-2000 12:23
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 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:

 $saved = 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
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 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.

<phpversionrestore_include_path>
 Last updated: Thu, 19 May 2005
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: The Server Pages
Last updated: Thu May 19 17:35:34 2005 CDT