2009-09-09 19 views
12

Tengo el siguiente fragmento de código en un PHP 5.2.4 (sin safe_mode) servidor Linux:

mkdir($path, 0777, true); 

cuando entro en un camino como:

'/path/to/create/recur/ively/' 

todos los directorios se crean a excepción de la última ... cuando agrego otro directorio como:

'/path/to/create/recur/ively/more/' 

de nuevo, todos los caminos se crean a excepción de la última ...

han tratado con y sin barras al final

¿Puede any1 me ilumine aquí, por favor?

+0

Por favor, publique la versión exacta de PHP que está utilizando. Además, ¿está funcionando su host con safe_mode habilitado? –

+0

¿Cuál es su nivel de error de informe? Si algo sale mal, se genera un E_WARNING. modo seguro está desactivado, pero ¿su versión de php contiene algo así como suhosin? ¿Cómo (y desde dónde) instaló php? ¿Compilado de fuentes de php.net "vainilla"? A través del administrador de paquetes de su distribución (¿cuál es y cuál es el nombre exacto del paquete)? La función php_plain_files_mkdir() (responsable de la función php mkdir (x, y, true)) no ha cambiado bastante tiempo y no he encontrado un error relacionado en http://bugs.php.net – VolkerK

+0

Así que, vamos resumir: la pregunta es "recursivo mkdir no funciona correctamente", y la respuesta es "oh golly, cometí un error y eliminé el directorio más adelante en el código". Entonces, realmente me pregunto por qué este usuario tiene 26 votos favorables para esta valiosa información. No creo que otras 14 personas tuvieran el mismo problema ... – rob74

Respuesta

14

Ok, las soluciones son las siguientes: no hubo ningún problema.

no he probado el código de forma aislada, pero sólo supone el siguiente código no estaba haciendo nada a la estructura de directorios ...

como descubrí el directorio se borraron más tarde por el propio código.

De todos modos, la lección aprendida ...

8

Intenta eliminar la barra inclinada de tu camino.

Al menos así es como se está utilizando en los ejemplos de la documentación mkdir.

Personalmente no recuerdo haber tenido problemas, pero generalmente no añado barras al final, así que ve y prueba eso.

ACTUALIZACIÓN:

que acaba de intentar su código y se crea cada directorio incluyendo la última. Estoy ejecutando Mac OS X 10.5. Ni idea de por qué no está trabajando para usted :-(

Ese es el código que utilicé:

<?php 
$path = '/Users/andre/test/bla/foo'; 
mkdir($path, 0777, true); 

Lo sentimos, parece que estoy de ninguna ayuda aquí

+0

Eso fue lo primero que hice, pero todavía produce los mismos resultados ... – NDM

2

Si ha intentado todo y él. mantiene que no trabaja, a continuación, añadir un poco de texto en el final de la ruta como:?

$path = '/path/to/create/recur/ively/more/this_wont_be_created_anyway'; 
+0

Así es como lo 'resolví' en el código actual ... Pero en realidad no tiene ningún sentido ... – NDM

+0

eso es un trabajo sucio y no ayuda la pregunta hecha ... > ¿Alguien puede aclararme aquí por favor? – Gnark

+1

Nunca debe usar código que no comprenda. –

1

¿Cuál es su versión de PHP es safe_mode activado

?

Si es así, puede ser que esté experimentando http://bugs.php.net/bug.php?id=43276

+0

5.2.4 sin safe_mode, por lo que no es aplicable, también lo he intentado con y sin barras al final, así que ... – NDM

0

Los directorios intermedios creados se establecen basándose en la máscara de usuario actual. ¿Quieres algo como esto

umask(0777); 
mkdir($path, 0777, true); 
0

Función que crear todos los directorios (carpetas) de trayectoria determinada. No es necesario escribir código para crear cada directorio (carpeta) de una ruta determinada. creará todos los directorios (carpetas).

igual: Si desea crear la estructura de directorios como
organizaciones/1/usuarios/1/

lo que sólo necesita llamar a esta función con el camino de directorios como
organizaciones $ directories_path ='/1/usuarios/1/';
createUploadDirectories ($ directories_path);

/* 
* Method Name : createUploadDirectories 
* Parameter : null 
* Task : Loading view for create directries for upload 
*/ 

if (! function_exists('createUploadDirectories')){ 
    function createUploadDirectories($upload_path=null){ 
     if($upload_path==null) return false; 
     $upload_directories = explode('/',$upload_path); 
     $createDirectory = array(); 
     foreach ($upload_directories as $upload_directory){ 
      $createDirectory[] = $upload_directory; 
      $createDirectoryPath = implode('/',$createDirectory); 
      if(!is_dir($createDirectoryPath)){ 
       $old = umask(0); 
       mkdir($createDirectoryPath,DIR_WRITE_MODE);// Create the folde if not exist and give permission 
       umask($old); 
      }    
     } 
     return true; 
    } 
} 
0

que obtendrá este error si se hace el tonto error que yo y pasa una cadena, en lugar del literal numérico para el modo.

mkdir($path, "0777", true); // BAD - only creates /a/b 

mkdir($path, 0777, true); // GOOD - creates /a/b/c/d 
Cuestiones relacionadas