PHP: как я могу узнать дату создания файла?
Я читаю папку с большим количеством файлов.
Как я могу узнать дату создания файла. Я не вижу никакой прямой функции для его получения.
Существуют filemtime
и filectime
.
И если файл не был изменен, что произойдет?
5 answers
Используйте файловое время . Для Windows он вернет время создания , а для Unix - время изменения , которое является наилучшим, которое вы можете получить, потому что в Unix нет времени создания (в большинстве файловых систем).
Обратите также внимание, что в некоторых текстах Unix ctime файла упоминается как время создания файла. Это неправильно. В большинстве Unix нет времени для создания файлов Unix файловые системы.
К сожалению, если вы работаете в Linux, вы не можете получить доступ к информации, так как хранится только дата последнего изменения.
Это немного зависит от вашей файловой системы. Я знаю, что ext2 и ext3 не поддерживают время создания, но я думаю, что ext4 поддерживает.
$filename = 'somefile.txt';
if (file_exists($filename)) {
echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}
Существует решение для Mac OS X, которое поддерживает время создания даты в своей файловой системе: Как получить фактическое время создания файла в PHP на Mac?
Я знаю, что эта тема очень старая, но, на случай, если кто-то ищет ответ, как и я, я публикую свое решение.
Это решение работает, ЕСЛИ вы не возражаете против наличия дополнительных данных в начале вашего файла.
В принципе, идея состоит в том, чтобы, если файл не существует, создать его и добавить текущую дату в первой строке.
Затем вы можете прочитать первую строку с помощью fgets(fopen($file, 'r'))
, превратить ее в объект DateTime
или что-нибудь еще (очевидно, вы можете использовать ее в необработанном виде, если только вы не сохранили ее в странном формат) и вуаля - у вас есть дата создания! Например, мой скрипт для обновления файла журнала каждые 30 дней выглядит следующим образом:
if (file_exists($logfile)) {
$now = new DateTime();
$date_created = fgets(fopen($logfile, 'r'));
if ($date_created == '') {
file_put_contents($logfile, date('Y-m-d H:i:s').PHP_EOL, FILE_APPEND | LOCK_EX);
}
$date_created = new DateTime($date_created);
$expiry = $date_created->modify('+ 30 days');
if ($now >= $expiry) {
unlink($logfile);
}
}