Is file: примеры (PHP)
is_file(string $filename): boolФункция is_file в PHP
Функция is_file() проверяет, является ли указанное имя файла обычным файлом. Она возвращает true, если файл существует и является обычным файлом, а не директорией, символьной ссылкой или другим специальным типом файла.
Функция применяется для валидации путей перед операциями чтения, записи, обработки файлов, чтобы убедиться, что путь ведет именно к файлу, а не к директории.
Функция принимает один обязательный параметр:
- $filename (string) - Путь к проверяемому файлу
Возвращает bool: true если файл существует и является обычным файлом, false в противном случае.
Примеры использования is_file
Проверка существования файла:
<?php
$file = 'document.txt';
if (is_file($file)) {
echo "Файл существует";
} else {
echo "Файл не найден";
}
?>Файл существует
<?php
$paths = [
'/var/www/index.php',
'/var/www/images',
'/tmp/test.txt'
];
foreach ($paths as $path) {
echo $path . ': ' . (is_file($path) ? 'Файл' : 'Не файл') . "\n";
}
?>/var/www/index.php: Файл /var/www/images: Не файл /tmp/test.txt: Файл
<?php
$path = 'data.txt';
echo "file_exists: " . (file_exists($path) ? 'Да' : 'Нет') . "\n";
echo "is_file: " . (is_file($path) ? 'Да' : 'Нет') . "\n";
?>file_exists: Да is_file: Нет
Похожие функции в PHP
Проверяет существование файла или директории. Возвращает true для любых типов файловых объектов. Используется, когда нужно проверить наличие любого файлового объекта без уточнения типа.
Проверяет, является ли путь директорией. Противоположна is_file() по назначению. Применяется для валидации путей к папкам.
Определяет, является ли файл символической ссылкой. Используется для работы с symlink.
Проверяют права доступа к файлу. Важно использовать после подтверждения, что путь ведет к файлу.
Для проверки перед операциями с файлами используйте связку is_file() и is_readable()/is_writable(). Для простой проверки существования достаточно file_exists().
Типичные ошибки
<?php
$content = file_get_contents('missing.txt');
// Предупреждение, если файла нет
?><?php
if (is_file('missing.txt') && is_readable('missing.txt')) {
$content = file_get_contents('missing.txt');
} else {
echo "Файл недоступен";
}
?>is_file() следует за символическими ссылками:
<?php
// Создаем ссылку на директорию
symlink('/etc', 'etc_link');
echo is_file('etc_link') ? 'Файл' : 'Не файл'; // false
?>Не файл
<?php
var_dump(is_file('')); // false
var_dump(is_file(null)); // false
var_dump(is_file(false)); // false
?>bool(false) bool(false) bool(false)
При недостаточных правах is_file() возвращает false, даже если файл существует:
<?php
// Файл с правами 000
$result = @is_file('/root/secret.txt');
echo $result ? 'Да' : 'Нет';
?>Нет
Изменения в версиях PHP
Тип параметра стал строго string. Передача других типов вызывает TypeError.
<?php
// PHP 7.4: Предупреждение, возвращает false
// PHP 8.0: TypeError
try {
var_dump(is_file([]));
} catch (TypeError $e) {
echo "Ошибка типа: " . $e->getMessage();
}
?>Ошибка типа: is_file(): Argument #1 ($filename) must be of type string, array given
Улучшена обработка символических ссылок на Windows-платформах.
Функция стала частью стандартной библиотеки, ранее была в расширении.
Расширенные примеры
<?php
function findFiles($directory) {
$files = [];
$items = scandir($directory);
foreach ($items as $item) {
if ($item === '.' || $item === '..') continue;
$path = $directory . '/' . $item;
if (is_file($path)) {
$files[] = $path;
} elseif (is_dir($path)) {
$files = array_merge($files, findFiles($path));
}
}
return $files;
}
print_r(findFiles('.'));
?><?php
function isImageFile($path) {
if (!is_file($path)) return false;
$mime = mime_content_type($path);
return strpos($mime, 'image/') === 0;
}
echo isImageFile('photo.jpg') ? 'Изображение' : 'Не изображение';
?>Изображение
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$uploadDir = 'uploads/';
$uploadFile = $uploadDir . basename($_FILES['file']['name']);
if (is_file($uploadFile)) {
echo "Файл уже существует";
} elseif (move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile)) {
echo "Файл загружен";
}
}
?><?php
class FileChecker {
private static $cache = [];
public static function isFileCached($path) {
if (!isset(self::$cache[$path])) {
self::$cache[$path] = is_file($path);
}
return self::$cache[$path];
}
}
// Многократные вызовы с одним путем используют кэш
echo FileChecker::isFileCached('test.txt') ? 'Да' : 'Нет';
?><?php
// Проверка удаленного файла (требует allow_url_fopen)
$url = 'https://example.com/file.txt';
if (ini_get('allow_url_fopen')) {
echo is_file($url) ? 'Доступен' : 'Недоступен';
}
?><?php
$items = ['file1.txt', 'dir1', 'file2.pdf', 'dir2'];
$filesOnly = array_filter($items, 'is_file');
print_r($filesOnly);
?>Array
(
[0] => file1.txt
[2] => file2.pdf
)<?php
set_error_handler(function($errno, $errstr) {
echo "Ошибка проверки файла: $errstr\n";
});
$result = is_file("/некорректный/путь/-");
restore_error_handler();
echo "Результат: " . ($result ? 'true' : 'false');
?>Аналоги в других языках
Is file в Python
Модуль os.path: функции isfile(), isdir(), exists()
import os
print(os.path.isfile('test.txt')) # True
print(os.path.isdir('folder')) # True
print(os.path.exists('test.txt')) # TrueTrue True True
Модуль fs: методы statSync(), lstatSync()
const fs = require('fs');
try {
const stats = fs.statSync('file.txt');
console.log(stats.isFile()); // true
console.log(stats.isDirectory()); // false
} catch (err) {
console.log('Файл не существует');
}true false
Is file в MySQL
LOAD_FILE() для чтения файлов, но проверки типа файла нет. Используются системные функции.
Оператор -f в условных конструкциях
if [ -f "file.txt" ]; then
echo "Это обычный файл"
fiЭто обычный файл
В Python и Node.js функции выбрасывают исключения при ошибках, в PHP возвращается false. Bash использует другие синтаксические конструкции.