2011-07-05 7 views
19

Necesito ayuda con una función para crear un directorio de nivel 2 para las siguientes situaciones:PHP create anidado directorios

  1. existe el subdirectorio deseado en el directorio padre, no hacer nada.
  2. Existe el directorio padre, el subdirectorio no existe. Crear solo el subdirectorio
  3. Ni existe el directorio principal ni el subdirectorio. Primero cree el directorio principal y luego el subdirectorio.
  4. Si cualquiera de los directorios no se creó correctamente, devuelva FALSE.

Gracias por la ayuda.

Respuesta

48

Use el tercer parámetro de mkdir():

recursivo Permite la creación de directorios anidados especificados en la ruta de acceso. El valor predeterminado es FALSE.

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

Una cuestión: cuando la ruta ya existe, se generará un error. –

+0

@Paulocoghi Tienes razón. Este comportamiento es diferente de 'mv' de Linux, que simplemente ignora las rutas existentes – KingCrunch

+2

use if (! Is_dir ($ path)) { mkdir ($ path, 0777, true); } – Thyagi

3

puede probar usando file_exists para verificar si existe una carpeta y is_dir para verificar si es una carpeta o no.

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

Y para crear un directorio que puede utilizar la función mkdir

A continuación, el resto de su pregunta es simplemente manipulando este para adaptarse a las necesidades

0

La función que está buscando es MKDIR. Use el último parámetro para crear recursivamente directorios. Y read the documentation.

0

A partir de PHP 5.0+ mkdir tiene un parámetro recursivo que creará los padres faltantes.

0
// 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 - Manual

3

recursiva permite la creación de directorios anidados que se especifican en el nombre de ruta. pero no funcionó para mí !! para eso aquí es lo que se me ocurrió y funciona muy perfecto !!

$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 
     } 
    } 
0

cuánto sufrí .. y tengo este script ..

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;} 
}