我正在创建一个WordPress插件,可以看到在某些服务器上,对于某些文件,stat
(或filemtime
)返回无效的 mtime 值。在某些情况下,它是负值或非常大的值(超过30亿)。
在FTP中我可以看到时间戳是正确的。
答案 0 :(得分:11)
当您在任何PHP时间戳中获得负数时,它只是Unix时代之前的秒数,并且不限于filemtime
示例A
echo strtotime("1950-1-1"); // Outputs -631155600
^------- negative value
示例B
输出负值并不意味着如果尝试
,则无法正确格式化echo date("Y-m-d",-631155600); // Output 1950-01-01
最后
FTP I can see that the timestamp is correct though
您的FTP应用程序绝对不是PHP并且有自己的内部日期系统..其日期系统可能不会在时间戳中使用负值
答案 1 :(得分:0)
如果我理解正确的话,你正在寻找一个非常大的值 - 这是一个Unix时间戳。
你尝试过这样的事吗?
date ("F d Y H:i:s.", filemtime($filename))
filemtime
返回自1970年1月1日以来经过的秒数,这应该是一个非常大的值;您可以使用类似上述示例的内容将这些秒转换为人类可读的内容。
另一方面,如果您意识到这一点并且您认为您的大价值仍然存在错误,那么发布所述价值的示例以及您期望的日期可能会有所帮助为了它。
答案 2 :(得分:0)
当您的服务器运行ntp守护程序时,这可能是在请求中设置时间的结果。这发生在e.x.对于apache日志和其他依赖于unix系统函数的东西。
答案 3 :(得分:0)
为filemtime返回负值的文件大小是多少?
它在这里说:http://php.net/manual/en/function.stat.php“因为PHP的整数类型已签名且许多平台使用32位整数,所以某些文件系统函数可能会为大于2GB的文件返回意外结果。”
答案 4 :(得分:0)
unix时间戳的当前值约为1,356,197,722,因此十亿是合理的。
虽然不太可能出现问题,但在调用filemtime()之前,有必要了解http://php.net/manual/en/function.clearstatcache.php并使用它。