PHP создание вложенных каталогов

Мне нужна помощь с функцией для создания каталога уровня 2 для следующих ситуаций:

  1. нужный подкаталог существует в Родительском каталоге, ничего не делать.
  2. родительский каталог существует, подкаталог не существует. Создайте только подкаталог.
  3. ни родительский каталог, ни подкаталог не существует, сначала создайте родительский каталог, затем подкаталог.
  4. Если какой-либо каталог не был создан успешно, верните ЛОЖНЫЙ.

Спасибо за помощь.

8 ответов


используйте третий параметр mkdir():

рекурсивные позволяет создавать вложенные каталоги, указанные в пути. По умолчанию установлено значение FALSE.

$path = '/path/to/folder/with/subdirectory';
mkdir($path, 0777, true);

recursive позволяет создавать вложенные каталоги, указанные в пути. но у меня не получилось!! вот что я придумал!! и это очень прекрасно!!

$upPath = "../uploads/RS/2014/BOI/002";   // full path 
$tags = explode('/' ,$upPath);            // explode the full path
$mkDir = "";

    foreach($tags as $folder) {          
        $mkDir = $mkDir . $folder ."/";   // make one directory join one other for the nest directory to make
        echo '"'.$mkDir.'"<br/>';         // this will show the directory created each time
        if(!is_dir($mkDir)) {             // check if directory exist or not
          mkdir($mkDir, 0777);            // if not exist then make the directory
        }
    }

вы можете попробовать использовать file_exists чтобы проверить, существует ли папка или нет и is_dir чтобы проверить, является ли это папкой или нет.

 if(file_exists($dir) && is_dir($dir))

и для создания каталога, вы можете использовать mkdir функции

тогда остальная часть вашего вопроса просто манипулирует этим в соответствии с требованиями


посмотреть mkdir, в частности


функция, которую вы ищете, - MKDIR. Используйте последний параметр для рекурсивного создания каталогов. И читать документацию.


начиная с PHP 5.0+ mkdir имеет рекурсивный параметр, который создаст любые отсутствующие родители.


// Desired folder structure
$structure = './depth1/depth2/depth3/';

// To create the nested structure, the $recursive parameter 
// to mkdir() must be specified.

if (!mkdir($structure, 0744, true)) {
    die('Failed to create folders...');
}

Returns TRUE on success or FALSE on failure.

в PHP: функция mkdir - инструкции


сколько я страдал.. и есть сценарий..

function recursive_mkdir($dest, $permissions=0755, $create=true){
    if(!is_dir(dirname($dest))){ recursive_mkdir(dirname($dest), $permissions, $create); }  
    elseif(!is_dir($dest)){ mkdir($dest, $permissions, $create); }
    else{return true;}
}