Права доступа к файлам в PHP. Как установить их или получить значение?

права доступа к файлам в php. как установить их или получить значение?

Введение в права доступа

Операционные системы имеют различные политики контроля доступа к файлам. PHP не может влиять на них прямым образом. Однако интерпретатор обрабатывает системные сообщения. Например, при выполнении какой-либо операции с файлом, на которую у вас нет прав, встроенные функции перехватывают ошибки и возвращают false.

Для построения WEB-сервисов в основном используются операционные системы Linux и Windows. Их политики контроля доступа совершенно не совместимы. Тем не менее, список файловых операций остается неизменным: создание, чтение, изменение, удаление и запуск исполняемых программ. PHP имеет ряд встроенных функций, самостоятельно определяющих тип операционной системы и вычисляющих доступность прав.

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

Проверка файла на существование

Очень часто требуется подтвердить наличие определенного файла. От этого может зависеть дальнейшая логика приложения. Например, если пользователь не загрузил изображение профиля личной страницы, ему показывается сообщение с напоминанием.

Для проверки файла на существование нужно использовать функцию file_exsists(). Она принимает один параметр строкового типа, в котором указывается директория расположения и имя файла. В случае успешной проверки возвращается true, иначе false.

$filename = '/some-file-path/name.txt';

if (file_exists($filename)) {
    echo "Файл {$filename} успешно найден";

} else {
    echo "Не удалось найти файл {$filename}";
}

Также PHP имеет встроенную функцию для уточнения того, что по указанному пути расположен именно файл. Эта потребность возникает в операционной системе Linux, где директории также являются файлами, но особого типа. Функция is_file() по принципу использования аналогична file_exists().

Получение общих прав доступа

Проверка прав доступа на выполнение стандартных операций чтения, записи или запуска программ осуществляется с помощью функций is_readable(), is_writable() и is_executable(). Из имен функций понятна суть проверок. Все они принимают один параметр — место расположения файла. При наличии прав доступа будет возвращено логическое значение true, в противном случае false.

$filename = '/some-file-path/name.txt';

if (is_readable($filename)) {
    echo "Файл существует и доступен для чтения";

} else {
    echo "Отсутствуют права на чтение из файла";
}

Установка прав доступа файла

Иногда, необходимо установить новые права доступа для конкретного файла. PHP позволяет сделать это с помощью функции chmod(). В первом параметре ей передается место расположения файла, а во втором - трехзначное число в восьмеричной системе счисления. Число соответствует определениями прав доступа UNIX-подобных систем для владельца файла, группы и остальных пользователей.

$filename = '/directory/content.txt';

if (chmod($filename, 0740)) {
    echo "Права доступа для {$filename} изменены";

} else {
    echo "Не удалось установить права для {$filename}";
};

Пример, приведенный выше, задает права для файла content.txt. Обратите внимание, что в самом начале второго параметра стоит ноль. Это сообщает интерпретатору о восьмеричной системе счисления. Первое число «7» говорит о том, что создатель файла будет иметь неограниченные права. Второе число «4» определяет для привязанной к файлу группы пользователей права «только чтение». Третье число «0» запрещает всем остальным пользователям любой вид доступа.

Число, задающее права доступа, формируется как сумма различных флагов где: 0 — это отсутствие прав, 1 — разрешение на запуск программы, 2 — запись в файл, 4 — чтение из файла. Например, если вы хотите дать создателю файла только права на чтение и запись, нужно указать число «6» (2 + 4).

Важно
Функция с chmod() на практике используется редко. Она совершенно не функционирует в Windows, так как политика контроля доступа в этой операционной системе запутана и не имеет простого способа изменения прав файлов. В Linux её возможности ограничиваются тем, что изменение прав должно происходить от лица администратора. PHP, как правило, запускается под отдельным пользователем с ограниченными возможностями.

Последние публикации