PHP: как я могу получить дату создания файла? - PullRequest
68 голосов
/ 09 декабря 2010

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

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

Есть filemtime и filectime.

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

Ответы [ 5 ]

94 голосов
/ 09 декабря 2010

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

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

7 голосов
/ 09 декабря 2010

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

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

5 голосов
/ 28 декабря 2017
$filename = 'somefile.txt';

if (file_exists($filename)) {

    echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}
1 голос
/ 09 июня 2015

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

0 голосов
/ 29 марта 2018

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

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

По сути, идея состоит в том, чтобы, если файл не существует, создать его и добавить текущую дату в первой строке.Затем вы можете прочитать первую строку с помощью 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);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...