這個腳本是我所管理的最好的,它包裝上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,修改時間酷似PHP的統計,但第四個「inode的誕生時間」參數出現。 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
下面的命令返回僅 inode的birthtime,這是迄今爲止我已經找到了最好的Unix時間戳。你可以用popen()或proc_open()
$ stat -f %B test
1306757771
POSIX未指定文件創建時間屬性 – Alnitak 2011-05-30 13:47:24
BSD包含了(st_birthtime),其中包含OSX! :) – lunixbochs 2011-05-30 13:50:19
我<3 BSD。我收集這意味着無論在這裏找到什麼解決方案,可能適用於其他BSD系統。 :) – Kebman 2011-05-30 14:01:40