昨天老大突然和我说,我做的日志view系统出现了时间bug。然后发现了linux下ls -l命令获取的结果,显示的最后修改时间,并不是网上所说的一年前的就会以月 日 年来显示(今年的按月 日 分时显示),而是去年的最后修改时间距离今年6月以内的依然是以月 日 分时来显示,超过6个月的就以月 日 年显示。

我用的是ftp_rawlist函数来获取服务器目录下的日志文件列表信息,得到的结果是和执行命令ls -l一样的,不过是按每行以数组形式返回(ftp_rawlist说明传送门)。我就把获取的结果里把最后修改时间取出来,再strtotime转换成时间戳,若是带有年份的,就会精确到日,不带的就会转成今年的时间戳,精确到分。问题就出现在这里,有些最后修改距现在还没有6个月,但是年份是去年的文件,最后处理的时间戳的年份是今年的,这就导致了这个时间bug。具体请看下面的cache文件示例。
# ll

# ls --full-time

解决方案

  • ftp支持cmd命令方式,但是可惜我试了很多次,总是提示主动或被动模式打开,但是被动模式打开函数和ftp的cmd形式的函数一起使用又会超时,被动模式代开函数和其他的一起用也没问题,我也没找出原因,但是我觉得这绝对是解决问题的方法之一。
  • 使用我上面用的方法,只不过获得时间戳的时候,需要检测一下,是否大于当前时间,大于的话就减去一年的时间戳就是真实时间了