upload basico de fotos, nombre unico

21 views
Skip to first unread message

Nicolas Ezequiel Almonacid

unread,
Aug 11, 2014, 11:23:36 PM8/11/14
to programa...@googlegroups.com
estimados como estan, por aca en dia martes, aparte de la paginacion en la que stoy trabajando, me falta validar de forma simple un upload de fotos que tngo funcionando, tengo que subr 5 fotos por aviso, en realidad un maximo de 5 fotos, lo tengo trabajandocon este codigo:

<?php

/*
*@author: Nicolás Ezequiel Almonacid
*@copyright: www.nicolasalmonacid.com
*@description: Funciones Insertar Registro
*/


//Imprimir el array que viene via POST (Solo para efectos de Debug) print_r($_POST);

require_once
'../Inc/funciones.php';

$obj
= new Avisos();

/*$obj->insertarAvisos();*/

if(isset($_POST['enviar'])){
 
   
if(isset($_FILES['fotosavisos'])){
     $rutas
= array('', ''); // Inicializas con dos rutas vacías
             
//Subida de Archivos
           
foreach($_FILES['fotosavisos']['tmp_name'] as $key => $nombresTemporal)
           
{  
               
//asignamos un nombre unico para que no se repita si el nombre de la  imagen ya existe en el servidor
               
//$nombreUnico=  md5( time());
               
                               
               
//Nombre del Arreglo generado con el input fotosavisos
                $nombres
=$_FILES['fotosavisos']['name'][$key];
               
               
//Obtenemos la extension del archivo
                $nombreUnico
=substr(md5($nombres),0 , 10);
               
               
//$nombres= preg_replace('#[^a-z.0-9]#i', '', $nombres);
               
               
//Nombre Temporal de la Imagen (Generada por el servidor)
                $nombresTemporal
=$_FILES['fotosavisos']['tmp_name'][$key];
                       
//Tamaño de la Imagen
                $tama
ño=$_FILES['fotosavisos']['size'][$key];
                       
//Tipo de Imagen
                $tipo
=$_FILES['fotosavisos']['type'][$key];
               
               
//Ruta en Servidor
               $rutaFinal
="../imagenes_avisos/".$nombreUnico.$nombres;
               $rutaFinalSQL
="imagenes_avisos/".$nombreUnico.$nombres; //VALIDAR QUE ESTA RUTA EXISTA

           
//Movemos los Archivos al Servidor
            move_uploaded_file
($nombresTemporal,$rutaFinal);
             
           
// Actualizas la ruta correspondiente para este archivo
            $rutas
[$key] = $rutaFinalSQL;

       
}//foreach  
       
                   
           
//Llamamos a la funcion Insertar $obj->insertarAvisos();
       
   
try{
       
        $obj
->insertarAvisos($rutas);
           
//print_r($_POST);
   
}catch(PDOException $e){
        echo $e
;
   
}
       
   
}


}




?>
ylo que tengo que hacer es:
1°- dejar un nombre unico por cada imagen que se sube, para eso lei que podia usar:

$nombreUnico
=  md5( time());
 
me funciono, añade varias cosas antes del nombre de la imagen, lo otro que tengo que hacer es quitar los espacios, carcteres raros, guiones, que el nombre sea solo texto,para eso lei que utilizara:
$nombres= preg_replace('#[^a-z.0-9]#i', '', $nombres);

ero ya no me funciono...y lo ultimo que tengo que hacer es validar solo archivos de foto, jpg, gif,png, ademas de controlar que solo pueda subir 5 archivos como maximo, que no se me ocurre como limitarlo, pense en un for, pero no logro implementarlo dentro del foreach,,,

habia probado con este codigo completo:
require_once '../Inc/funciones.php';

$obj
= new Avisos();

/*$obj->insertarAvisos();*/
$formatos
= array ('jpg','jpeg','png','gif');
if(isset($_POST['enviar'])){
 
   
if(isset($_FILES['fotosavisos'])){
     $rutas
= array('', ''); // Inicializas con dos rutas vacías
             
//Subida de Archivos
           
foreach($_FILES['fotosavisos']['tmp_name'] as $key => $nombresTemporal)
           
{  
               
//asignamos un nombre unico para que no se repita si el nombre de la  imagen ya existe en el servidor
               
//$nombreUnico=  md5( time());
               
                $allowedExts
= array("jpg", "jpeg", "gif", "png");
 
                $RandomNum  
= rand(0, 9999999999);
 
                $nombres
= str_replace(' ','-',strtolower($_FILES['fotosavisos']['name'][$key]));
               
                $ImageType
= $_FILES['fotosavisos']['type']; //"image/png", image/jpeg etc.
               
               
//Nombre Temporal de la Imagen (Generada por el servidor)
                $nombresTemporal
=$_FILES['fotosavisos']['tmp_name'][$key];
 
                $ImageExt
= substr($nombres, strrpos($nombres, '.'));
               
                $ImageExt
= str_replace('.','',$ImageExt);
               
               
if(!in_array($ImageExt, $allowedExts))
               
{
                   
die('Invalid file format only <b>"jpg", "jpeg", "gif", "png"</b> allowed.');
               
}
                $nombres
= preg_replace("/\.[^.\s]{3,4}$/", "", $nombres);
 
               
//Create new image name (with random number added).
                $nombrenuevo
= $nombres.'-'.$RandomNum.'.'.$nombres;
                               
               
                       
//Tamaño de la Imagen
                $tama
ño=$_FILES['fotosavisos']['size'][$key];
                       
//Tipo de Imagen
                $tipo
=$_FILES['fotosavisos']['type'][$key];
               
               
//Ruta en Servidor
               $rutaFinal
="../imagenes_avisos/".$nombrenuevo.$nombres;
               $rutaFinalSQL
="imagenes_avisos/".$nombrenuevo.$nombres; //VALIDAR QUE ESTA RUTA EXISTA

           
//Movemos los Archivos al Servidor
            move_uploaded_file
($nombresTemporal,$rutaFinal);
             
           
// Actualizas la ruta correspondiente para este archivo
            $rutas
[$key] = $rutaFinalSQL;

       
}//foreach  
       
                   
           
//Llamamos a la funcion Insertar $obj->insertarAvisos();
       
   
try{
       
       
// $obj->insertarAvisos($rutas);
            print_r
($_POST);
   
}catch(PDOException $e){
        echo $e
;
   
}
       
   
}


}




?>
no me da errores, sube la imagen, pero la deja sin extension y con un nombre de como 100 caracteres....

Saludos a todos, de nueva cuenta gracias por su tiempo y su ayuda y que tengan un excelente dia...



Jonathan Morales Salazar

unread,
Aug 13, 2014, 8:03:17 PM8/13/14
to programa...@googlegroups.com
en cuanto al nombre, yo uso un date de php y remplazo los espacios por guión y los dos puntos de las horas los quito (es una opción), la extensión la puede obtener del array files, se lo concatena una vez tenga el nombre. La validación del tipo también se obtiene del array files. En cuanto al tamaño, supongo que files es un arreglo, puede preguntar por el sizeof y si no es 5 envía un mensaje de error


--
--
Publicar: programa...@googlegroups.com
Anular suscripción: programando-an...@googlegroups.com
Webs: http://www.blonder413.com/ - http://www.cesarcancino.com/ - http://www.oscar-gomez.net/ - http://www.keyphercom.com/blog/

---
Has recibido este mensaje porque estás suscrito al grupo "Programando Ando" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a programando-an...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--


Jonathan Morales Salazar
Ingeniero de Sistemas
www.blonder413.com

Nicolas Ezequiel Almonacid

unread,
Aug 13, 2014, 9:39:08 PM8/13/14
to programa...@googlegroups.com
gracias por su tiempo maestro, usando date deberia dejarlo asi:
$nombreUnico= date();

y esto me dejaria el nombre solo con la fecha, o le agrega la fecha al nombre de la imagen?

porque ahi, para acortar el nombre con el date a maximo 10,20 caracteres usaria:
$nombreUnico=  substr($nombreUnico,0,10 );

y para validar que no hallan espacios usaria:
$nombres= preg_replace('#[^a-z.0-9]#i', '', $nombres); (aca tengo la duda si uso $nombres que es el valor de lo que viene por $_files o uso $nombreUnico)

y para la validacion de extension:

$extension = explode(".", $_FILES['fotosavisos']['name']);
$ext = end($extension);

y la concatenacion al mover seria:

$rutaFinal="../imagenes_avisos/".$nombreUnico.$nombres.$ext;
  • $rutaFinalSQL="imagenes_avisos/".$nombreUnico.$nombres.$ext; //VALIDAR QUE ESTA RUTA EXISTA

Saludos cordiales

Nicolas Ezequiel Almonacid

unread,
Aug 15, 2014, 7:02:40 PM8/15/14
to programa...@googlegroups.com
finalemnte modifique el codigo dejandolo asi:
$nombres=uniqid(date('Ymd')).$nombres;

               

               
$nombres=preg_replace('#[^a-z.0-9,\s+]#i', '', $nombres);

               

               
//$nombres=  substr(($nombres),0,25);

               

               

               

               
//Extension

               
//$mak=explode(".", $nombres);

               

               
//$extensionimg=end($mak);

               
$ext = end(explode(".", $nombres));

               

                             

               
$nombres=substr($nombres, 0, 10);

               

               
//$nombres=$nombres . '.' . $extensionimg;

 
               

               
$nombres= $nombres . '.' . $ext;

               

               
//$nombreUnico=substr(md5($nombres),0 , 10);

               

               

               

               
if (!preg_match("/.(jpg|jpeg|JPG|gif|png)$/i", $nombres) ) {

               
// This condition is only if you wish to allow uploading of specific file types    

               
echo "ERROR: Solo Imagenes con formato: .gif, .jpg, or .png.";

               
unlink($nombresTemporal); // Remove the uploaded file from the PHP temp folder

               
exit();

                 
}

               

               

               

               
//$nombreunico    =   substr($nombreunico,0,10 );

               

               
//$nombreunico    =   preg_replace('#[^a-z.0-9]#i', '', $nombres);

               

               

               

               
//Ruta en Servidor

               
$rutaFinal="../imagenes_avisos/" . $nombres; //.$nombreunico.$nombres

               
$rutaFinalSQL="imagenes_avisos/" . $nombres; //VALIDAR QUE ESTA RUTA EXISTA


 
           
//Movemos los Archivos al Servidor

           
move_uploaded_file($nombresTemporal,$rutaFinal);

           

           
//crearMiniatura($nombres);


             

           
// Actualizas la ruta correspondiente para este archivo

           
$rutas[$key] = $rutaFinalSQL;

 
       
}
//foreach

y funciona bien, me recorta el nombre a 10 caracteres, y le añade la extension segun corresponda, valida que solo pueda subir archivos de imagen, pero me di cuenta que no hace el upload, no muve la imagen al directorio, y por lo mismo luego no la puedo recuperar...en que podre estar fallando?

si pico la imagen con el boton derecho me muestra asi:
http://localhost/imagenes_avisos/2014081553.jpg

Muchas gracias
...

Jonathan Morales Salazar

unread,
Aug 16, 2014, 2:54:44 PM8/16/14
to programa...@googlegroups.com
está bien la ruta? tiene permisos?


--
--
Publicar: programa...@googlegroups.com
Anular suscripción: programando-an...@googlegroups.com
Webs: http://www.blonder413.com/ - http://www.cesarcancino.com/ - http://www.oscar-gomez.net/ - http://www.keyphercom.com/blog/

---
Has recibido este mensaje porque estás suscrito al grupo "Programando Ando" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a programando-an...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages