Неверные разрешения при вызове mkdir()

Сам вопрос довольно простой, но он действительно сводит меня с ума... Я читал много других вопросов по стеку, но независимо от того, как я меняю код, проблема продолжает возникать...

Почему...

if(!is_dir($dir)){
    clearstatcache();
    $mask = umask(0);
    if(mkdir($dir, 6750)) chmod($dir, 6750);
    umask($mask);
}

... производит...

d--s-wxrwT 2 owner group 4096 Jan 27 20:22 dir/

... когда $dir является абсолютным путем к вновь созданному dir/ ?

Как видите, хотя я запрашиваю набор разрешений 6750, я получаю прекрасное, но бесполезное, 5136... (пользователь и группа, однако, правильные) Вот что я сделал:

  • Очистка кеша статистики.
  • Установка umask PHP на 0 перед созданием и восстановление сразу после.
  • Chmod только что созданную папку в случае успеха, просто чтобы быть уверенным.

И вот что я знаю:

  • Значение umask системы равно 0037, что не является разницей между 6750 и 5136.
  • Пользователь, создающий папку (www-data), имеет тот же umask и владеет родительским каталогом с правами на запись.
  • Я могу войти как www-данные на терминал и успешно выполнить chmod 6750, получив правильные результаты.

Любая причина, по которой кажется, что PHP забыл, как вычислять? В некоторых вопросах упоминались дополнительные параметры Apache2, но я не могу понять, какой из них...


person John WH Smith    schedule 27.01.2014    source источник


Ответы (1)


Без chmod($dir, 6750) не будет проще?

$old = umask(0); 
mkdir($path, 06750); 
umask($old);

И еще одна вещь, значение вашего режима должно начинаться с 0. Прочитайте руководство о возможные значения режима.

person oleksii.svarychevskyi    schedule 27.01.2014
comment
chmod это идиотизм. Я не протестую по этому поводу, я просто был в отчаянии... Добавление нуля все исправило, спасибо. Я также удалил все бесполезные строки. Я просто думал, что ноль был обычной частью разрешений UNIX (липкий бит, GUID, UUID, ...). Я думаю, это просто еще один PHP-сюрприз... - person John WH Smith; 28.01.2014
comment
Я очень рада, что помогла вам. - person oleksii.svarychevskyi; 28.01.2014