PHP函数filemtime返回负值或非常大的值

时间:2012-12-13 20:40:55

标签: php filemtime

我正在创建一个WordPress插件,可以看到在某些服务器上,对于某些文件,stat(或filemtime)返回无效的 mtime 值。在某些情况下,它是负值或非常大的值(超过30亿)。

在FTP中我可以看到时间戳是正确的。

5 个答案:

答案 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并使用它。