PHP создает вложенные каталоги - PullRequest
25 голосов
/ 05 июля 2011

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

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

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

Ответы [ 8 ]

58 голосов
/ 05 июля 2011

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

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

$path = '/path/to/folder/with/subdirectory';
mkdir($path, 0777, true);
4 голосов
/ 15 апреля 2014

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

$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
        }
    }
3 голосов
/ 05 июля 2011

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

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

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

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

2 голосов
/ 05 июля 2011

См. mkdir, в частности параметр $recursive.

1 голос
/ 16 июля 2016

Сколько я страдал .. и получил этот сценарий ..

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;}
}
0 голосов
/ 05 июля 2011
// 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 - Руководство

0 голосов
/ 05 июля 2011

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

0 голосов
/ 05 июля 2011

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

...