为什么我在php中使用filemtime得到1969年12月31日作为我最后一次修改的文件名?
我是php新手,所以请不要介意我问这个问题,但我真的很困惑为什么为什么我在php中使用filemtime得到1969年12月31日作为我最后一次修改的文件名?,php,datetime,function,Php,Datetime,Function,我是php新手,所以请不要介意我问这个问题,但我真的很困惑为什么filemtime(filename.txt)给我的最后修改时间是1969年12月31日?1970年1月1日0:00是Unix时代的开始。因此,时间戳0是1969年12月31日,它是失败的filemtime操作以及(可能)DST问题的结果。例如,您需要通过在文件名中添加引号来修复filemtime操作(如果您的示例不仅仅是伪代码): filemtime ("filename.txt"); 这可能意味着找不到您的文件: 因为它不存
filemtime(filename.txt)
给我的最后修改时间是1969年12月31日?1970年1月1日0:00是Unix时代的开始。因此,时间戳0是1969年12月31日,它是失败的filemtime操作以及(可能)DST问题的结果。例如,您需要通过在文件名中添加引号来修复filemtime操作(如果您的示例不仅仅是伪代码):
filemtime ("filename.txt");
这可能意味着找不到您的文件:
- 因为它不存在
- 或者因为它不在currect目录中
- 或者因为你没有引用它的名字,你没有^^
filemtime
返回false
所以,1969年12月31日是零的日期/时间。。。我想,根据你所在的地区;我自己,用这个代码:
$filemtime = filemtime(filename.txt);
$formated = date('Y-m-d H:i:s', $filemtime);
var_dump($filemtime, $formated);
获取此输出:
boolean false
string '1970-01-01 01:00:00' (length=19)
false,因为文件不存在,而1970-01-01
在01:00
因为我所在的地区(我在法国,UTC+1小时)
请注意,我还收到了一些通知和警告:
注意:使用未定义的常量文件名-假定为“filename”
注意:使用未定义的常量txt-假定为“txt”
警告:filemtime()
如果否:是否启用了
error\u reporting
和/或display\u errors
功能?如果filemtime找不到该文件,您将收到此信息 您不能使用
$t = filemtime(filename.txt);
至少,使用类似
$t = filemtime("filename.txt");
我也遇到了同样的问题,通过将
$filename
之前的完整物理路径与filemtime($physical\u path.$filename)
之前的文件上次修改日期和filesize($physical\u path.$file)
之前的文件大小连接起来,使文件路径成为绝对路径,从而解决了这个问题 它实际上是一个返回值-1
,因此它出现在1969年。不,这也是我第一次想到的,但是filemtime()在失败时返回false(=0)。解释一定与夏令时有关。夏令时在1969年底,根据您所在时区与UTC之间的小时数和分钟数进行调整,因为filemtime转换为本地时区。@Pascal:谢谢Pascal提供详细的答案。我收到警告,提到文件名的stat失败,并且我的错误报告已启用。我不确定为什么filemtime没有获得我的文件,就像我回显文件一样,但我获得了文件名,但修改时间错误,截止到12月31日,我仍然想知道为什么会这样。