Заметки о PHP: восьмеричные числа и права доступа
Быть может странно, но, несмотря на свою полезность, неявное преобразование типов в PHP подставило мне подножку при разработке скрипта. Ситуация проста – мне было необходимо написать скрипт, который забирал настройки из таблицы БД MySQL – права и нужную директорию – и создавал в ней вложенную директорию с заданными правами, а также менять права доступа на существующие файлы. Права хранятся в виде числа – 777, например (полный доступ к директории для всех пользователей в UNIX-like системах). Если я задам число в коде как восьмеричное, то все будет в порядке (Я опустил получение данных из базы, т.к. это принципиально не важно):
$dir="/path/to/dir/"; $createDir="somedir"; $permissions=0775; //так задается число в восьмеричной системе исчисления mkdir ($dir.$createDir,$permissions); // или при смене прав chmod($dir.$createDir,$permissions);
Функции mkdir и chmod в качестве второго параметра – прав доступа – принимают восьмеричное число. И видно, что это работает. Но, только до тех пор, пока нет необходимости получать это число откуда-нибудь еще, а не из переменной в скрипте, тип и система исчисления которой явно заданы. К чему это приводит? Посмотрим:
$dir="/path/to/dir/"; $createDir="somedir"; $permissions=775; //десятичное число mkdir ($dir.$createDir,$permissions); // или при смене прав chmod($dir.$createDir,$permissions);
$dir="/path/to/dir/"; $createDir="somedir"; $permissions="775"; //строка mkdir ($dir.$createDir,$permissions); // или при смене прав chmod($dir.$createDir,$permissions);
`chmod {$permissions} {$pathToFile}`;
Спасибо вам за ретвит:
...и за добавление статьи в:
Комментариев: 2 »
RSS-фид комментариев для этого поста | Трекбек
Оставить комментарий



А если сваять обертку подобного типа:
function chmodx($file,$p_user,$p_group,$p_other) {
$perm = $p_user * 64 + $p_group * 8 + $p_other;
chmod($file,$perm);
}
И запускать как chmodx($file,7,7,5)?
Ilviann Zed, отличный вариант, лучше чем то, что я предлагал))