fileperms

(PHP 4, PHP 5)

fileperms — Получить информацию о правах на файл

Описание

int fileperms ( string $filename )

Функция возвращает информацию о правах на указанный файл или FALSE в случае возникновения ошибки.

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

Подсказка

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

Пример #1 Display permissions as an octal value

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

This would produce the output:

1777
0644

Пример #2 Display full permissions

<?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;
?>

Результат:

-r--r--r--

См.также описания функций is_readable() и stat()

Коментарии

On Linux (not tested on Windows), if you want a chmod-like permissions, you can use this function:

<?php
function file_perms($file$octal false)
{
    if(!
file_exists($file)) return false;

   
$perms fileperms($file);

   
$cut $octal 3;

    return 
substr(decoct($perms), $cut);
}
?>

Using it:

$ touch foo.bar
$ chmod 0754 foo.bar
<?php
echo file_perms('foo.bar'); // prints: 754
echo file_perms('foo.bar'true); // prints 0754
?>
2007-04-25 00:43:44
http://php5.kiev.ua/manual/ru/function.fileperms.html
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
An easy way to calculate fileperms to chmod is this:

substr(decoct(fileperms("test.html")),3);

Displays 666 or 777 (depends on chmod set).

substr(decoct(fileperms("test.html")),2);

Displays 0666 or 0777 and refers immediately to the number set with chmod();
2008-10-29 14:37:25
http://php5.kiev.ua/manual/ru/function.fileperms.html
Since the output of decoct( fileperms('.') ) is of the form: 40644

It seems the previous example is wrong, instead you should understand:

To get permissions formatted as "644":
<?php
echo substr(decoctfileperms('.') ), 2);
?>

To get permissions formatted  as "0644":
<?php
echo substr(decoctfileperms('.') ), 1);
?>
2009-04-02 05:11:17
http://php5.kiev.ua/manual/ru/function.fileperms.html
Here is a small function I made : http://pastebin.com/iKky8Vtu
I was bored and I thought it could be useful.

mixed mkperms( string $perms [, bool return_as_string = false [, string $filename ] ] )
Returns permissions given a string in literal format and a filename.
If the file name is omitted, the permissions that the function will return are based on 000-permissions.
If return_as_string is set to true, the result will be output as a 644 format string. Otherwise it will return a string converted to base-10 for chmod.

Examples: 

<?php
echo mkperms('u+r'true), "\n"// 400
echo mkperms('u+rwx,g+rw,o+x'true), "\n"// 761

touch('myfile.txt'); // Create a file with any permissions
chmod('myfile.txt'mkperms('u=rwx,g=x,o=rw')); // myfile.txt is now at -rwx--xrw-

// Make a file and give it full permissions
touch('somefile.txt');
chmod('somefile.txt'0777);
echo 
mkperms('g-w,o-rw'true'somefile.txt'); // 751
echo mkperms('u=rwx,g-r,o=-'true'somefile.txt'); // 730
// This way you can apply permissions to files
chmod('somefile.txt'mkperms('u=rwx,g-r,o=-'false'somefile.txt')); // somefile.txt is now at -rwx-wx---
?>

PS : sorry I had to put it on pastebin, or else it just made the note way too long.
2010-06-15 15:22:28
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
Автор:
A small function for the last 3 digits (777/755 ect.)

<?php
function getFilePermission($file) {
       
$length strlen(decoct(fileperms($file)))-3;
        return 
substr(decoct(fileperms($file)),$length);
}
?>
2014-03-14 10:24:01
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

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