PHP chmod – установка и чтение прав доступа в Unix системах с помощью PHP

Красносельский
Константин
Константинович

Компьютер и программы

Веб-дизайн

Справочники

Документация по CSS1

Настройка файла .htaccess

Коды ошибки http сервера

Подстановочные символы и регулярные выражения

Спецификация файла robots.txt

SSI – Server Side Includes

Таблица кодировки символов кириллицы

Нестандартные символы в HTML

Вторая таблица символов HTML

MIME Types (типы файлов)

 

Советы начинающим

Как в PHP поместить enum в массив

Советы начинающим Веб-дизайнерам: Что, где и зачем.

Правила плохого тона

WEB-уловки

Камень предкновения: верстка таблицами или блоками?

Рекомендации по разработке веб сайта

 

Анализ WEB-конъюнктуры. Создание лучшего сайта и его раскрутка.

Анализ WEB-конъюнктуры

Предисловие

Приручение поисковых машин

Уровень документа - все гениальное просто

Благоустройство нор для поисковых червей или как водить пауков по нашей паутине

Ускорение индексации сайта

Если гора не идет к Магомету

Индекс цитирования

Что это такое и с чем его едят

Приобретение веса в глазах общественности

Послесловие

Последние замечания по интернет-раскрутке

 

Приложения

А: «Рекомендации лучших пауководов»

Краткий комментарий.

Советы специалистов поисковой системы Rambler.

Использование файлов robots.txt.

Часто задаваемые вопросы.

Советы специалистов поисковой системы Aport.

Регистрация сайта в Апорте.

Советы специалистов поисковой системы Yandex.

Добавление страниц

Индексирование

Положение страницы на выдаче

Поиск со своей страницы

Ответы на часто задаваемые вопросы

 

Б: «1000 сверх-сайтов Рунета»

1000 сверх-сайтов Рунета

 

В: «Сто наиболее популярных поисковых слов»

Сто наиболее популярных поисковых слов

 

Г: «Где это сделать?»

Где это сделать?

 

Д: «Практическое руководство!!!»

Краткий комментарий.

Окна, ссылки и меню.

Ссылки и окна. Внешний вид и внутреннее содержание.

Организация ссылок. Всевозможные оглавления.

Если вам не нравятся фреймы, значит, вы не умеете их готовить.

Меню из выпадающих списков (javascript и CSS).

Многоуровневое раскрывающееся меню (javascript и CSS).

Работа с базами данных.

Обработка баз данных браузером посетителя

Обработка баз данных сервером (PHP)

Взаимодействие с посетителем

Отправка писем с веб-страницы.

Формы

Методы форм.

Создание на сайте PHP голосования.

Регистрация и контроль посетителей (PHP).

Интерактивность материала.

Создание гостевой книги на PHP.

Удаление записей из текстовых баз (PHP).

Заргузка файлов на сервер по HTTP-протоколу (PHP).

Разное.

Псевдослучайные элементы (PHP, javascript).

Точное определение имени и версии браузера с помощью JavaScript, SSI или PHP

Клоакинг и технология «Входных дверей».

Отложенное выполнение и выполнение с заданным интервалом (javascript)

Информация о размере, дате, собственные счетчики и протоколы посещений

 

 

 

Консультации

Экспорт и импорт новостей

PHP chmod – права доступа к файлам

WEB 2.0 – миф, или реальность?

Давно забытый AJAX

Способы хранения веб-страниц: документы FrontPage или базы данных

Как заработать на своем сайте?

FTP клиент, как настроить Total Commander

Знак собаки @ и подавление ошибок в PHP

AJAX

AJAX с точностью до наоборот, или как научить AJAX сохранять историю в браузере

 

Мониторинг веб сайтов и анализ поисковых запросов

Документация по Веб-дизайну

Желающим скачать PHP скрипт или JavaScript

 

Литература и поэзия

Гуманитарные науки

Компьютер Программы WEB-дизайн Гуманитарные науки Документация Справочник Статьи Хронология материалов

Компьютер Программы WEB-дизайн Гуманитарные науки Документация Справочник Статьи Обращение к посетителям

Шрифт Font Шрифты Fonts скачать Скачать шрифты

Реферат по психологии религии логике информатике. рефераты контрольные курсовые работы скачать на халаву психология религия информатика халява логика контрольная курсовая работа Скачать рефераты

Создание web сайта на заказ Создание web сайта на заказ

Создание, разработка web сайта на заказ. WEB-design Создание веб сайтов (цены)

web Сайты, созданные Красносельским К. К. Веб-дизайн разработка сайтов на заказ. WEB-design Веб-сайты, созданные мной (потенциальным заказчикам)

Полезные ссылки Полезные ссылки

Красносельский К. К. Компьютер Windows DOS система реестр BIOS программы Веб-дизайн PHP Perl CSS HTML CGI Java JavaScript музыка поэзия стихи тексты песен Психология философия психоанализ психиатрия логика сознание разум мышление интуиция развитие человек реферат религия информатика Об авторе

Компьютер Программы WEB-дизайн Гуманитарные науки Документация Справочник Статьи Статистика сайта

Показать фреймы

 

Web На сайте

 

 

 

ТаблицейБлоками.

PHP chmod – установка и чтение прав доступа в Unix системах с помощью PHP

Последняя модификация: 10.08.2014 г

Страница загружена с адреса: http://webdesign.site3k.ru/consulting/php_chmod.html

Моя студия веб-дизайна

PHP chmod – установка и чтение прав доступа

Функция chmod языка PHP может вызвать неожиданное затруднение. Понятный и простой, на первый взгляд, синтаксис:

chmod(filename, attrib);

в котором filename определяет имя файла или каталога, для которого трубуется изменить атрибут (режим доступа), а attrib – режим, который требуется установить, имеет ряд скрытых особенностей.

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

drwxr-x--x
-rw-r--r--

Первый символ описывает тип элемента: дефис "-" означает файл, символ "d" означает каталог. Дальнейшие девять символов описывают права доступа:

r – read право на чтение
w – write право на запись
x – execute право на выполнение*

*право на выполнение для каталога означает возможность просмотреть его содержимое (войти в каталог).

Первые три символа из девяти устанавливают права доступа для владельца, вторые три - для группы, третьи - для всех пользователей. Каждый набор символов r, w, x показывает текущие установленные права доступа для каждой категории пользователей. Если вместо символа стоит дефис, то соответствующее право отсутствует.

Однако, PHP команда chmod не признает указание прав доступа в виде текстовой строки. Права доступа для нее обятельно должны указываться в виде числа от 0 до 7, для каждого типа пользователей. Чтобы понять, как преобразовываются числовые значения в текстовые и, наоборот, полезно представить текстовыу строку в виде битовой маски для однозначности которой необходимо строгое соблюдение порядка атрибутов: 1 группа цифр относится к владельцу файла, вторая к его группе, третья – к остальным пользоватлям. Кроме того, необходимо соблюдать последовательность прав: 1 право чтения, 2 – право записи, 3 – право выполнения.

При соблюдении этих условий, приведенные выше строки

drwxr-x--x
-rw-r--r--

Можно представить как набор двоичных данных:

100.0.111.101.001
1.0.0.110.100.100

(Это фактический набор атрибутов, с точки зрения PHP команды chmod важны лиш последние три набора в каждой строке).

Единица в последних трех группах каждой строки означает наличие права (истину), ноль – его отсутствие (ложь).

Преобразование данного представления в десятиричный формат дает более привычное числовое представление:

ДвоичноеДесятичноеФизический смысл значения
0000ничего не разрешает (только удалять)
0011доступ на выполнение (x)
0102доступ на запись (w)
1004доступ на чтение (r)

Побитовое сложение (сдвиг) значений прав для каждой группы пользователей позволяет сократить десятиричную запись до одного числа в каждой группе:

Двоичное сложениеДесятичнное сложениеФизический смысл
001+010=0111+2=3доступ на выполнение и запись (-wx)
001+100=1011+4=5доступ на выполнение и чтение (r-x)
010+100=1102+4=6доступ на чтение и запись (rw-)
001+010+100=1111+2+4=7доступ на чтение, запись и выполнение (rwx)

Таким образом маска атрибутов для вышеуказаного примера (показаны только последние три группы, имеющие значение для прав доступа):

В текстовом формате имеет вид:

rwx.r-x.--x
rw-.r--.r--

В двоичном:

111.101.001
110.100.100

А в десячичном, приобретает вид:

7.5.1
6.4.4

Именно в таком виде, только без разделяющих точек, и принимает PHP команда chmod значение атрибутов, корорые следует установить.

Но, и это не все! Нельзя просто вписать в PHP-скрипт команду

chmod('myscript.php', 755);

Чтобы сделать файл myscript.php выполняемым: Команда chmod принимает значение прав только в 8-ричном формате! Ну что тут поделаеш – разработчики PHP специально усложняли нам жизнь, чтобы наши мозги не атрофировались. ☺

Чтобы команда chmod нормально выполнялась, ей нужно указать преобразование в 8-ричный формат, поставив перед значением прав ноль:

chmod('myscript.php', 0755);

Вы думаете это все?

Позвольте! Зачем так упрощать себе жизнь? Разработчики PHP позаботились о том, чтобы эта статья не закончилась так просто.

Добавление ноля перед атрибутами хорошо действует, когда вы заранее знаете, какой нужен атрибут. А если нужно сделать так, чтобы права выставлялись формой на HTML-странице? К примеру, вы хотите создать систему управления файлами?

Допустим, из формы приходит переменная $attrib, содержащая значение прав доступа, типа 755. Вы думаете что, приклеете к ним ноль:

chmod('myscript.php', '0'.$attrib);

и, все у вас получится?

Ага, размечтались. Разработчики PHP не позаботились об автоматическом преобразовании десятичного числа в восмиричное, будут они вам строки преобразовывать?

Нет, конечно. Самим придется потрудиться:

chmod('myscript.php',octdec($attrib));

вставляя функцию octdec преобразования числа (или строки, имеющей числовае значение) в восьмиричный формат. Или используя функцию eval:

eval("chmod('myscript.php',0$attrib);");

Да, теперь все заработает. Но только на запись! Попробуйте считать атрибуты функией fileperms и не опплеваться: она вернет все в том же восьмиричном формате! Лично я теряюсь в интерпритации таких значений. Для нормального восприятия, их приходтся предварительно преобразовывать функцией decoct в десятиричный формат, а затем, из полученного результата брать последние 3 символа:

substr(
   decoct(fileperms('myscript.php')),
   strlen(decoct(fileperms('myscript.php')))-3,
   strlen(decoct(fileperms('myscript.php')))
);

Только так можно получить нормальные числовые атрибуты.

Преобразовав каждое из трех цифр в двоичный формат лекго получить буквенное представление прав доступа:
$perms=decoct(fileperms('myscript.php'));
$len=strlen($perms);
if ($len==5){ // вместо длины можно использовать is_dir() и другие методы
	$attrib='d';// каталог
}else{
	$attrib='-';// файл
}

// 1 метод: Вычисление через двоичное преобразование
for($i=$len-3; $i < $len; $i++){
	@$attrib2=decbin(substr($perms,$i,1));
	if (substr($attrib2,0,1)==1){
		$attrib.='r';
	}else{
		$attrib.='-';
	}
	if (substr($attrib2,1,1)==1){
		$attrib.='w';
	}else{
		$attrib.='-';
	}
	if (substr($attrib2,2,1)==1){
		$attrib.='x';
	}else{
		$attrib.='-';
	}
}

// 2 метод: Прямое вычисление (закомментирован)
//for($i=$len-3; $i < $len; $i++){
//	switch (substr($perms,$i,1)) {
//	case 0:
//		$attrib.='---';
//		break;
//	case 1:
//		$attrib.='--x';
//		break;
//	case 2:
//		$attrib.='-w-';
//		break;
//	case 3:
//		$attrib.='-wx';
//		break;
//	case 4:
//		$attrib.='r--';
//		break;
//	case 5:
//		$attrib.='r-x';
//		break;
//	case 6:
//		$attrib.='rw-';
//		break;
//	case 7:
//		$attrib.='rwx';
//		break;
//	}
//}

Но числовой формат во многих случаях окажется удобней буквенного (сравните 755 и -rwxr-xr-x, что быстрее понимается?).

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

Смотреть

 

< Предыдущая (Экспорт и импорт) PHP chmod Следующая (Web 2.0)>

 

Комментарии к странице (всего 1)

 

 

 

PHP chmod – установка и чтение атрибутов (прав доступа) в юникс (Unix) системах. пример PHP скрипт скачать


На главную страницу сайта PHP chmod – установка и чтение атрибутов (прав доступа) в юникс (Unix) системах. пример PHP скрипт скачать