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