PHP: как я могу узнать дату создания файла?


Я читаю папку с большим количеством файлов.

Как я могу узнать дату создания файла. Я не вижу никакой прямой функции для его получения.

Существуют filemtime и filectime.

И если файл не был изменен, что произойдет?

 62
Author: franzlorenzon, 2010-12-09

5 answers

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

Обратите также внимание, что в некоторых текстах Unix ctime файла упоминается как время создания файла. Это неправильно. В большинстве Unix нет времени для создания файлов Unix файловые системы.

 80
Author: Alin Purcaru, 2010-12-09 17:44:27

К сожалению, если вы работаете в Linux, вы не можете получить доступ к информации, так как хранится только дата последнего изменения.

Это немного зависит от вашей файловой системы. Я знаю, что ext2 и ext3 не поддерживают время создания, но я думаю, что ext4 поддерживает.

 6
Author: mrwooster, 2010-12-09 17:46:43
$filename = 'somefile.txt';

if (file_exists($filename)) {

    echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}
 4
Author: Rakesh Dongarwar, 2018-02-11 19:32:05

Существует решение для Mac OS X, которое поддерживает время создания даты в своей файловой системе: Как получить фактическое время создания файла в PHP на Mac?

 1
Author: Sunny Reborn Pony, 2017-05-23 12:26:36

Я знаю, что эта тема очень старая, но, на случай, если кто-то ищет ответ, как и я, я публикую свое решение.

Это решение работает, ЕСЛИ вы не возражаете против наличия дополнительных данных в начале вашего файла.

В принципе, идея состоит в том, чтобы, если файл не существует, создать его и добавить текущую дату в первой строке. Затем вы можете прочитать первую строку с помощью 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);
            }
        }
 -2
Author: SDukla, 2018-03-29 11:28:18