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.