Подтвердить что ты не робот

Почему PHP не может создать каталог с разрешениями 777?

Я пытаюсь создать каталог на своем сервере с помощью PHP с помощью команды:

mkdir("test", 0777);

Но он не дает полных разрешений, только следующие:

rwxr-xr-x
4b9b3361

Ответ 1

В этом случае режим изменяется текущим umask, который 022.

Способ работы umask является субтрактивным. Вы берете начальное разрешение, данное mkdir, и вычитаете umask, чтобы получить фактическое разрешение:

  0777
- 0022
======
  0755 = rwxr-xr-x.

Если вы не хотите, чтобы это произошло, вам нужно временно установить umask на ноль, чтобы он не влиял. Вы можете сделать это со следующим фрагментом:

$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);

Первая строка изменяет umask на ноль, сохраняя предыдущую в $oldmask. Вторая строка делает каталог с использованием требуемых разрешений и (теперь не имеет значения) umask. Третья строка возвращает umask к тому, из чего она была первоначально.

См. PHP doco для umask и mkdir для более подробной информации.

Ответ 2

На создание файлов и каталогов влияет настройка umask. Вы можете создавать файлы с определенным набором разрешений, манипулируя umask следующим образом: -

$old = umask(0);
mkdir("test", 0777);
umask($old);

Ответ 3

Возможно, ваш umask установлен для исключения этих

Ответ 4

Для тех, кто пробовал mkdir('path', 777);

и это не сработало.

Это потому, что, по-видимому, 0, предшествующий файловому режиму, очень важно, что говорит chmod интерпретировать пройденное число как Octal вместо десятичного.

Ссылка

Ps. Это не решение вопроса, а только дополнение к принятому anwser