PHP: как я могу получить дату создания файла?
Я читаю папку с большим количеством файлов.
Как я могу получить дату создания файла. Я не вижу никакой прямой функции, чтобы получить его.
здесь filemtime
и filectime
.
и если файл не был изменен, что будет?
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); } }