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


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

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

здесь filemtime и filectime.

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

5 62

5 ответов:

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

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

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

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

$filename = 'somefile.txt';

if (file_exists($filename)) {

    echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}

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

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

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

в принципе, идея в том, чтобы, если файл не существует, создать его и добавить текущую дату в первой строке. Далее вы можете прочитать первую строку с fgets(fopen($file, 'r')) С DateTime объект или что-нибудь (вы можете, очевидно, использовать его raw, если вы не сохранили он в странном формате) и вуаля - у вас есть дата создания! Например мой скрипт для обновления файла журнала каждые 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);
            }
        }