Я пытаюсь создать каталог на моем сервере с помощью PHP с помощью команды:
mkdir("test", 0777);
Но он не дает полных разрешений, только следующие:
rwxr-xr-x
Режим изменен вашим текущим 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 .
Настройка файлов и каталогов зависит от настройки umask. Вы можете создавать файлы с определенным набором разрешений, манипулируя umask следующим образом:
$old = umask(0); mkdir("test", 0777); umask($old);
Возможно, ваш umask настроен на исключение этих
mkdir('path', 777);
и это не сработало.
Это потому, что, по-видимому, 0, предшествующий файловому режиму, очень важен, что говорит chmod интерпретировать пройденное число как Octal вместо десятичного.
Справка
Ps. Это не решение вопроса, а только дополнение к принятому андерсе