ID: 22135 User updated by: vaughan at ucla dot edu Reported By: vaughan at ucla dot edu Status: Open Bug Type: Date/time related Operating System: Linux (debian) PHP Version: 4.2.3 New Comment:
no, TZ is not being set in httpd.conf nor in apachectl. Experiment #1 What happens if we use putenv("TZ=US/Los_Angeles")? the script: <? print("server timezone is: " . getenv('TZ') . "<br>\n"); print("server time is: " . date("F j, Y, g:i a") . "<br>\n"); print("changing server time zone to US/Los_Angeles....<br>\n"); putenv("TZ=US/Los_Angeles"); print("new server time is: " . date("F j, Y, g:i a") . "<br>\n"); print("new server timezone for this script is: " . getenv('TZ')); ?> here's the output, with the incorrect times: server timezone is: America/Los Angeles server time is: February 22, 2003, 5:01 pm changing server time zone to US/Los_Angeles.... new server time is: February 22, 2003, 5:01 pm new server timezone for this script is: US/Los_Angeles output of date(T):US/Los_Angeles Experiment # 2: I also tried putting SetEnv US/Pacific into httpd.conf. this script: print("server timezone is: " . getenv('TZ') . "<br>\n"); print("server time is: " . date("F j, Y, g:i a") . "<br>\n"); print("changing server time zone to US/Pacific....<br>\n"); putenv("TZ=US/Pacific"); print("new server time is: " . date("F j, Y, g:i a") . "<br>\n"); print("new server timezone for this script is: " . getenv('TZ')); produces this output: server timezone is: US/Pacific server time is: February 22, 2003, 5:29 pm changing server time zone to US/Pacific.... new server time is: February 22, 2003, 9:29 am new server timezone for this script is: US/Pacific output of date(T):PST In this case, PHP picks up the US/Pacific timezone from the environment, but gets the time wrong! Experiment # 3 try with SetEnv = US/Los_Angeles in httpd.conf same script as #2, produces bad output: server timezone is: US/Los_Angeles server time is: February 22, 2003, 5:34 pm changing server time zone to US/Pacific.... new server time is: February 22, 2003, 9:34 am new server timezone for this script is: US/Los_Angeles output of date(T):PST So it seems to be the case that the ONLY way to get PHP to have the correct time is to use putenv("TZ=US/Pacific") in a script. Any other ideas? Thanks for your help Previous Comments: ------------------------------------------------------------------------ [2003-02-09 16:49:25] michael dot mauch at gmx dot de You don't have a SetEnv TZ "America/Los Angeles" in your httpd.conf, do you? Or maybe TZ is fixed in your apachectl script? ------------------------------------------------------------------------ [2003-02-09 13:54:50] vaughan at ucla dot edu here's what I do, as root: # export TZ='America/Los_Angeles' # set | grep TZ # TZ=America/Los_Angeles # apachectl stop /usr/sbin/apachectl stop: httpd stopped # apachectl start /usr/sbin/apachectl start: httpd started output of the php script: server timezone is: America/Los Angeles server time is: February 9, 2003, 7:51 pm changing server time zone to US/Pacific.... new server time is: February 9, 2003, 11:51 am new server timezone for this script is: US/Pacific I notice that PHP does not pick up the underscore in "Los_Angeles". What I wondered was whether there's a way to do the equivalent of putenv("TZ=US/Pacific") in php.ini? However, I have just noticed that the time is wrong in OTRS running on the same server -- and it is a set of perl scripts. So maybe this is not a PHP bug at all? ------------------------------------------------------------------------ [2003-02-09 12:39:25] michael dot mauch at gmx dot de "apachectl restart" does not pick up the new TZ environment variable. Did you try apachectl stop / apachectl start? I get the same results as you with TZ="America/Los Angeles", but "America/Los_Angeles" or "US/Pacific" work. As far as I know there's no php.ini setting that fiddles with timezones. ------------------------------------------------------------------------ [2003-02-09 10:54:54] vaughan at ucla dot edu Yes, tzselect suggests that TZ be set as 'America/Los_Angeles'. I did this, using export TZ='America/Los_Angeles' and restarted apache. It made no difference to the php script output. In other words, if php believes that the server timezone is 'America/Los_Angeles' it gives the incorrect time. But if it believes that timezone is 'US/Pacific' it gives the correct time. However, setting TZ to 'US/Pacific' also makes no difference to the script output. So I'm wondering where PHP is picking up the timezone information from and how I can get it to believe that the timezone is 'US/Pacific' from startup. Can I set that in php.ini? (Also, there are two timezone commands on debian, tzselect and tzconfig. tzconfig lets one choose either 'US/Pacific' or 'America/Los_Angeles' for the timezone, but neither makes a difference to this script). ------------------------------------------------------------------------ [2003-02-09 07:49:05] michael dot mauch at gmx dot de Using tzselect on Debian leads to the assumption that your TZ variable should probably be "America/Los_Angeles" (with underscore). Can you test that, please? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/22135 -- Edit this bug report at http://bugs.php.net/?id=22135&edit=1