mkdir для создания нескольких подкаталогов php/apache

mkdir ("dir1/{dir1-1,dir1-2}",0755,TRUE);

Эта команда создает папку dir1 с одной подпапкой с именем "{dir1-1,dir1-2}" вместо создания папок dir1-1 и dir1-2 в качестве двух подпапок для dir1.

Любая идея, как заставить это работать от единственной команды mkdir как выше?

2 ответа

Решение

PHP не поддерживает расширение скобок так же, как и оболочка. Если вы хотите создать несколько каталогов, вам придется позвонить mkdir() несколько раз, и вы можете легко сделать это с помощью цикла.

Вы можете пройти TRUE в качестве третьего аргумента mkdir() - это означает, что все каталоги, поддерживающие дерево, также будут созданы, если они не существуют, а родительский объект доступен для записи. Вы можете спокойно пройти TRUE для всех вызовов при работе в цикле первая итерация для данного каталога создаст его, последующие вызовы не будут иметь отрицательного влияния.

Например:

$toCreate = array(
  'dir1/dir1-1',
  'dir1/dir1-2'
);

$permissions = 0755;

foreach ($toCreate as $dir) {
  mkdir($dir, $permissions, TRUE);
}

Оболочка MKDIR может сделать:

mkdir -p /foo/bar/peng

так что теперь вы можете просто вызвать команду внешней оболочки из php. Но будьте осторожны с безопасностью.

Другие вопросы по тегам