Создание вложенных директорий на основе пути
Довольно часто приходится при разработке сайтов создавать иерархию каталогов. К примеру, если необходимо раскладывать загружаемые изображения по различным каталогам на основе даты или названий рубрик. В случае, если создается одна директория, то хватает обычного mkdir(). Но что делать, когда нужно создать сразу несколько вложенных директорий и не забыть про проверки.
В этом случае поможет следующая функция:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function rmkdir($path, $mode = 0777) { $path = rtrim(preg_replace(array("/\\\\/", "/\/{2,}/"), "/", $path), "/"); $e = explode("/", ltrim($path, "/")); if(substr($path, 0, 1) == "/") { $e[0] = "/".$e[0]; } $c = count($e); $cp = $e[0]; for($i = 1; $i < $c; $i++) { if(!is_dir($cp) && !@mkdir($cp, $mode)) { return false; } $cp .= "/".$e[$i]; } return @mkdir($path, $mode); } |
В этой функции всё достаточно просто. Функция получает два параметра: перечень вложенных каталогов (к примеру, /images/category1/2010/01/09/) и права на создаваемые директории. По умолчанию права стоят в 777, однако, если Ваш сайт работает в режиме mod_fcgi, то этот параметр стоит поставить в 755.
В начале функция очишает полученный путь от лишних пробелов и не нужных символов, разбивает путь на массив, где в одном элементе содержится одно название директории. Далее в цикле бегает по массиву, где проверяет является ли данный элемент массива директорией, а также пытается создать директорию, если она еще не создана.
Вот собственно и всё, просто и быстро создаем директории не задумываясь о том, существует ли она уже или нет.

