Buenos días gente.
Despues de horas y horas peleandome con este tema, os realizo la siguiente consulta.
Resulta que quiero implementar un Multiple Upload Files. Me he basado en Mini Ajax File Upload. Este
http://tutorialzine.com/2013/05/mini...e-upload-form/
Funcionar funciona perfecto. Mi problema ocurre en la parte de php.
Este es mi codigo:
Código PHP:
<?
require("../bbdd/tabla.php");
$extension = pathinfo($_FILES['imagen']['name'], PATHINFO_EXTENSION);
$origen = $_FILES['imagen']['tmp_name'];
$mn_insert = new tabla('m_imagenes');
$mn_busca = $mn_insert->Show();
$mn_assoc = mysqli_fetch_assoc($mn_busca);
$auto_increment = $mn_assoc['Auto_increment'];
$nombre = "gal".$auto_increment.".jpg";
//POSTS
$carpeta = '../test/uploads/';
$posicion = '';
$muestra = 5;
$ancho = 300;
$alto = '';
$gris = false;
$thumb = false;
$zona = 0;
/* Funcion de maqueado */
function ajustamela ($origen,$alto,$ancho,$gris,$destino_archivo) {
$img = ImageCreateFromJPEG($origen);
$compruebaimagen = getimagesize($origen);
//averiguamos las medidas para la imagen
if (isset ($ancho) && $ancho >= $compruebaimagen[0]){
$nuevo_ancho = $compruebaimagen[0];
$nuevo_alto = $compruebaimagen[1];
}else if (isset ($ancho) && $ancho < $compruebaimagen[0]){
$nuevo_ancho = $ancho;
//averiguamos el alto que corresponde
$alto_proporcion = $compruebaimagen[1] * $ancho / $compruebaimagen[0];
$nuevo_alto = round($alto_proporcion);
}else if (isset ($alto) && $alto >= $compruebaimagen[1]){
$nuevo_ancho = $compruebaimagen[0];
$nuevo_alto = $compruebaimagen[1];
}else if (isset ($alto) && $alto < $compruebaimagen[1]){
//averiguamos el ancho que corresponde
$ancho_proporcion = $compruebaimagen[0] * $alto / $compruebaimagen[1];
$nuevo_ancho = round($ancho_proporcion);
$nuevo_alto = $alto;
}
//copiamos la imagen
$thumb = ImageCreatetruecolor($nuevo_ancho,$nuevo_alto);
imagecopyresampled($thumb,$img,0,0,0,0,$nuevo_ancho,$nuevo_alto,ImageSX($img),ImageSY($img));
($gris) ? imagecopymergegray($thumb,$img,0,0,0,0,ImageSX($img),ImageSY($img),$gris):'';
ImageJPEG($thumb,$destino_archivo,100);
}
//VERFICIAR FORMATO
if(isset($_FILES['imagen']) && $_FILES['imagen']['error'] == 0){
$destino_archivo = $carpeta.$nombre;
$destino_archivo2 = $carpeta.'thumbs/'.$nombre.'.'.$extension;
if ($extension=="jpg"){
ajustamela($origen,$alto,$ancho,$gris,$destino_archivo);
($thumb) ? ajustamela($origen,$al_thumb,$an_thumb,0,$destino_archivo2):'';
$sigue = true;
} else {
move_uploaded_file($_FILES['imagen']['tmp_name'], $destino_archivo);
$sigue = true;
}
echo '<script>destino = "'.substr($destino_archivo, 3).'";</script>';
}
//verificamos si se ha copiado correctamente y si es asi, lo grabamos en la base de datos
if ($sigue){
//volcamos los datos
$datos = '';
$datos .= 'muestra="'.$muestra.'",';
$datos .= 'zona='.$zona.',';
$datos .= 'nombre="'.$nombre.'",';
$datos .= 'ruta="'.$destino_archivo.'",';
$datos .= 'titimg="'.$titimg.'",';
$datos .= 'posicion="'.$posicion.'"';
$obj_insert = new tabla('m_imagenes',$datos);
//actualizamos la base de datos
$sql = $obj_insert->Insert();
try { echo '<span>Creado</span>'; } catch(Exception $e) {echo $e->getMessage(); }
} else {
exit;
}
Pues bien, lo que he podido averiguar es que el fileuploader este, ejecuta el php por cada archivo subido, hasta ahi bien.
Si subo uno o 3 ficheros, sin problemas, todo perfecto.
El problema ocurre al subir más ficheros, pongamos 6 o 7 (teniendo en cuenta que este sistema esta pensado para subir en lotes). Pues me ocurre que la base de datos guarda esto:
Código:
Editar Borrar 72 5 0 gal72.jpg ../test/uploads/gal72.jpg
Editar Borrar 73 5 0 gal73.jpg ../test/uploads/gal73.jpg
Editar Borrar 74 5 0 gal74.jpg ../test/uploads/gal74.jpg
Editar Borrar 75 5 0 gal75.jpg ../test/uploads/gal75.jpg
Editar Borrar 76 5 0 gal76.jpg ../test/uploads/gal76.jpg
Editar Borrar 77 5 0 gal77.jpg ../test/uploads/gal77.jpg
Editar Borrar 78 5 0 gal77.jpg ../test/uploads/gal77.jpg
Editar Borrar 79 5 0 gal77.jpg ../test/uploads/gal77.jpg
Editar Borrar 80 5 0 gal77.jpg ../test/uploads/gal77.jpg
Como veis, guarda correctamente en la bbdd, pero el nombre de la imagen no, lo repite. Y creo que se debe a que no deja finalizar el proceso de "ajustamela", por ello no graba el nombre correcto y ademas hay imagenes que no las termina de procesar correctamente.
La pregunta es, alguna idea de solución? o, se os ocurre como "bloquear" la función "ajustamela" hasta que finalice y posteriormente continue con el proceso?.
Gracias de antemano.