Возвращает информацию о файле

# stat

(PHP 4, PHP 5, PHP 7, PHP 8)

stat — Возвращает информацию о файле

### Описание

function stat(string `$filename`): array|false

Собирает статистическую информацию о файле `filename`. Если `filename` является символической ссылкой, информация собирается о самом файле, а не ссылке. До PHP 7.4.0 в Windows NTS в данном случае строил статистику `size`, `atime`, `mtime` и `ctime` из символьной ссылки.

Функция lstat() идентична функции stat() за исключением того, что в данном случае она вернёт информацию о самой символической ссылке.

### Список параметров

`filename`

  Путь к файлу.

### Возвращаемые значения

Формат результата работы функций stat() и fstat()
Числовой | Ассоциативный | Описание
--- | --- | ---
0 | dev | номер устройства ***
1 | ino | номер inode ****
2 | mode | режим защиты inode *****
3 | nlink | количество ссылок
4 | uid | userid владельца *
5 | gid | groupid владельца *
6 | rdev | тип устройства, если устройство inode
7 | size | размер в байтах
8 | atime | время последнего доступа (временная метка Unix)
9 | mtime | время последней модификации (временная метка Unix)
10 | ctime | время последнего изменения inode (временная метка Unix)
11 | blksize | размер блока ввода-вывода файловой системы **
12 | blocks | количество используемых 512-байтных блоков **

* В Windows это всегда будет `0`.

** Доступен только на системах, поддерживающих тип st_blksize - другие системы (например, Windows) вернут `-1`.

*** В Windows, начиная с PHP 7.4.0, это серийный номер тома, содержащего файл, который представляет собой 64-разрядное целое число без знака, поэтому может переполниться в 32-разрядных системах. Ранее это было числовое представление буквы диска (например, `2` для `C:`) для stat() и `0` для lstat().

**** В Windows, начиная с PHP 7.4.0, идентификатор, связанный с файлом, который представляет собой 64-разрядное целое число без знака, может переполниться в 32-разрядных системах. Ранее он всегда был `0`.

***** В Windows бит разрешения на запись устанавливается в соответствии с атрибутом файла только для чтения, одно и то же значение сообщается для всех пользователей, группы и владельца. ACL не учитывается, в отличие от is_writable().

Значение `mode` содержит информацию, читаемую несколькими функциями. При записи в восьмеричном виде, начиная справа, первые три цифры возвращаются функцией chmod(). Следующая цифра игнорируется PHP. Следующие две цифры указывают тип файла:

`mode` типов файлов
`mode` в восьмеричном виде | Значение
--- | ---
`0140000` | сокет
`0120000` | символическая ссылка
`0100000` | обычный файл
`0060000` | блочное устройство
`0040000` | директория
`0020000` | символьное устройство
`0010000` | fifo

Так, например, обычный файл может быть `0100644`, а директория может быть `0040755`.

В случае возникновения ошибки stat() возвращает `false`.

> Замечание: На 32-разрядных платформах отдельные PHP-функции для работы с файловой системой иногда возвращают неожиданные результаты для файлов размером больше 2 ГБ, поскольку в PHP тип integer хранит числа со знаком, а архитектура платформы ограничивает диапазон положительных значений типа.

### Ошибки

В случае возникновения ошибки будет сгенерирована ошибка уровня `E_WARNING`.

### Список изменений

Версия | Описание
--- | ---
7.4.0 | В Windows номер устройства теперь является серийным номером тома, содержащего файл и номер inode - это идентификатор, связанный с файлом.
7.4.0 | Статистика символьных ссылок `size`, `atime`, `mtime` и `ctime` всегда соответствует статистике целевого объекта. Это было ранее не характерно для NTS-сборки на Windows.

### Примеры

Пример #1 Пример использования stat()

    <?php
    /* Получаем статистику файла */
    $stat = stat('C:\php\php.exe');

    /*
     * Выводим последнее время доступа к файлу, это то же самое, что и
     * вызов fileatime()
     */
    echo 'Последнее время доступа: ' . $stat['atime'];

    /*
     * Выводим время изменения файла, это то же самое, что и
     * вызов filemtime()
     */
    echo 'Время изменения: ' . $stat['mtime'];

    /* Выводим номер устройства */
    echo 'Номер устройства: ' . $stat['dev'];
    ?>

Пример #2 Использование информации из stat() вместе с touch()

    <?php
    /* Получаем статистику файла */
    $stat = stat('C:\php\php.exe');

    /* Удалось получить эту статистику? */
    if (!$stat) {
        echo 'вызов stat() не удался...';
    } else {
        /*
         * Мы хотим увеличить время последнего доступа к файлу
         * на 1 неделю вперёд.
         */
        $atime = $stat['atime'] + 604800;

        /* Касаемся файла */
        if (!touch('some_file.txt', time(), $atime)) {
            echo 'Не удалось коснуться файла...';
        } else {
            echo 'touch() выполнился успешно...';
        }
    }
    ?>

### Примечания

> Замечание: Обратите внимание, файловые системы обрабатывают время по-разному.

> Замечание: Результаты функции кешируются. Подробнее о кешировании рассказывает описание функции clearstatcache().

Подсказка

Начиная с PHP 5.0.0 функция научилась работать с отдельными URL-обёртками. Список обёрток, которые поддерживаются семейством функций stat(), приводит раздел «Протоколы и обёртки».

### Смотрите также

- lstat() - Возвращает информацию о файле или символической ссылке
- fstat() - Получает информацию о файле по указателю открытого файла
- filemtime() - Получает время последнего изменения файла
- filegroup() - Получает идентификатор группы файла
- SplFileInfo

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open