Всегда ли каталоги, созданные внутри записываемого каталога, доступны для записи?

У меня есть каталог, который доступен для записи. Если я создаю другой каталог внутри него, используя

mkdir("test", 0777);

Это делает тестовую директорию доступной для записи?

если я использую только

mkdir("test");

наследует ли это свойство записи из родительского каталога?

Если нет, то есть способ заставить его наследовать. Так что мне не нужно индивидуально делать его доступным для записи?

3 ответа

Оба ваших предполагаемых варианта не соответствуют действительности. Разрешения на получение результатов не будут ни точными 777 ни "унаследованы" из родительского каталога.

Чтобы понять, что произойдет, вам нужно понять два момента:

  • Что такое umask. В системах * nix это специальная маска, которая применяется к вновь созданным элементам файловой системы (каталоги или файлы. Ну, на самом деле, каталог также является файлом, но это выходит из строя). Вы можете работать с ним на PHP через umask()
  • Для mkdir() второй параметр - это не просто "точные разрешения". umask изменит его. Таким образом, конечный результат может (и, наилучшие шансы - будут) отличаться от 777.

Также важно понять, что системы разрешений Windows отличаются от * nix - вы не можете полагаться на описанные выше при работе в системах Win.


Нет, каталоги или файлы не наследуют атрибуты из родительского элемента. Но test будет доступен для всего мира, потому что вы явно задали его с помощью 0777. У нас есть 3 восьмеричные цифры, эти цифры представляют права владельца, группы и мира на ресурс. поскольку 8 является 3-й степенью 2, мы можем представлять 3 состояния с каждой восьмеричной цифрой (так как 4 + 2 + 1 = 7) в зависимости от того, какие значения установлены (это битовая маска, т.е. основанная на степенях 2, удобная для манипулирования побитовой операции)

1 = executable
2 = writable
4 = readable


Второй параметр mkdir - это маска доступа для нового каталога.

mkdir( 'test', 0777 );

getcwd() бы тест каталога в вашем текущем местоположении (getcwd()) и сделал бы его доступным для записи.

Права доступа не наследуются, они устанавливаются отдельно для каждого файла и каталога

licensed under cc by-sa 3.0 with attribution.