MKDIR игнорировать режим, но использовать рекурсивный параметр - PullRequest
2 голосов
/ 22 июля 2010

PHP * функция mkdir имеет следующую подпись:

bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )

Я хотел бы вызвать эту функцию, указав $pathname и $recursive, установленные на true,но я бы не хотел указывать параметр $mode.Мы контролируем права доступа к новым файлам / каталогам на уровне сервера и поэтому не хотим указывать их в моем коде.

Итак, что я должен передать как $mode, чтобы он эффективно игнорировался, а chmod отсутствовал-инг имеет место?Я не нашел способа.

Может быть, единственное решение - написать пользовательскую функцию mkdir, которая будет ломать путь и создавать каталоги один за другим?

Ответы [ 4 ]

3 голосов
/ 22 июля 2010

Почему бы вам не установить режим на значение по умолчанию 0777.

1 голос
/ 22 июля 2010

0777 по умолчанию. Если вы не укажете параметр, вместо него будет использоваться 0777, поэтому любая попытка «обойти» его указание является спорным.

Я не думаю, что вы обойдете это вообще, потому что это не поведение PHP: GNU / Linux mkdir() делает то же самое:

Параметр mode определяет разрешения для использования. Он изменяется с помощью umask процесса обычным способом: разрешения для созданного каталога: (режим & ~ umask & 0777).

Я не уверен, стоит ли вообще об этом беспокоиться. Если это так, я думаю, что лучшее, что вы можете сделать, это проверить разрешения родительского каталога и применить его.

1 голос
/ 22 июля 2010

0777 * * 1002

Если я что-то упустил, подпись показывает три необязательных параметра. Первые два, $mode и $recursive имеют значения по умолчанию 0777 и false соответственно, если они не указаны. Явное его указание не должно изменять поведение.

1 голос
/ 22 июля 2010

Извините, что нет способа избежать $ mode-param, если вы хотите задать $ recursive param.

Вы можете сохранить mode в переменной и использовать его где угодно позже -

$mode = 0777;

mkdir($file_name, $mode, $recursive);
...