Я читаю папку з великою кількістю файлів.
Як я можу отримати дату створення файлу. Я не бачу жодної прямої функції для її отримання.
Є 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);
}
}