filemtime возвращяет неверную дату.

Ironfoundersson

Новичок
filemtime возвращяет неверную дату.

Добрый день.

направьте меня пожалуйста к нужному врачу или подверите мой собственный диазноз...

ситуация следующяя, нистого ниссего (что по сути не возможно) сервер стал возвращять странную дату дял модификации файла.
она всегда минус 1 час с реальной даты.

1) date c консоли возвращяет
>> Tue May 5 23:20:22 EEST 2009
что есть правильной текущей датой и временем.

2) насколько я понимаю и вспоминаю из документации дейт без параметра использует текущий таймстам возвращенный системой.
echo date("Y-m-d H:i:s");
>>2009-05-05 23:20:54
// что есть так же правильно.

собственно в чем проблема.
только что модифицированый скрипт который собственно и выводит данные возвращяет время модификации минус 1 час.

clearstatcache();
echo date("Y-m-d H:i:s").'<br>';
echo date("Y-m-d H:i:s", filemtime(__FILE__)).'<br>';

2009-05-05 23:22:58
2009-05-05 22:22:31

----------------
тут я туплю.

догадки две


Либо я затупил и поставил временной пояс не тот (но проверяю всюду стоит Европа/Киев)
Либо дело в EEST восточноевропейском летнем времени

нутром чую - доказать не могу...

--------
есть у когонибуть какие догадки в чем трабла быть может?
 

Ironfoundersson

Новичок
за меня нтпдейт переводит, собственно строка (вроде?) доказывающяя что используется летнее время

;;1) date c консоли возвращяет
;;>> Tue May 5 23:20:22 EEST 2009
;;что есть правильной текущей датой и временем.
 

DiMA

php.spb.ru
Команда форума
php.net переполнен подобными багами, которые они не хотят призновать и пишут бредовый совет про зону в пхп.ини .-)

вот, например, моя заява... самое интересно - старые версии пхп не глючат с датами
http://bugs.php.net/bug.php?id=47177
 

Ironfoundersson

Новичок
Дмитрий, так как апдейтов я не делал уже долго и до вчера работало нормально, грешить на версию пхп я не буду. что то с окружением, с убунтой...

а зона в пхп ини указана, так что с него вязтки гладки.
-----

опять же...

touch(__FILE__);
echo date("Y-m-d H:i:s", filemtime(__FILE__)).'<br>';
вернет правильную дату....

---
зы нашел такое описание
http://ua2.php.net/filemtime/#82179 что собственно и есть наш случай.
 

fixxxer

К.О.
Партнер клуба
с filemtime() и переводом времени есть известный баг в винде с несбрасываением внутреннего кеша. на msdn советуют перезагружать сервер :D
 

fixxxer

К.О.
Партнер клуба
а хрен знает тогда

я всегда на сервере выставляю аппаратное время по UTC, в /etc/localtime или там смотря-какой-дистриб нужную таймзону, ее же в php.ini - проблем нет
 

DiMA

php.spb.ru
Команда форума
кто может объяснить, причем тут вообще временная зона
1. моя софтина генерит летнее и зинее время, ставит его на 2 новых файла и тут же читает (между операциями зона не меняется)
2. старые версии пхп работают корректно, новые - глючат (см мою ссылку)
 

dimagolov

Новичок
кто может объяснить, причем тут вообще временная зона
при том, что в NTFS и, видимо, в *NUX-ах время создания/модификации храниться в GMT и для того, чтобы отобразить его нужна информация о таймзоне & DST.

http://msdn.microsoft.com/en-us/library/ms724290(VS.85).aspx
File Times and Daylight Saving Time

You must take care when using file times if the user has set the system to automatically adjust for daylight saving time.

To convert a file time to local time, use the FileTimeToLocalFileTime function. However, FileTimeToLocalFileTime uses the current settings for the time zone and daylight saving time. Therefore, if it is daylight saving time, it takes daylight saving time into account, even if the file time you are converting is in standard time.

The FAT file system records times on disk in local time. GetFileTime retrieves cached UTC times from the FAT file system. When it becomes daylight saving time, the time retrieved by GetFileTime is off an hour, because the cache is not updated. When you restart the computer, the cached time that GetFileTime retrieves is correct. FindFirstFile retrieves the local time from the FAT file system and converts it to UTC by using the current settings for the time zone and daylight saving time. Therefore, if it is daylight saving time, FindFirstFile takes daylight saving time into account, even if the file time you are converting is in standard time.

The NTFS file system records times on disk in UTC. To account for daylight saving time when converting a file time to a local time, use the following sequence of functions instead of using FileTimeToLocalFileTime:

* FileTimeToSystemTime
* SystemTimeToTzSpecificLocalTime
* SystemTimeToFileTime
 
Сверху