PHP: як я можу отримати дату створення файлу?


83

Я читаю папку з великою кількістю файлів.

Як я можу отримати дату створення файлу. Я не бачу жодної прямої функції для її отримання.

Є filemtimeі filectime.

І якщо файл не було змінено, що станеться?

Відповіді:


111

Використовуйте filectime . Для Windows це поверне час створення , а для Unix - час зміни, який є найкращим, що ви можете отримати, оскільки в Unix немає часу створення (у більшості файлових систем).

Також зауважте, що в деяких текстах Unix ctime файлу називається часом створення файлу. Це неправильно. У більшості файлових систем Unix немає часу для створення файлів Unix.


Повертає час останньої зміни файлу або FALSE у разі помилки. Час повертається як мітка часу Unix.
— zod

@zod Якщо ви прочитаєте трохи далі, ніж перші рядки, ви можете зрозуміти більше. Зайдіть теж у коментарі.
— Алін Пуркару

Це не дата створення. Це все, що я сказав :-)
— zod

11
filemtimeдля Linux краще, точніше, як filectimeзмінюється під час власника, дозвіл змінюється як інші операції. Ви отримаєте більше шансів отримати час створення на Linux за допомогоюfilemtime
— Федір РИХТІК,

Чи було б швидше запустити цю php-функцію або витягнути поле MySQL для останнього оновлення? У моєму випадку шлях до зображення зберігається в БД і вже працює запит на вибір
— drooh

16

Це приклад коду, взятий з документації 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 параметр, який є шляхом до файлу, він може бути відносним або абсолютним.


4
Ракеш, будь ласка, поясніть свій код, а не просто публікуйте якийсь код і очікуйте, що люди його зрозуміють.
— Persijn

2
Хоча ця публікація лише з кодом може відповісти на запитання, додайте пояснення, чому це робиться. Це допоможе майбутнім читачам оцінити відповідь у своїй ситуації.
— Том Брунберг,

1
Функція filemtime()повертає час модифікації.
— Стефан

Майкл, оскільки значення функції filemtime () не очевидне, код заслуговує на коментар.
— Радій

Код визначає ім'я файлу, потім перевіряє, чи воно існує, а потім відображає час модифікації за допомогою filemtime (). filemtime () приймає 1 параметр, який є шляхом до файлу, він може бути відносним або абсолютним. Приклад вище скопійовано з документації PHP тут php.net/manual/en/function.filemtime.php
— Харві Добсон

8

На жаль, якщо ви працюєте на Linux, ви не можете отримати доступ до інформації, оскільки зберігається лише остання дата зміни.

Це трохи залежить від вашої файлової системи. Я знаю, що ext2 та ext3 не підтримують час створення, але я думаю, що ext4 підтримує.


-3

Я знаю, що ця тема надзвичайно стара, але, якщо хтось шукає відповідь, як я, я публікую своє рішення.

Це рішення працює, ЯКЩО ви не проти мати додаткові дані на початку файлу.

По суті, ідея полягає в тому, щоб, якщо файл не існує, створити його та додати поточну дату в перший рядок. Далі ви можете прочитати перший рядок 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);
            }
        }

5
Чому вам потрібно змінити або навіть видалити файл, щоб отримати дату? Це не схоже на те, що це рішення вихідної проблеми
— Ніко Хаасе
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.