Filetype: примеры (PHP)
filetype(string $filename): string|falseФункция filetype в PHP определяет тип файла по указанному пути. Её применяют для получения информации о природе элемента файловой системы: является ли он обычным файлом, директорией, ссылкой или специальным типом вроде сокета.
Аргументы функции:
- filename (string) – путь к проверяемому файлу или каталогу. Это единственный обязательный параметр.
Возможные возвращаемые значения:
- Строка с типом:
'file'(обычный файл),'dir'(директория),'link'(символическая ссылка),'fifo'(именованный канал),'char'(символьное устройство),'block'(блочное устройство),'socket'(сокет),'unknown'(неизвестный тип). false– в случае неудачи (например, если файл не существует).
echo filetype('document.pdf');file
echo filetype('/var/log');dir
echo filetype('/usr/local/bin/php8');link
var_dump(filetype('missing.txt'));bool(false)
Для проверки типа файла иногда удобнее использовать специализированные функции:
is_file()– проверяет, является ли путь обычным файлом.is_dir()– определяет, является ли путь директорией.is_link()– выясняет, является ли путь символьной ссылкой.file_exists()– проверяет существование файла или папки.stat()– возвращает массив с детальной информацией о файле, включая индекс типа в поле 'mode'.
Функция filetype полезна, когда требуется именно строковый идентификатор типа. Для конкретных проверок лучше подходят is_file или is_dir.
Если файл отсутствует, функция возвращает false и генерирует предупреждение (E_WARNING).
$type = filetype('ghost.txt');
if ($type === false) {
echo 'Не удалось определить тип';
}Не удалось определить тип
При недостаточных разрешениях для чтения информации о файле также возвращается false.
var_dump(filetype('/etc/shadow'));bool(false)
Функция возвращает 'link' для самой ссылки, а не для целевого объекта. Для получения типа цели нужны дополнительные проверки.
// link -> /etc
echo filetype('/tmp/mylink');link
В PHP 8.0 значительных изменений в поведении filetype не было. Однако общее усиление строгости типов может влиять на передачу аргументов. В версии 8.1 и выше также не зафиксировано специфичных изменений для этой функции.
Функция помогает при обходе дерева каталогов.
function scanTypes($path) {
foreach (scandir($path) as $item) {
if ($item === '.' || $item === '..') continue;
$full = $path . '/' . $item;
$type = filetype($full);
echo $full . ' => ' . $type . PHP_EOL;
if ($type === 'dir') scanTypes($full);
}
}
scanTypes('.');./index.php => file ./images => dir ./images/logo.png => file
Использование с RecursiveDirectoryIterator для отбора определённых типов.
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('.')
);
foreach ($iterator as $file) {
if (filetype($file->getPathname()) === 'file') {
echo 'Файл: ' . $file->getFilename() . PHP_EOL;
}
}Файл: index.php Файл: style.css
Пример для FIFO (именованного канала).
posix_mkfifo('/tmp/test.fifo', 0600);
echo filetype('/tmp/test.fifo');
unlink('/tmp/test.fifo');fifo
Filetype в Python
В Python применяются функции модуля os.path для проверки типа:
import os
print(os.path.isfile('data.txt'))
print(os.path.isdir('projects'))
print(os.path.islink('shortcut'))True True True
В Node.js используется модуль fs и метод stat или lstat:
const fs = require('fs');
try {
const stats = fs.statSync('app.js');
console.log(stats.isFile());
console.log(stats.isDirectory());
} catch (err) {
console.log('Файл не найден');
}true false
Filetype в MySQL
В MySQL нет прямой аналогии. Функция LOAD_FILE() читает содержимое файла, но не сообщает его тип.