Intereting Posts
Кодировать строку для соответствия имени поля кодированной формы в массиве PHP POST Создание лидеров, как я буду показывать показ ранга / позиции? Что означают битовые флаги в mysqli, используя fetch_field_direct PHP DOMDocument как получить элемент? PHP Native DOMDocument и простой DOM Parser – существует ли ограничение по размеру? Заменить цвет другим цветом в изображении с помощью PHP Методы написания масштабируемого веб-сайта Предотвращение входа пользователей из неавторизованной области jQuery Validator: проверка AlphaNumeric + пробел и тире Javascript, чтобы получить ширину экрана в переменной PHP Числовая строка в виде массива в PHP Добавление пользовательской цены с ценой продукта woocomerce в корзине и оформлении заказа Радиус / ближайшие результаты – API Карт Google Печать xml с помощью php Как получить значение специальных атрибутов / пользовательских атрибутов HTML с помощью PHP DOM Parser?

Почему PHP не может создать каталог с разрешениями 777?

Я пытаюсь создать каталог на моем сервере с помощью 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. Это не решение вопроса, а только дополнение к принятому андерсе