Создание вложенных директорий на основе пути

Довольно часто приходится при разработке сайтов создавать иерархию каталогов. К примеру, если необходимо раскладывать загружаемые изображения по различным каталогам на основе даты или названий рубрик. В случае, если создается одна директория, то хватает обычного 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.

В начале функция очишает полученный путь от лишних пробелов и не нужных символов, разбивает путь на массив, где в одном элементе содержится одно название директории. Далее в цикле бегает по массиву, где проверяет является ли данный элемент массива директорией, а также пытается создать директорию, если она еще не создана.

Вот собственно и всё, просто и быстро создаем директории не задумываясь о том, существует ли она уже или нет.

Метки: , ,

Пятница, января 8, 2010 php

Комментировать

При копировании материалов указывайте ссылку на http://kuaa.ru