|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-07-19 23:26 UTC] dave at smartboy dot com
Description:
------------
Using PHP CLI on Windows - filemtime() returns an incorrect value.
This problem does NOT occur with the Apache 2 SAPI.
Value reported is ahead by 9 hours (could be time zone related? I am in GMT+10:00 time zone)
Sample output:
$ php test_filemtime.php
2006-07-20 18:20:08
$ ls -l test_filemtime.php
-rw-r--r-- 1 Dave None 81 Jul 20 09:20 test_filemtime.php
(the above from Cygwin)
When running the exact same script inside Apache2 the correct time is printed
2006-07-20 09:20:08
Reproduce code:
---------------
<?php
echo date('Y-m-d H:i:s', filemtime($_SERVER["SCRIPT_FILENAME"])) . "\n";
Expected result:
----------------
2006-07-20 09:20:08
Actual result:
--------------
2006-07-20 18:20:08
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Dec 01 23:00:02 2025 UTC |
Setting date.timezone does not change the behaviour. Changing the sample script to: <?php echo "default timezone: " . date_default_timezone_get() . "\n"; date_default_timezone_set("Australia/Brisbane"); echo "default timezone: " . date_default_timezone_get() . "\n"; echo date('Y-m-d H:i:s', filemtime($_SERVER["SCRIPT_FILENAME"])) . "\n"; produces this output: $ php test_filemtime.php default timezone: Australia/Melbourne default timezone: Australia/Brisbane 2006-07-22 20:35:22 Which is still 9 hours greater than it should be. When using Apache2 SAPI, the following (correct) output is generated: default timezone: Australia/Melbourne default timezone: Australia/Brisbane 2006-07-22 11:35:22 Changing "Australia/Brisbane" to "UTC" changes the time that is printed, however there is still a 9 hour difference between the value printed by CLI (2006-07-22 10:39:47) and the value printed by Apache2 SAPI (2006-07-22 01:39:47)Changed test_filemtime.php to: <?php echo filemtime($_SERVER["SCRIPT_FILENAME"]) . "\n"; date_default_timezone_set("UTC"); echo filemtime($_SERVER["SCRIPT_FILENAME"]) . "\n"; Output is: $ php test_filemtime.php 1153659348 1153659348 So, the return from filemtime() is not affected by the date.timezone setting. However the value is out by 9 hours. This is the expected return value: $ stat -c%Z test_filemtime.php 1153626948 (this matches very closely the output of date +%s, as I had just saved the file when running the above command) And the difference is 9 hours $ echo $((1153659348-1153626948)) 32400 $ echo $((9*3600)) 32400