Я читаю папку с большим количеством файлов.
Как узнать дату создания файла. Я не вижу прямой функции, чтобы получить это.
Есть 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()
возвращает время модификации.
Я знаю, что эта тема очень старая, но, если кто-то ищет ответ, как я, я публикую свое решение.
Это решение работает, ЕСЛИ вы не возражаете, если в начале файла есть дополнительные данные.
По сути, идея состоит в том, чтобы, если файл не существует, создать его и добавить текущую дату в первую строку. Затем вы можете прочитать первую строку с помощью 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);
}
}