Создание пути к каталогу не работает с PHP MKDIR? - PullRequest
0 голосов
/ 01 июля 2011

У меня есть следующий каталог c:/files, и я пытаюсь создать функцию-оболочку, которая эмулирует функциональность mkdir (), за исключением того, что она работает более чем с одной папкой, например,

mkdir отлично работает в следующих случаях:

mkdir('c:/files/games', 0777);

Но не об этом:

mkdir('c:/files/games/say/yes', 0777); 

Вот грубый код для дальнейшего описания того, чего я пытаюсь достичь:

function mmkdir($path, $chmod = 0777) {
/* do some loop or something with mkdir()? here */
}

mmkdir('C:/tmp/something/something');

mmkdir('C:/tmp/go/something');

mmkdir('C:/tmp/yes');

Ответы [ 2 ]

6 голосов
/ 01 июля 2011

mkdir отлично работает на следующих:

mkdir('c:/files/games', 0777);

Но не на этом:

mkdir('c:/files/games/say/yes', 0777);

Неверно, mkdir() имеет третий параметр

bool mkdir (строка $ pathname [, int $ mode = 0777 [, bool $ recursive = false [, resource $ context]]])

mkdir('c:/files/games/say/yes', 0777, true); 

Это делает вашу пользовательскую функцию устаревшей.Однако, если вы действительно хотите создать свою собственную функцию (о которой, на мой взгляд, не стоит задумываться, поскольку она уже встроена), она должна выглядеть следующим образом:

function recursive_mkdir ($path, $chmod = 0777) {
  $parent = dirname($path);
  if (!file_exists($parent)) recursive_mkdir($parent, $chmod);
  mkdir($path, $chmod);
}
4 голосов
/ 01 июля 2011

Вызовите функцию mkdir() с рекурсивным параметром, установленным на TRUE. Например:

mkdir('c:/files/games/say/yes', 0777, TRUE);
...