Я читаю папку с большим количеством файлов.
Как узнать дату создания файла. Я не вижу прямой функции, чтобы получить это.
Есть filemtime
и filectime
.
А если файл не был изменен, что будет?
Используйте filectime . Для Windows он вернет время создания , а для Unix - время изменения, которое является лучшим из возможных, потому что в Unix нет времени создания (в большинстве файловых систем).
Также обратите внимание, что в некоторых текстах Unix ctime файла называется временем создания файла. Это не правильно. В большинстве файловых систем Unix нет времени для создания файлов Unix.
filemtime
для Linux лучше и точнее, так какfilectime
при изменении владельца права доступа и другие операции. У вас будет больше шансов получить время создания в Linux, используяfilemtime
Это пример кода, взятый из документации PHP здесь: https://www.php.net/manual/en/function.filemtime.php
// outputs e.g. somefile.txt was last changed: December 29 2002 22:16:23. $filename = 'somefile.txt'; if (file_exists($filename)) { echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename)); }
Код указывает имя файла, затем проверяет, существует ли оно, а затем отображает время модификации с помощью
filemtime()
.filemtime()
принимает 1 параметр, который является путем к файлу, он может быть относительным или абсолютным.источник
filemtime()
возвращает время модификации.К сожалению, если вы работаете в Linux, вы не можете получить доступ к информации, так как сохраняется только дата последнего изменения.
Это немного зависит от вашей файловой системы. Я знаю, что ext2 и ext3 не поддерживают время создания, но я думаю, что ext4 поддерживает.
источник
Я знаю, что эта тема очень старая, но, если кто-то ищет ответ, как я, я публикую свое решение.
Это решение работает, ЕСЛИ вы не возражаете, если в начале файла есть дополнительные данные.
По сути, идея состоит в том, чтобы, если файл не существует, создать его и добавить текущую дату в первую строку. Затем вы можете прочитать первую строку с помощью
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); } }
источник