Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Crear carpetas con número autoincrementable

Estas en el tema de Crear carpetas con número autoincrementable en el foro de PHP en Foros del Web. Buenos días. Estoy intentando que cada vez que clico al botón que sube contenido a una carpeta, se cree una nueva carpeta con nombre autoincrementable. ...
  #1 (permalink)  
Antiguo 06/06/2014, 00:39
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 10 meses
Puntos: 0
Pregunta Crear carpetas con número autoincrementable

Buenos días.

Estoy intentando que cada vez que clico al botón que sube contenido a una carpeta, se cree una nueva carpeta con nombre autoincrementable. Es decir, que la primera vez que se sube un fichero se cree una carpeta con nombre datos1, la segunda con datos2, la tercera con datos 3, etc.

En primer lugar pensé en utilizar la función scandir para contar los documentos que tengo en la ruta especificada, seguido de un for variando el n que sigue al nombre de la carpeta, pero claro, como es lógico, entra en un bucle infinito en cada pulsación de botón... alguna idea que me pueda ayudar?

Muchas gracias!
  #2 (permalink)  
Antiguo 06/06/2014, 01:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Crear carpetas con número autoincrementable

Yo usaria scandir para obtener la lista de objetos, luego usaria is_dir para filtrar los que sean directorios, entre los directorios buscaria el maximo, al maximo le agregas 1 y ya tienes el nombre de la siguiente carpeta.

Es decir scandir y un bucle for pero así:

Código PHP:
Ver original
  1. $archivos_y_directorios=scandir($ruta);
  2. $maximo=0;
  3.  for ($i=0;$i<count($archivos_y_directorios);$i++) {
  4.     if (is_dir($ruta."/".$archivos_y_directorios[$i])){
  5.        if(is_numeric($archivos_y_directorios[$i])){
  6.           if($maximo<intval($archivos_y_directorios[$i]),10) {
  7.                $maximo=intval($archivos_y_directorios[$i],10);
  8.           }
  9.         }
  10.      }
  11.   }
  12.  
  13. $nueva_carpeta=$maximo+1;  //<---!!!!!!!


Obviamente TODAS las carpetas con nombre con un formato numérico deben ser los que has creado con este sistema.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 06/06/2014 a las 01:39
  #3 (permalink)  
Antiguo 06/06/2014, 02:17
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Crear carpetas con número autoincrementable

Este es el código que tengo finalmente:

$query = "SELECT MAC FROM dispositivos WHERE id = 1";
$resultado = mysql_query($query);
$fila = mysql_fetch_array($resultado);

$directorio = "C:/dispositivos/".$fila["MAC"];
$carpetas = scandir($directorio);
echo $carpetas;
$maximo = 0;
for ($i = 0; $i < count($carpetas); $i++) {
if (is_dir($ruta . $carpetas[$i])){
if(is_numeric($carpetas[$i])){
if($maximo < intval($carpetas[$i])) {
$maximo = intval($carpetas[$i]);
}
}
}
}
$sigcarpeta = $maximo + 1;
mkdir("C:/dispositivos/".$fila["MAC"]."/contenido". $sigcarpeta, 0755, true);

Lo primero que hace es crearme una carpeta de nombre "contenido1" y me inserta el contenido que le pido correctamente, pero al dar a volver a insertar, me dice que la carpeta ya existe, asiq no me crea otra y me inserta el contenido en la carpeta "contenido1" de nuevo. Lo que quiero es que cada vez que subo un fichero, me cree una carpeta diferente incrementando el número, y me inserte dicho fichero ahí. Lo que me hace ahora, me lo hacía ya sin el for...no se qué estoy haciendo mal =S

gracias!!
  #4 (permalink)  
Antiguo 06/06/2014, 02:51
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Crear carpetas con número autoincrementable

Ya lo he solucionado...basta con modificar dos líneas de código y dejarlas así:

$maximo = -1;
$sigcarpeta = $maximo + $i;
  #5 (permalink)  
Antiguo 06/06/2014, 05:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Crear carpetas con número autoincrementable

$directorio = "C:/dispositivos/".$fila["MAC"]."/contenido";
...
//Aqui habria que ver si MAC/contenido existen
...
mkdir("C:/dispositivos/".$fila["MAC"]."/contenido/". $sigcarpeta, 0755, true);

Yo lo que habria hecho es esto!!!

No creo que esa modificació te lo solucione

Esto

$maximo = -1;
$sigcarpeta = $maximo + $i;

es lo mismo que

$sigcarpeta = $i-1;

Si creas una carpeta "contenido1" el nombre no es numérico y por lo tanto ni lo cuenta el script, intenta entender el script.

El script resulve la cuestión si la estructura de carpetas es esta

C:/dispositivos/unaMAC/contenido/1
C:/dispositivos/unaMAC/contenido/2
C:/dispositivos/unaMAC/contenido/3

es decir si buscamos incrementar el nombre de las carpeta con nombre numérico, if(is_numeric


echo $carpetas; echo de un array no tiene mucho sentido.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 06/06/2014 a las 05:24
  #6 (permalink)  
Antiguo 06/06/2014, 05:21
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Crear carpetas con número autoincrementable

Guardo tu código por si me da fallos lo que ya tengo, pero con la modificación que te comento sí que me va creando una carpeta con un número mayor cada vez que pulso el botón subir, ya que solo con lo anterior, me generaba carpeta1 y en las siguientes subidas me decía que ya estaba creada... por lo pronto hace lo que buscaba gracias a tu for.

Echo $carpetas lo tenía para ver si no me daba fallos, ya que metía mal la ruta y no me hacia bien el scandir.

Muchisimas gracias quimfv!!
  #7 (permalink)  
Antiguo 06/06/2014, 05:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Crear carpetas con número autoincrementable

Crea A MANO para ver que pasa un directorio llamado foo y un archivo foo.txt

C:/dispositivos/unaMAC/contenido1
C:/dispositivos/unaMAC/contenido2
C:/dispositivos/unaMAC/contenidofoo
C:/dispositivos/unaMAC/foo.txt

ahora dale a el botón subir.


Código PHP:
Ver original
  1. $query = "SELECT MAC FROM dispositivos WHERE id = 1";
  2. $resultado = mysql_query($query);
  3. $fila = mysql_fetch_array($resultado);
  4.  
  5. //habria que ver si contenido existe para esa MAC
  6.  
  7. $directorio = "C:/dispositivos/".$fila["MAC"]."/contenido";
  8. $carpetas = scandir($directorio);
  9. $maximo = 0;
  10. for ($i = 0; $i < count($carpetas); $i++) {
  11.       if (is_dir("C:/dispositivos/".$fila["MAC"]."/contenido/" . $carpetas[$i])){//Es un directorio?
  12.           if(is_numeric($carpetas[$i])){//Tiene forma numérica?
  13.                if($maximo < intval($carpetas[$i])) {//Es mayor que maximo?
  14.                    $maximo = intval($carpetas[$i]);//Si lo es tengo un nuevo maximo
  15.                }
  16.           }
  17.       }
  18. }
  19. //Al salir del bucle seguro que maximo es el valor mas alto
  20. $sigcarpeta = $maximo + 1;
  21. mkdir("C:/dispositivos/".$fila["MAC"]."/contenido/". $sigcarpeta, 0755, true);
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 06/06/2014 a las 05:44

Etiquetas: autoincrementable, carpetas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:50.