Guardar archivos en el directorio renombrados secuenci

Ya que soy nueva en el uso de php y hay cosas que no puedo resolver. Desde ya gracias por tu tiempo.
Te explico lo que me ocurre: Tengo un código php que me permite guardar imágenes en un directorio del servidor. Esto sucedo correctamente. Para evitar que se repitan los nombres de los archivos el código incluye un renombre aleatorio alfanumérico.
Yo necesito que los archivos cargados se guarden siguiendo un numero secuenciado, por ejemplo si un usuario carga una imagen llamada vacaciones.jpg que se guarde 001.jpg, si luego sube otra imagen llamada verano98.jpg que la guarde como 002.jpg y así sucesivamente. Esto se debe a que luego desde el flash necesito llamar estas imágenes y no se hacerlo sino siguen un orden secuencial.
Te dejo el código que estoy usando.
Saludos y muchas gracias.
<?php
if ($_GET["action"] == "upload") {
    $archivo = $_FILES["Filedata"]['name'];
    $prefijo = substr(md5(uniqid(rand())),0,6);
    if ($archivo != "") {
        $destino =  "files/".$prefijo."_".$archivo;
        copy($_FILES['Filedata']['tmp_name'], $destino);
    }
}
?>

1 respuesta

Respuesta
1
Ahora estás asignando un prefijo aleatorio. Si lo deseas secuencial, debes tener anotado en alguna parte los que ya has usado, o bien, hacer un pequeño bucle que lea el directorio y repase los nombres de las imágenes que encuentre para saber cual es el máximo número usado como prefijo.
Para ello puedes usar la función scandir() que te devolverá una matriz con los nombres de los ficheros:
http://es2.php.net/manual/es/function.scandir.php
Otra solución es pauntar en algún fichero, el último número usado, para continuar desde allí.
David: entonces en principio tendría que quitar el prefijo aleatorio y crear un bucle. Hasta ahí comprendo como debería funcionar la cuestión. El hecho es que no sé como escribir el código del bucle, he probado algunos y no me han funcionado. Si puedes darme algunas lineas o ideas serán bienvenidas, sino sabre comprender. Te agradezco la pronta respuesta. Saludos y gracias.
Pd: Mejor dame un día y te envío en otro mensaje el código del bucle y renombre que tengo así me podes orientar con esa base.
Nuevamente saludos y gracias, me gano la ansiedad en responderte.
David: aquí te pego un nuevo código, mezcla de una respuesta similar en otro foro y algún aporte mio, poco fiable. A mi poco entender hay ciertas variables no determinadas y que no he sabido determinarlas además, seguramente, de otros errores que he cometido. Te lo dejo para que puedas revisarlo y corregirlo. Gracias
<?php
if ($_GET["action"] == "upload") {
$carpeta = $uploadDir
$nombre_archivo = $_FILES['Filedata']['name']
$uploadDir = 'basjpg/';
$uploadFile = $uploadDir . $_FILES['Filedata']['name'];
$nombre = no_sobreescribe($nom_orig, $carpeta);  
move_uploaded_file($_FILES['Filedata']['tmp_name'], $uploadDir.$nombre);
function no_sobreescribe($nombre_archivo, $carpeta) {
$separador = "___";
$sin_separador = ereg_replace($separador, "_", $nombre_archivo);
  if ( !file_exists($carpeta.$sin_separador) ) {
  $nombre_correcto = $sin_separador;
  }
 else {
  $nombre_temp = $sin_separador;
  $nombre_sep = $separador.$nombre_temp;
  $i = 0;
  while ( file_exists($carpeta.$nombre_temp) ) {
   $nombre_temp = $i.$nombre_sep;
   $i++;
   }
  $nombre_correcto = $nombre_temp;
  }  
 return $nombre_correcto;
 }
 }
?>
El algoritmo parece correcto siempre que tengas en un formulario, un control de tipo file llamado Filedata y que en la URL exista el parámetro action con el valor upload

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas