2016-04-20 3 views
2

У меня есть следующий код:MkDir() создание 0755 вместо 0775

function makedirs($dirpath, $mode = 0775, $recursive = true) { 
    return is_dir($dirpath) || mkdir($dirpath, $mode, $recursive); 
} 

$dir = 'path/to/folder/'; 

makedirs($dir, 0775); 

Проблема в том, даже при прохождении 0775 или что-нибудь еще в качестве параметра для $mode, mkdir() создает 0755 Permition папки.

Для Exemple код previows возвратит:

  • путь/(0755)
  • к/(0755)
  • папку/(0755)
+0

Проверить значение Umask. вы можете ввести umask в оболочку, чтобы узнать значение маски.Я предполагаю, что ваше значение umask равно 022 – user3425867

+0

'$ dir = 'path/to/folder /' makedirs ($ dir, 0775)' Это неполное, если это то, что вы действительно используете. Если это псевдокод, отправьте соответствующий синтаксис. –

+0

'$ mode = 0775' ведущий ноль, вероятно, рассматривается как восьмеричная битва из-за пользовательской функции. Попробуйте процитировать его и так же для внутри 'makedirs ($ dir, 0775)'. –

ответ

3

Вы могли бы сделать следующие

function makedirs($dirpath, $mode = 0775, $recursive = true) { 
    $oldMask=umask(002); 
    $status = is_dir($dirpath) || mkdir($dirpath, $mode, $recursive); 
    umask($oldMask); 
    return $status; 
} 

$dir = 'path/to/folder/' 
makedirs($dir, 0775); 

Примечание: Хотя вы можете использовать umask (0), чтобы разрешить даже 777 разрешений. Это не рекомендуется, поскольку это может создавать проблемы с безопасностью.

Редактировать

Попробуйте широкие настройки системы ценностей Umask для всех пользователей или для себя, чтобы удалить код UMASK из PHP. Хотя приведенный выше код будет работать, установка umask в php-скриптах не рекомендуется.

Согласно Руководство Страница PHP

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

Вы можете настроить umask в файле/etc/bashrc или/etc/profile для всех пользователей. По умолчанию большинство дистрибутивов Linux устанавливают его на 0022 (022) или 0002 (002). Открыть/и т.д./профиль или файл ~/.bashrc, введите:

# vi /etc/profile

ИЛИ

$ vi ~/.bashrc

Append/изменить следующие строки к установке нового: биты полномочий umask 022

Сохраните и закройте файл. Изменения вступят в силу после следующего входа в систему. Все пользователи UNIX могут переопределять значения по умолчанию umask системы в файле/etc/profile, ~/.profile (оболочка Korn/Bourne) ~/.cshrc (оболочки C), ~/.bash_profile (оболочка Bash) или ~/.login file (определяет пользовательскую среду при входе в систему).

Источник http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

+0

ваш комментарий о 'umask' привел меня сюда: http://php.net/manual/en/function.umask.php, где первый пример объясняет ваш ответ и может быть полезен другим. – Machado

+1

Имеет смысл использовать chmod. Вы все равно можете установить значение umask вашей системы на 002 по крайней мере один раз. Вы можете настроить umask в файле '/ etc/bashrc' или'/etc/profile' для всех пользователей. – user3425867

+0

Ну, теперь я использую chmod() после mkdir(), чтобы предоставить папке нужные разрешения по соображениям безопасности. – Machado

Смежные вопросы