如何在Mac上获得PHP文件的实际创建时间?
当您在Finder中选择一个文件并在Mac上点击cmd+i时,您将获得该文件(实际)创建的时间和上次修改的时间 我的问题很简单:如何使用PHP从已经存在的Mac文件中获取实际创建时间 现在,在研究了这个话题之后,我读到了一些帖子,上面说这是不可能的,但在我的世界里,“不可能”只意味着一件事情需要更长的时间才能完成。解决方法和黑客是受欢迎的 我不希望得到与mtime或ctime相关的建议,因为这些建议仅在上次更新或修改文件时访问如何在Mac上获得PHP文件的实际创建时间?,php,macos,file,time,Php,Macos,File,Time,当您在Finder中选择一个文件并在Mac上点击cmd+i时,您将获得该文件(实际)创建的时间和上次修改的时间 我的问题很简单:如何使用PHP从已经存在的Mac文件中获取实际创建时间 现在,在研究了这个话题之后,我读到了一些帖子,上面说这是不可能的,但在我的世界里,“不可能”只意味着一件事情需要更长的时间才能完成。解决方法和黑客是受欢迎的 我不希望得到与mtime或ctime相关的建议,因为这些建议仅在上次更新或修改文件时访问 此外,我们这里可能只讨论Mac,但也欢迎独立于操作系统的解决方案——
此外,我们这里可能只讨论Mac,但也欢迎独立于操作系统的解决方案——如果它们真的适用于所有系统的话。这个脚本是我管理过的最好的脚本,它包装了BSD上可用的命令行
stat
工具,以提供inode birthdime属性
// 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的stat完全相同,但它提供了第四个“inode出生时间”参数。BSDstat()
系统调用在可用时返回st_birthdime,但我还没有找到一种方法将其本机公开给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
下面的命令只返回inode birthdime的unix时间戳,这是迄今为止我发现的最好的时间戳。您可以使用或运行它
您能得到的唯一最接近的时间是函数的上次更新时间。MacOS X有一个扩展版本的
stat()
系统调用,该调用也返回文件创建时间,但默认情况下未启用(即使在本机C代码中)结果结构的字段顺序与标准POSIX版本中的字段顺序不同
在10.6中,该版本由/usr/lib/libc.dylib
中的(隐藏)符号\u stat$INODE64
提供,如果定义了宏\u 64位\u INODE
,该符号将自动替换为stat
如果您能找出如何从动态库中访问该符号,那么工作完成了 酷!这看起来很有希望。非常感谢。酷!然而,访问符号似乎很困难。。。这只是一个不评论一行的问题,还是更重要?另外,我想知道,在Mac OS X 10.5中有什么不同吗?POSIX没有指定文件创建时间attributeBSD(st_birthdime),其中包括OSX:)我
$ stat -f %B test
1306757771