fileperms

(PHP 4, PHP 5, PHP 7)

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

Описание

int fileperms ( string $filename )

Возвращает информацию о правах доступа на файл.

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

filename

Путь к файлу.

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

Возвращает права доступа на указанный файл в числовом виде. Младшие биты этого значения такие же, как и биты прав доступа для использования в функции chmod(), однако на большинстве платформ возвращаемое значение будет также включать информацию о типе файла, который передан в качестве параметра filename. Примеры ниже демонстрируют как проверить возвращаемое значение на наличие определенных прав и типа файла на POSIX-системах, включая Linux и Mac OS X.

Для локальных файлов возвращаемое значение является частью структуры st_mode, которая возвращается функцией stat() С-библиотеки. Какие в точности биты установлены может варьироваться от платформы к платформе. Рекомендуется поискать документацию к вашей платформе, если требуется обработка битов возвращаемого значения, не относящихся к правам доступа.

Примеры

Пример #1 Отображение прав доступа в виде восьмеричного числа

<?php
echo substr(sprintf('%o'fileperms('/tmp')), -4);
echo 
substr(sprintf('%o'fileperms('/etc/passwd')), -4);
?>

Результат выполнения данного примера:

1777
0644

Пример #2 Отображение полных прав доступа

<?php
$perms 
fileperms('/etc/passwd');

if ((
$perms 0xC000) == 0xC000) {
    
// Сокет
    
$info 's';
} elseif ((
$perms 0xA000) == 0xA000) {
    
// Символическая ссылка
    
$info 'l';
} elseif ((
$perms 0x8000) == 0x8000) {
    
// Обычный
    
$info '-';
} elseif ((
$perms 0x6000) == 0x6000) {
    
// Специальный блок
    
$info 'b';
} elseif ((
$perms 0x4000) == 0x4000) {
    
// Директория
    
$info 'd';
} elseif ((
$perms 0x2000) == 0x2000) {
    
// Специальный символ
    
$info 'c';
} elseif ((
$perms 0x1000) == 0x1000) {
    
// Поток FIFO
    
$info 'p';
} else {
    
// Неизвестный
    
$info 'u';
}

// Владелец
$info .= (($perms 0x0100) ? 'r' '-');
$info .= (($perms 0x0080) ? 'w' '-');
$info .= (($perms 0x0040) ?
            ((
$perms 0x0800) ? 's' 'x' ) :
            ((
$perms 0x0800) ? 'S' '-'));

// Группа
$info .= (($perms 0x0020) ? 'r' '-');
$info .= (($perms 0x0010) ? 'w' '-');
$info .= (($perms 0x0008) ?
            ((
$perms 0x0400) ? 's' 'x' ) :
            ((
$perms 0x0400) ? 'S' '-'));

// Мир
$info .= (($perms 0x0004) ? 'r' '-');
$info .= (($perms 0x0002) ? 'w' '-');
$info .= (($perms 0x0001) ?
            ((
$perms 0x0200) ? 't' 'x' ) :
            ((
$perms 0x0200) ? 'T' '-'));

echo 
$info;
?>

Результат выполнения данного примера:

-rw-r--r--

Ошибки

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

Примечания

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

Подсказка

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми обертками url. Список оберток, поддерживаемых семейством функций stat(), смотрите в Поддерживаемые протоколы и обработчики (wrappers).

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

  • chmod() - Изменяет режим доступа к файлу
  • is_readable() - Определяет существование файла и доступен ли он для чтения
  • stat() - Возвращает информацию о файле

Коментарии

Do not forget: clearstatcache();
==============================
 
When ever you make a:

mkdir($dstdir, 0770 ))

or a:

chmod($dstdir, 0774 ); 

You have to call:

clearstatcache();

before you can call:

fileperms($dstdir);
2007-06-02 12:08:03
http://php5.kiev.ua/manual/ru/function.fileperms.html
This may not be immediately apparent to some, but you can use octdec( $octal_value ) to match the permissions retrieved by file perms

<?php

//assumes file has 2770 permissions
$permfileperms__FILE__ ); 
$bit "102770";

printf"%s\n"octdec$bit ) );
printf"%s\n"$perm);

?>
2012-02-29 00:14:13
http://php5.kiev.ua/manual/ru/function.fileperms.html
Don't use substr, use bit operator
<?php
decoct
(fileperms($file) & 0777); // return "755" for example
?>

If you want to compare permission
<?php
0755 
=== (fileperms($file) & 0777);
?>
2013-08-23 18:52:39
http://php5.kiev.ua/manual/ru/function.fileperms.html
Windows has a very different file permission model to Unix and integrates them only minimally.

Here's how Windows calculates the bitmask...

u+w/g+w/o+w is set based on whether the file has the read only flag.

u+r/g+w/o+w is always set.

u+x/g+x/o+x is set based on whether $filename is an inherently executable file (e.g. bat) or a directory.

Windows isn't integrating its ACLs at all.

Here's the source of all this: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions?view=vs-2019 (but it doesn't provide many details)
2020-03-02 21:53:44
http://php5.kiev.ua/manual/ru/function.fileperms.html

    Поддержать сайт на родительском проекте КГБ