2011-07-11 23 views
6

Tengo una matriz que contiene los nombres de ruta y nombres de archivosCrear archivos y carpetas de forma recursiva

['css/demo/main.css', 'home.css', 'admin/main.css','account'] 

quiero crear esos archivos y carpetas si no están existían todavía. Sobrescríbalos si ya existen.

Respuesta

18

Para cada una de estas rutas, deberá especificar si se trata de un archivo o un directorio. O puede hacer que su secuencia de comandos asuma que la ruta apunta a un archivo cuando el nombre base (la última parte de la ruta) contiene un punto.

para crear un directorio de forma recursiva es simple:

mkdir(dirname($path), 0755, true); // $path is a file 
mkdir($path, 0755, true);   // $path is a directory 

0755 es la expresión de permisos de archivo, se puede leer sobre ello aquí: http://ch.php.net/manual/en/function.chmod.php

2
<?php 
    function mkpath($path) 
    { 
    if(@mkdir($path) or file_exists($path)) return true; 
    return (mkpath(dirname($path)) and mkdir($path)); 
    } 
?> 

Esto hace que las rutas sean recursivas.

+5

'mkdir()' puede hacer esto solo. Sin necesidad de una función especial. – phant0m

+5

Pero 'mkdir' con parámetro recursivo establecerá ** permisos solo en el último directorio ** en los directorios creados. [Ver esta publicación] (http://php.net/manual/en/function.mkdir.php#96990). – PeterM

-2

fin llegué este método y funciona muy bien para mí

shell_exec("mkdir -p ".$your_path); 
+0

nunca debe usar '' exec() '' o '' shell_exec() '' porque no es seguro. '' mkdir() '' tiene el tercer parámetro como se mencionó anteriormente :) – Northys

+0

Para obtener más información sobre lo que Northys mencionó sobre la seguridad, si el valor en la variable '$ path está establecido en'/tmp; rm -rf /; 'o cualquier otro comando del sistema. Puede o no ser una preocupación en su caso, pero supongo que puede apreciar los peligros involucrados en el uso de 'exec()' y 'shell_exec()' –

0

Acabo de utilizar una forma simple de explotar la cadena y reconstruir y comprobar si es un archivo o un directorio

public function mkdirRecursive($path) { 


    $str = explode(DIRECTORY_SEPARATOR, $path); 
    $dir = ''; 
    foreach ($str as $part) { 
     $dir .= DIRECTORY_SEPARATOR. $part ; 
     if (!is_dir($dir) && strlen($dir) > 0 && strpos($dir, ".") == false) { 
      mkdir($dir , 655); 
     }elseif(!file_exists($dir) && strpos($dir, ".") !== false){ 
      touch($dir); 
     } 
    } 
} 
Cuestiones relacionadas