Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Mac上获得PHP文件的实际创建时间?_Php_Macos_File_Time - Fatal编程技术网

如何在Mac上获得PHP文件的实际创建时间?

如何在Mac上获得PHP文件的实际创建时间?,php,macos,file,time,Php,Macos,File,Time,当您在Finder中选择一个文件并在Mac上点击cmd+i时,您将获得该文件(实际)创建的时间和上次修改的时间 我的问题很简单:如何使用PHP从已经存在的Mac文件中获取实际创建时间 现在,在研究了这个话题之后,我读到了一些帖子,上面说这是不可能的,但在我的世界里,“不可能”只意味着一件事情需要更长的时间才能完成。解决方法和黑客是受欢迎的 我不希望得到与mtime或ctime相关的建议,因为这些建议仅在上次更新或修改文件时访问 此外,我们这里可能只讨论Mac,但也欢迎独立于操作系统的解决方案——

当您在Finder中选择一个文件并在Mac上点击cmd+i时,您将获得该文件(实际)创建的时间和上次修改的时间

我的问题很简单:如何使用PHP从已经存在的Mac文件中获取实际创建时间

现在,在研究了这个话题之后,我读到了一些帖子,上面说这是不可能的,但在我的世界里,“不可能”只意味着一件事情需要更长的时间才能完成。解决方法和黑客是受欢迎的

我不希望得到与mtime或ctime相关的建议,因为这些建议仅在上次更新或修改文件时访问


此外,我们这里可能只讨论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出生时间”参数。BSD
stat()
系统调用在可用时返回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