11

I am creating a WordPress plugin and can see that on some servers, for certain files, the stat (or filemtime) returning invalid mtime value. In some cases it is a negative value or a very large value (more than 3 billion).

In FTP I can see that the timestamp is correct though.

4

5 回答 5

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 并且有自己的内部日期系统 .. 它的日期系统可能不会在时间戳中使用负值

于 2012-12-17T10:13:36.140 回答
0

为 filemtime 返回负值的文件有多大?

它在这里说: http: //php.net/manual/en/function.stat.php “由于 PHP 的整数类型是有符号的并且许多平台使用 32 位整数,因此某些文件系统函数可能会为大于 2GB 的文件返回意外结果。”

于 2012-12-19T11:38:13.823 回答
0

如果我理解正确,那么您正在寻找一个非常大的值 - 这是一个 Unix 时间戳。

你尝试过这样的事情吗?

date ("F d Y H:i:s.", filemtime($filename))

filemtime返回自 1970 年 1 月 1 日以来经过的秒数,这确实应该是一个非常大的值;您可以使用上面的示例将这些秒数转换为人类可读的内容。

另一方面,如果您意识到这一点并且您认为您的大值仍然是错误的,那么发布该值的示例以及您期望的日期可能会有所帮助。

于 2012-12-13T20:44:11.227 回答
0

unix 时间戳的当前值约为 1,356,197,722,因此十亿是合理的。

虽然这不太可能是问题,但值得了解http://php.net/manual/en/function.clearstatcache.php并在调用 filemtime() 之前使用它。

于 2012-12-22T17:38:18.187 回答
0

当您的服务器运行 ntp 守护程序时,这可能是在请求中设置时间的结果。这也发生在 apache 日志和其他依赖于 unix 系统功能的东西上。

于 2012-12-16T15:10:40.327 回答