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

PHP函数filemtime返回负值或非常大的值,php,filemtime,Php,Filemtime,我正在创建一个WordPress插件,可以看到在某些服务器上,对于某些文件,(或)返回无效的mtime值。在某些情况下,它是负值或非常大的值(超过30亿) 在FTP中,我可以看到时间戳是正确的。如果我理解正确,您需要的是一个非常大的值-这是一个Unix时间戳 你试过这样的吗 date ("F d Y H:i:s.", filemtime($filename)) filemtime返回自1970年1月1日以来经过的秒数,这应该是一个非常大的值;您可以使用上面的示例将这些秒转换为人类可读的内容 另

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


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

如果我理解正确,您需要的是一个非常大的值-这是一个Unix时间戳

你试过这样的吗

date ("F d Y H:i:s.", filemtime($filename))
filemtime
返回自1970年1月1日以来经过的秒数,这应该是一个非常大的值;您可以使用上面的示例将这些秒转换为人类可读的内容


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

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

当您在任何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我可以看出时间戳是正确的


您的FTP应用程序肯定不是PHP,它有自己的内部日期系统。。其日期系统可能不会在时间戳中使用负值

返回filemtime负值的文件大小是多少


这里说:“因为PHP的整数类型是有符号的,并且许多平台使用32位整数,所以对于大于2GB的文件,一些文件系统函数可能会返回意外的结果。”

unix时间戳的当前值约为1356197722,因此十亿是合理的


虽然这不太可能是问题所在,但在调用filemtime()之前了解并使用它是值得的。

+3bill不太可能,除非您使用的是64位系统+3对于标准签名的32位时间戳来说,账单是不可能的,如果您在64位区域,账单将与~2065相对应。可能会重复。。。美国还是英国?文件路径肯定是正确的。当我覆盖文件时,时间戳被正确报告。我猜30亿+与负值相关,其中最高阶位被错误解释。我不明白的是,如何设置最高阶位?这应该会触发一些警告;您是否已将错误报告设置为最高级别?大,是。超过30亿,不。@Kolink,当然不超过30亿,但如果我没弄错的话,可能超过10亿。我认为“30亿”可能是一个误算,因为
filemtime
似乎不太可能返回任何其他内容。我知道时间戳是“自1970年以来的秒数”。但是,它不应该得到这么大的值。例如,我得到的值是:3421738619这是一个非常旧的服务器,如果它在1970年之前修改了文件:)当创建文件时,可能是错误的系统配置。你知道时间戳变得非常大的原因吗?@akshat多大。。。抽样value@baba3421738619这是我们得到的值之一