Определение прав доступа к файлам и папкам в PHP
http://belarusweb.net
Основы создания сайтов

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

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

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

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

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

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

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

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

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

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

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

<?php
echo '-------- fileperms()  -------- <br><br>';

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


echo '-------- chmod()  -------- <br><br>';

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

Пример 9.10.

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