
En PHP existe la función mkdir(), que permite crear un subdirectorio.
Por ejemplo, para crear un directorio “enero” bajo el directorio “/datos/proyecto”:
1 2 3 |
mkdir("/datos/proyecto/enero"); |
Para que la sentencia del ejemplo se ejecute con éxito, el directorio “/datos” debe existir, y el usuario que ejecuta el script debe tener los permisos necesarios para crear el subdirectorio.
Se puede modificar el ejemplo para que compruebe previamente estos requisitos, y genere un mensaje de error si no es posible crear el subdirectorio:
1 2 3 4 5 6 7 8 9 |
if (file_exists('/datos/proyecto') && is_dir('/datos/proyecto' && is_writable('/datos/proyecto') { mkdir("/datos/proyecto/enero") or die ("Error creando directorio: " . $php_errormsg); } else { echo "El directorio /datos/proyecto no existe, o no se puede escribir en él\n"; } |
Nota: Para poder utilizar la variable $php_errormsg, es necesario haber activado la opción de configuración track_errors (por defecto es ‘off’).
La llamada a mkdir también puede incluir un segundo argumento indicando los permisos de lectura, escritura y ejecución que se desean establecer para el nuevo fichero.
Por último, podemos añadir un tercer argumento booleano con valor “true”, para crear recursivamente el directorio o directorios de nivel superior, si no existen. Así, podemos reescribir el ejemplo de la siguiente forma:
1 2 3 4 5 6 7 8 9 10 |
if (file_exists('/datos/proyecto') && is_dir('/datos/proyecto' && is_writable('/datos/proyecto') { mkdir("/datos/proyecto/enero") or die ("Error creando directorio: " . $php_errormsg); } else { mkdir("/datos/proyecto/enero", 0755, true) or die ("Error creando directorios: " . $php_errormsg); } |
Si queremos tener más control sobre el proceso, podemos escribir nuestra propia función “createPath()”, a la que podremos añadir un tratamiento de errores más específico si lo deseamos:
1 2 3 4 5 6 7 8 9 10 11 |
/** * createPath: crear recursivamente una cadena de directorios */ function createPath($path) { if (is_dir($path)) return true; $prev_path = substr($path, 0, strrpos($path, '/', -2) + 1 ); $return = createPath($prev_path); return ($return && is_writable($prev_path)) ? mkdir($path) : false; } |
Esta función se llama a sí misma recursivamente, subiendo un nivel de directorios cada vez, hasta que encuentra un directorio existente, y a partir de él va creando uno a uno los subdirectorios especificados en el argumento $path que se le pasa.
—
Indice de artículos sobre programación en lenguaje PHP
—