Сам вопрос довольно простой, но он действительно сводит меня с ума... Я читал много других вопросов по стеку, но независимо от того, как я меняю код, проблема продолжает возникать...
Почему...
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, но я не могу понять, какой из них...