当您在Finder中选择文件并在Mac上点击cmd + i时,您将获得(实际)创建文件的时间以及上次修改文件的时间。
我的问题很简单:如何从已有的PHP文件中获取创建的实际时间?
现在,在研究了这个话题之后,我已经阅读了一些帖子,说这是不可能的,但在我的世界里,“不可能”只意味着事情需要更长的时间来完成。欢迎解决方法和黑客行为。
我不想要mtime或ctime相关的建议,因为这些建议只能在上次更新或修改文件时访问。
此外,我们可能只在这里谈论Mac,但也欢迎OS独立解决方案 - 如果它们真的适用于所有系统。
答案 0 :(得分:8)
这个脚本是我管理过的最好的,它包装了BSD上可用的命令行stat
工具,以提供inode birthtime属性。
// stat.php
$filename = 'test';
$stat = stat($filename);
date_default_timezone_set('America/Denver');
echo strftime("atime: %H:%M:%S\n", $stat['atime']);
echo strftime("mtime: %H:%M:%S\n", $stat['mtime']);
echo strftime("ctime: %H:%M:%S\n", $stat['ctime']);
if ($handle = popen('stat -f %B ' . escapeshellarg($filename), 'r')) {
$btime = trim(fread($handle, 100));
echo strftime("btime: %H:%M:%S\n", $btime);
pclose($handle);
}
命令行stat
工具读取atime,ctime,mtime与PHP的统计信息完全相同,但是会出现第四个“inode birth time”参数。 BSD stat()
系统调用在可用时返回st_birthtime,但我还没有找到一种方法将其本机公开给PHP。
$ touch test # create a file
$ stat test
..."May 30 06:16:22 2011" "May 30 06:16:22 2011" "May 30 06:16:22 2011" "May 30 06:16:11 2011"...
$ open .
$ touch test # about one minute later
$ stat test
..."May 30 06:17:04 2011" "May 30 06:17:04 2011" "May 30 06:17:04 2011" "May 30 06:16:11 2011"...
$ php stat.php
atime: 06:52:48
mtime: 06:17:04
ctime: 06:17:04
btime: 06:16:11
以下命令返回仅的unix时间戳inode出生时间,这是我迄今为止发现的最好的。您可以使用popen()或proc_open()
运行它$ stat -f %B test
1306757771
答案 1 :(得分:2)
MacOS X有一个stat()
系统调用的扩展版本,它也返回文件创建时间,但默认情况下它没有启用(即使在本机C代码中),因为生成的结构的字段顺序不同对于那些标准POSIX版本的人。
在10.6中,该版本由_stat$INODE64
中的(隐藏)符号/usr/lib/libc.dylib
提供,如果定义了宏stat
,则会自动替换_DARWIN_FEATURE_64_BIT_INODE
。
如果你能弄清楚如何从动态库中访问该符号,那就完成了工作!
答案 2 :(得分:0)
您可以获得的最接近的是filemtime函数的最后更新时间。