2010-10-22 2 views

ответ

108

Режим модифицируется ваш текущий 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 установлен, чтобы исключить те

12

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

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

Для тех, кто пытался

mkdir('path', 777);

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

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

Reference

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

0

Избегайте использования этой функции в многопоточных веб-серверах. Лучше изменить права доступа к файлам с помощью chmod() после создания файла.

Пример:

$dir = "test"; 
$permit = 0777; 

mkdir($dir); 
chmod($dir, $permit);