Получить права доступа php

Как работать с правами доступа в PHP?

Для работы с правами доступа в PHP можно использовать функции, предоставляемые модулем fileinfo. Например, функция fileperms() позволяет получить права доступа к файлу, а функции chmod() и chown() — изменять эти права и владельца файла соответственно.

Пример кода для получения прав доступа к файлу:

$filename = 'testfile.txt'; $perms = fileperms($filename); 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'; >// Установить права доступа для всех пользователей chmod($filename, 0644); // Установить владельца файла chown($filename, 'user');

Также можно использовать функции is_readable() и is_writable() для проверки, имеет ли текущий пользователь права на чтение или запись в файл.

Пример кода для проверки прав доступа к файлу:

$filename = ‘testfile.txt’; if (is_readable($filename)) < echo 'Файл доступен для чтения!'; >else < echo 'Нет прав на чтение файла!'; >if (is_writable($filename)) < echo 'Файл доступен для записи!'; >else

Важно учитывать, что некоторые функции для работы с правами доступа в PHP могут быть недоступны на определенных хостингах из соображений безопасности.

Источник

PHP :: Определение прав доступа к файлам и папкам

При размещении файлов сайта на веб-сервере Unix разработчик сталкивается с необходимостью определения прав доступа для каждого отдельного файла или каталога. Права доступа определяют кто и что может делать с данным файлом или каталогом. Существуют три основных вида прав доступа:

  • чтение содержимого файла или просмотр перечня имен файлов в каталоге;
  • запись файла или создание и удаление файлов из каталога;
  • запуск файлов (например, скриптов) или доступ к файлам в каталоге.

Все перечисленные виды прав назначаются одной из трех групп пользователей (отношение пользователей к той или иной группе определяется сервером в момент их подключения к нему):

  • user (владелец файла) – это пользователь, который создает данный файл или папку, и затем подключается к серверу, например, по протоколу FTP под своим именем и паролем;
  • group (группа, к которой принадлежит владелец файла) – это другие пользователи, которые также подключаются к серверу по протоколу FTP и пытаются получить доступ к файлам или каталогам непосредственного владельца;
  • other (все остальные пользователи) – это все посетители сайта, которые заходят на него через свой браузер.
Читайте также:  Java websocket server example

Сами права доступа обозначаются либо при помощи букв r (чтение), w (запись), x (исполнение) в формате ixxxyyyzzz , либо при помощи трехзначного числа в восьмеричной системе счисления (цифры от 0 до 7 ) в формате 0nnn . Первая группа букв или цифра устанавливают права для владельца файла, вторая – для группы, а третья – для всех остальных. Что касается первой буквы в символьном формате, то она указывает на то, что права доступа назначаются либо директории, тогда ставится буква d , либо обычному файлу, тогда ставится дефис — . Если вместо буквы указан дефис, то данный вид прав для соответствующей группы отсутствует. Например, файл с правами доступа -rwxrwxrwx или 0777 могут читать, записывать и запускать все группы пользователей, а вот директорию с правами доступа drwxr—r— или 0744 может просматривать, удалять и создавать в ней файлы, а также получать доступ к файлам только владелец. Остальным группам разрешается лишь просмотр каталога. Реальный пример отображения прав доступа к файлам на хостинге показан на рис. №1 .

Рис. №1. Пример отображения прав доступа на сервере

Нас будет интересовать числовой формат определения прав доступа к файлам и каталогам, расшифровка цифр которого представлена в таблице №2 .

Числовой формат Символьный формат Права доступа
0 Права отсутствуют
1 —x Только выполнение
2 -w- Только запись
3 -wx Запись и выполнение
4 r— Только чтение
5 r-x Чтение и выполнение
6 rw- Чтение и запись
7 rwx Чтение, запись, выполнение

Таблица №2. Таблица прав доступа в цифровом формате

Теперь, когда мы получили некоторое представление о правах доступа к файлам и каталогам, продемонстрируем определение прав доступа к файлу на примере №3 .


'; //fileperms()- возвращает информацию о правах доступа в виде 10-го //числа (или false). После перевода в восьмеричное число, последние //4 цифры будут содержать сведения о правах доступа, а также //(на большинстве платформ) инф-цию о типе файла. Например, для файла //test_2.php на рис. 9.1 получим 33188 или в 8-й 100644 echo substr(decoct(fileperms('test_2.php')), -4); //Выведет 0644 echo '

'; echo '-------- chmod() --------

'; //chmod() - изменяет режим доступа к файлу и возвращает true|false chmod('test_2.php', 0777); //Разрешили всем все права chmod('test_2.php', 0744); //Владельцу все, остальным только чтение chmod('test_2.php', 0755); //Владельцу все, остальным чтение и запись ?>

Также обратите внимание на функции chown() , chgrp() , umask() . Все они находятся в «Функции для работы с файловой системой» -> «Файловая система» .

Читайте также:  Php mysql library version

Быстрый переход к другим страницам

html.okpython.net Copyright © 2016-2023.

Источник

fileperms

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

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

Возвращает false в случае возникновения ошибки.

Ошибки

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

Примеры

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

echo substr ( sprintf ( ‘%o’ , fileperms ( ‘/tmp’ )), — 4 );
echo substr ( sprintf ( ‘%o’ , fileperms ( ‘/etc/passwd’ )), — 4 );
?>

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

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

switch ( $perms & 0xF000 ) case 0xC000 : // сокет
$info = ‘s’ ;
break;
case 0xA000 : // символическая ссылка
$info = ‘l’ ;
break;
case 0x8000 : // обычный
$info = ‘r’ ;
break;
case 0x6000 : // файл блочного устройства
$info = ‘b’ ;
break;
case 0x4000 : // каталог
$info = ‘d’ ;
break;
case 0x2000 : // файл символьного устройства
$info = ‘c’ ;
break;
case 0x1000 : // FIFO канал
$info = ‘p’ ;
break;
default: // неизвестный
$info = ‘u’ ;
>

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

Примечания

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

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

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

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

User Contributed Notes 9 notes

Don’t use substr, use bit operator
decoct ( fileperms ( $file ) & 0777 ); // return «755» for example
?>

If you want to compare permission
0755 === ( fileperms ( $file ) & 0777 );
?>

This may not be immediately apparent to some, but you can use octdec( $octal_value ) to match the permissions retrieved by file perms

//assumes file has 2770 permissions
$perm = fileperms ( __FILE__ );
$bit = «102770» ;

printf ( «%s\n» , octdec ( $bit ) );
printf ( «%s\n» , $perm );

An easy way to calculate fileperms to chmod is this:

Читайте также:  Python pil обработка изображений

Displays 666 or 777 (depends on chmod set).

Displays 0666 or 0777 and refers immediately to the number set with chmod();

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+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 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.

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.

A small function for the last 3 digits (777/755 ect.)

function getFilePermission ( $file ) $length = strlen ( decoct ( fileperms ( $file )))- 3 ;
return substr ( decoct ( fileperms ( $file )), $length );
>
?>

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»:
echo substr ( decoct ( fileperms ( ‘.’ ) ), 2 );
?>

To get permissions formatted as «0644»:
echo substr ( decoct ( fileperms ( ‘.’ ) ), 1 );
?>

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

function file_perms ( $file , $octal = false )
if(! file_exists ( $file )) return false ;

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

Using it:

$ touch foo.bar
$ chmod 0754 foo.bar
echo file_perms ( ‘foo.bar’ ); // prints: 754
echo file_perms ( ‘foo.bar’ , true ); // prints 0754
?>

Источник

Оцените статью