Jer*_*emy 10 php linux php-5.2
我知道我的文件系统存储文件修改时间(以毫秒为单位),但我不知道通过PHP访问该信息的方法.当我这样做时,ls --full-time我看到了这个:
-rw-r--r-- 1 nobody nobody 900 2012-06-29 14:08:37.047666435 -0700 file1
-rw-r--r-- 1 nobody nobody 900 2012-06-29 14:08:37.163667038 -0700 file2
Run Code Online (Sandbox Code Playgroud)
我假设点后的数字是毫秒.
所以我意识到我可以使用ls并按修改时间排序,如下所示:
$filelist = `ls -t`;
Run Code Online (Sandbox Code Playgroud)
但是,目录有时会有大量的文件,我注意到ls在这种情况下可能会很慢.
所以相反,我一直在使用,find但它没有用于按修改时间对结果进行排序的开关.这是我现在正在做的一个例子:
$filelist = `find $dir -type f -printf "%T@ %p\n" | sort -n | awk '{print $2}'`;
Run Code Online (Sandbox Code Playgroud)
当然,这并没有降低到毫秒级,因此在同一秒内创建的文件有时会以错误的顺序列出.
只有少数文件系统(如EXT4)实际存储这些时间达到纳秒精度.这不是保证可用的东西,在其他文件系统(如EXT3)上你会注意到小数部分是.000000000
现在,如果此功能对您非常重要,您可以编写专门的PHP扩展.这将绕过对外部实用程序的调用,并且应该更快.许多地方都很好地解释了创建扩展的过程,就像这里一样.这种扩展的合理方法可以是替代的fstat函数实现,它公开了现在在/usr/include/bits/stat.h中定义的stat结构中可用的高精度字段.
像往常一样,没有什么是免费的 必须维护此扩展,可能无法在托管环境等上运行它.此外,您的php解决方案将仅在部署了扩展的服务器上运行(尽管可以通过回退基于ls的技术来避免如果未检测到扩展名).
| 归档时间: |
|
| 查看次数: |
1236 次 |
| 最近记录: |