W3docs

is_file()

Функция is_file() в PHP проверяет, является ли указанный путь обычным файлом, и возвращает true или false.

Что такое функция is_file()?

is_file() — это встроенная функция PHP, которая определяет, указывает ли путь на обычный файл — стандартный файл на диске, в отличие от каталога, типа цели символической ссылки или специального файла (канала, сокета или узла устройства). Она возвращает true только для обычных файлов и false во всех остальных случаях, включая несуществующие пути.

Эта функция незаменима перед чтением, подключением или обработкой файла — когда важнее знать «действительно ли этот путь ведёт к файлу, с которым я могу работать?», а не «существует ли этот путь вообще?».

Синтаксис

is_file(string $filename): bool
  • $filename — путь для проверки. Может быть относительным (разрешается относительно текущего рабочего каталога) или абсолютным.
  • Возвращаемое значениеtrue, если $filename существует и является обычным файлом, false в противном случае. При отсутствии файла предупреждение не выводится — функция просто возвращает false.

Базовый пример

php— editable, runs on the server

Использование __FILE__ (абсолютный путь текущего скрипта) гарантирует прохождение проверки, поэтому скрипт выводит сообщение, подтверждающее, что путь является обычным файлом. Замените его на любой другой путь — отсутствующий путь или каталог вернёт false.

is_file() vs file_exists() vs is_dir()

Эти три функции частично перекрываются, и выбор неверной — распространённый источник ошибок:

ФункцияВозвращает true для
is_file()только обычных файлов
file_exists()файлов и каталогов
is_dir()только каталогов

Главная ловушка: file_exists('/some/folder') возвращает true для каталога. Если после этого попытаться вызвать fopen() или include как для файла, возникнет ошибка. Используйте is_file() всякий раз, когда следующий шаг предполагает работу с реальным файлом:

<?php

$path = sys_get_temp_dir(); // a directory that definitely exists

var_dump(file_exists($path)); // bool(true)  — it exists
var_dump(is_file($path));     // bool(false) — but it is NOT a file
var_dump(is_dir($path));      // bool(true)  — it is a directory

Защита операции чтения файла

Типичный пример из реальной практики: убедиться, что путь ведёт к рабочему файлу, прежде чем его читать. Сочетание is_file() с is_readable() позволяет избежать как ошибки «не является файлом», так и ошибки «нет разрешения»:

<?php

$path = __FILE__;

if (is_file($path) && is_readable($path)) {
    echo "Safe to read: " . basename($path);
} else {
    echo "Cannot read that path.";
}

Этот код выводит вывод вида Safe to read: is-file.mdx (базовое имя выполняемого скрипта) и корректно завершает работу, если путь является каталогом, отсутствует или недоступен для чтения.

Особенность кэша stat

PHP кэширует результаты проверок файловой системы, таких как is_file(), на протяжении всего запроса, чтобы не обращаться к диску повторно. Если файл создаётся или удаляется после того, как PHP уже проверил тот же путь, повторный вызов is_file() может вернуть устаревший, кэшированный ответ. Когда нужен актуальный результат — например, в длительно работающем скрипте, который создаёт файл и сразу же перепроверяет его — сначала очистите кэш:

<?php

clearstatcache();          // discard cached stat results
var_dump(is_file($path));  // now reflects the current state on disk

Распространённые ошибки

  • Это не проверка безопасности. Путь может пройти is_file() и при этом быть недоступным для чтения или записи. Комбинируйте её с is_readable() или is_writable() перед выполнением операций.
  • Символические ссылки разрешаются. is_file() проверяет цель символической ссылки, а не саму ссылку. Символическая ссылка, указывающая на обычный файл, возвращает true.
  • Нет предупреждения для несуществующих путей. В отличие от открытия файла, несуществующий путь просто возвращает false, поэтому is_file() безопасно вызывать без подавления ошибок.

Заключение

is_file() отвечает на один конкретный вопрос — «является ли это обычным файлом?» — и является правильным условием перед любым кодом, который читает, подключает или обрабатывает файл. Используйте file_exists(), когда каталог тоже является допустимым результатом, is_dir(), когда нужен именно каталог, и сочетайте is_file() с проверками доступности, описанными выше, когда важны права доступа.

Практика

Практика
Что делает функция PHP 'is_file()'?
Что делает функция PHP 'is_file()'?
Was this page helpful?