Fileperms: примеры (PHP)
Использование fileperms для проверки прав доступа
Раздел: Работа с файловой системой
fileperms(string $filename): int|falseОписание функции fileperms
Функция fileperms() в PHP возвращает информацию о правах доступа к файлу или директории. Она применяется для получения числового значения, представляющего разрешения в виде восьмеричного числа.
Аргументы функции
Функция принимает один обязательный параметр:
- filename (string) - Путь к проверяемому файлу или директории.
Возвращаемое значение - целое число, представляющее битовую маску прав доступа. При неудаче возвращается false.
Простые примеры использования
Базовый пример
$perms = fileperms('example.txt');
echo $perms;33206
Преобразование в восьмеричный формат
echo substr(sprintf('%o', fileperms('example.txt')), -4);0644
Проверка прав директории
$dirPerms = decoct(fileperms('uploads') & 0777);
echo $dirPerms;0755
Похожие функции в PHP
- stat() - Возвращает подробную информацию о файле, включая права доступа в элементе 'mode'. Используется при необходимости получения комплексных данных.
- is_readable() - Проверяет доступность файла для чтения. Применяется для быстрой проверки конкретного права.
- is_writable() - Определяет возможность записи в файл. Удобна для проверки перед операциями записи.
- is_executable() - Проверяет, является ли файл исполняемым. Используется для проверки скриптов или программ.
- clearstatcache() - Очищает кеш состояния файлов. Требуется после многократных вызовов fileperms() для одного файла.
Типичные ошибки
Отсутствие проверки на false
$perms = fileperms('несуществующий_файл.txt');
echo substr(sprintf('%o', $perms), -4);Warning и некорректный вывод
Неправильное преобразование чисел
echo dechex(fileperms('file.txt')); // Ошибочный формат81a4
Игнорирование кеширования
$perms1 = fileperms('file.txt');
chmod('file.txt', 0777);
$perms2 = fileperms('file.txt'); // Может вернуть старое значение
echo $perms1 == $perms2 ? 'Одинаково' : 'Разные';Одинаково (без clearstatcache())
Изменения в версиях PHP
- PHP 7.0.0 - Добавлена поддержка контекстных потоков.
- PHP 5.0.0 - Функция начала возвращать false при ошибке (ранее возвращала 0).
- Ранние версии - Функция всегда возвращала целое число, даже при ошибках.
Расширенные примеры
Определение типа файла
Пример php
function getFileType($filename) {
$perms = fileperms($filename);
if (($perms & 0xC000) === 0xC000) return 'Сокет';
if (($perms & 0xA000) === 0xA000) return 'Ссылка';
if (($perms & 0x8000) === 0x8000) return 'Файл';
if (($perms & 0x6000) === 0x6000) return 'Блочное устройство';
if (($perms & 0x4000) === 0x4000) return 'Директория';
if (($perms & 0x2000) === 0x2000) return 'Символьное устройство';
if (($perms & 0x1000) === 0x1000) return 'FIFO';
return 'Неизвестно';
}
echo getFileType('/tmp');Директория
Рекурсивная проверка прав
Пример php
function checkDirectoryPermissions($dir, $expected = 0755) {
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($iterator as $file) {
if ($file->isFile()) {
if ((fileperms($file) & 0777) != $expected) {
echo 'Несоответствие: ' . $file->getPathname() . PHP_EOL;
}
}
}
}
checkDirectoryPermissions('project/');Визуальное представление прав
Пример php
function formatPermissions($perms) {
$symbolic = '';
$symbolic .= (($perms & 0x0100) ? 'r' : '-');
$symbolic .= (($perms & 0x0080) ? 'w' : '-');
$symbolic .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x') : (($perms & 0x0800) ? 'S' : '-'));
$symbolic .= (($perms & 0x0020) ? 'r' : '-');
$symbolic .= (($perms & 0x0010) ? 'w' : '-');
$symbolic .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x') : (($perms & 0x0400) ? 'S' : '-'));
$symbolic .= (($perms & 0x0004) ? 'r' : '-');
$symbolic .= (($perms & 0x0002) ? 'w' : '-');
$symbolic .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x') : (($perms & 0x0200) ? 'T' : '-'));
return $symbolic;
}
echo formatPermissions(fileperms('script.sh'));rwxr-xr-x
Аналоги в других языках
Fileperms в Python
import os
perms = oct(os.stat('example.txt').st_mode)[-4:]
print(perms)'0644'
JavaScript (Node.js)
const fs = require('fs');
fs.stat('example.txt', (err, stats) => {
console.log('0' + (stats.mode & 0o777).toString(8));
});0644
Bash/Shell
stat -c '%a' example.txt644
PHP fileperms function comments
En
Fileperms Gets file permissions