Foros del Web » Programando para Internet » PHP »

Reducir nombre y quitar caracteres raros

Estas en el tema de Reducir nombre y quitar caracteres raros en el foro de PHP en Foros del Web. hola amigos, les comento: tengo un script para subir fotos, me funciona bien, pero me encontre con el problema que si subo una imagen con ...
  #1 (permalink)  
Antiguo 11/08/2014, 09:35
 
Fecha de Ingreso: noviembre-2010
Mensajes: 131
Antigüedad: 9 años
Puntos: 1
Reducir nombre y quitar caracteres raros

hola amigos, les comento: tengo un script para subir fotos, me funciona bien, pero me encontre con el problema que si subo una imagen con el mismo nombre, esta se reemplaza, me puse a bsucar y encontre una forma de colocar un "nombreunico":

$nombreUnico= md5( time());

funciona, pero deja demasiado largo el nombre y no me lo almacena en el acampo de la bd, hay forma de acortar el nombre, y de paso evitar espacios o caracteres en el nombre, que sea solo texto, intente asi:

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

pero no me resulto, añande el nombre de nuevo detras de la extension y deja un archivo sin xtension ejeje

Saludos y muchas gracias
  #2 (permalink)  
Antiguo 11/08/2014, 11:15
 
Fecha de Ingreso: julio-2014
Mensajes: 79
Antigüedad: 5 años, 4 meses
Puntos: 1
Respuesta: Reducir nombre y quitar caracteres raros

si te queda muy largo podes aumentar el espacio de caracteres permitidos en la db, usa un campo de tipo text para eso.
Sino para seleccionar el largo podes usar "substr", tambien podes usar la funcion "preg_match" para evitar ciertas palabras, podes usar "trim" para eliminar los espacios en blanco del nombre de la imagen, y creo que tambien se puede usar "mysql_real_escape_string" para escapar caracteres especiales del nombre.
Pero que te sirva
  #3 (permalink)  
Antiguo 11/08/2014, 12:45
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 11 años, 7 meses
Puntos: 528
Respuesta: Reducir nombre y quitar caracteres raros

Podrías verificar si ya existe un archivo con el mismo nombre, y de ser así, agregar un número al nuevo archivo, ejemplo:

suben imagen.jpg

ya existe

renombre el archivo nuevo a imagen2.jpg

desde luego, podrías colocar un bucle para verificar si ya existe también el archivo con número
  #4 (permalink)  
Antiguo 11/08/2014, 15:55
 
Fecha de Ingreso: noviembre-2010
Mensajes: 131
Antigüedad: 9 años
Puntos: 1
Respuesta: Reducir nombre y quitar caracteres raros

gracias gente por su tiempo y su ayuda, probare lo que me comentan y esatre comentando....saludos
  #5 (permalink)  
Antiguo 11/08/2014, 21:36
 
Fecha de Ingreso: noviembre-2010
Mensajes: 131
Antigüedad: 9 años
Puntos: 1
Respuesta: Reducir nombre y quitar caracteres raros

intente asi:
Código PHP:
Ver original
  1. $formatos = array ('jpg','jpeg','png','gif');
  2. if(isset($_POST['enviar'])){
  3.  
  4.     if(isset($_FILES['fotosavisos'])){
  5.      $rutas = array('', ''); // Inicializas con dos rutas vacías
  6.              //Subida de Archivos
  7.             foreach($_FILES['fotosavisos']['tmp_name'] as $key => $nombresTemporal)
  8.             {  
  9.                 //asignamos un nombre unico para que no se repita si el nombre de la  imagen ya existe en el servidor
  10.                 //$nombreUnico=  md5( time());
  11.                
  12.                
  13.                                
  14.                 //Nombre del Arreglo generado con el input fotosavisos
  15.                 $nombres=$_FILES['fotosavisos']['name'][$key];
  16.                
  17.                 //Obtenemos la extension del archivo
  18.                 //$nombreUnico=substr(md5($nombres),0 , 10);
  19.                 $nombreUnico=  md5( time());
  20.                
  21.                 $nombreUnico=  substr($nombreunico,0,10 );
  22.                 $extension = explode(".", $_FILES['fotosavisos']['name']);
  23.                
  24.                 $ext = end($extension);
  25.                
  26.                 $nombres= preg_replace('#[^a-z.0-9]#i', '', $nombres);
  27.                
  28.                 //Nombre Temporal de la Imagen (Generada por el servidor)
  29.                 $nombresTemporal=$_FILES['fotosavisos']['tmp_name'][$key];
  30.                         //Tamaño de la Imagen
  31.                 $tamaño=$_FILES['fotosavisos']['size'][$key];
  32.                         //Tipo de Imagen
  33.                 $tipo=$_FILES['fotosavisos']['type'][$key];
  34.                
  35.                 //Ruta en Servidor
  36.                $rutaFinal="../imagenes_avisos/".$nombreUnico.$nombres.$ext;
  37.                $rutaFinalSQL="imagenes_avisos/".$nombreUnico.$nombres.$ext; //VALIDAR QUE ESTA RUTA EXISTA

pero me tira estos errores:

Notice: Undefined variable: nombreunico in C:\xampp\htdocs\avisos\crud\insert.php on line 36

Warning: explode() expects parameter 2 to be string, array given in C:\xampp\htdocs\avisos\crud\insert.php on line 37

Warning: end() expects parameter 1 to be array, null given in C:\xampp\htdocs\avisos\crud\insert.php on line 39
  #6 (permalink)  
Antiguo 12/08/2014, 04:51
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 17 años, 9 meses
Puntos: 67
Respuesta: Reducir nombre y quitar caracteres raros

Fíjate que aquí lo pones Unico con mayusculas.
Código PHP:
Ver original
  1. $nombreUnico=  md5( time());

Y aquí, el que esta dentro del substr lo tienes en minusculas.
Código PHP:
Ver original
  1. $nombreUnico=  substr($nombreunico,0,10 );
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net
  #7 (permalink)  
Antiguo 14/08/2014, 17:38
 
Fecha de Ingreso: noviembre-2010
Mensajes: 131
Antigüedad: 9 años
Puntos: 1
Respuesta: Reducir nombre y quitar caracteres raros

gracias amigo por tu tiempo, modifique el codigo y actualmente lo tengo asi:
Código PHP:
/Imprimir el array que viene via POST (Solo para efectos de Debugprint_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)
            {   
                          
                
//Nombre del Arreglo generado con el input fotosavisos
                
$nombres=$_FILES['fotosavisos']['name'][$key];
                
                
//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];
                
                
$nombresuniqid(date()).$nombres;
               
                
$nombres=preg_replace('#[^a-z.0-9,\s+]#i'''$nombres);
                
                
//$nombres=  substr(($nombres),0,25);
                
                //Extension
                
$mak=  explode("."$nombres);
                
                
$extensionimg=end($mak);

                
//$nombreUnico=substr(md5($nombres),0 , 10);
               
                
                
                
if (!preg_match("/.(jpg|jpeg|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);
              
            
// 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;
    }
        
    }


}




?> 



funciona bien, de hecho sube la imagen, añade el unique id, pero tengo algunos problemas...

me da este warning:
Warning: date() expects at least 1 parameter, 0 given in C:\xampp\htdocs\avisos\crud\insert.php on line 37

la linea es esta:
$nombres= uniqid(date()).$nombres;

y el archivo me lo sube bien, pero me deja el nombre por ejemplo asi:

ORIGINAL:
WP_20140626_18_50_55_SmartShoot.JPG

Y AL SUBIRLO ME LO SUBE ASI:
53ec22718a6d4WP20140626185055SmartShoot.JPG

loq ue busco es dejarlo asi por ejemplo
53ec22718a6d4WP201406261.jpg

estaria eliminando bien los espacios, pero al acortar el numero de caracteres con:
$nombres= substr(($nombres),0,25); //probando a 25 caracteres

me salta el filtro de que solo imagenes jpg, gif, etc, siendo que subo una jpg (la del ejemplo de arriba) y no
puedo subir ninguna imagen, solo eliminando esta linea vuelve a funcionar

en eso estoy pegado, ya tengo el filtro por extension funcionando, me falta:
- lo del warning date
- acortar a xx caracteres el nombre final

Saludos cordiales y agradeszco a todos su tiempo....
  #8 (permalink)  
Antiguo 14/08/2014, 18:03
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 17 años, 9 meses
Puntos: 67
Respuesta: Reducir nombre y quitar caracteres raros

Eso es porque le tienes que especificar a date que quieres que te muestre.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net
  #9 (permalink)  
Antiguo 14/08/2014, 20:33
 
Fecha de Ingreso: noviembre-2010
Mensajes: 131
Antigüedad: 9 años
Puntos: 1
Respuesta: Reducir nombre y quitar caracteres raros

ya resolvi lo del warning pasandole al date() valores, ahora solo me queda por resolver el tema de acortar el tamaño del nombre, probe asi:

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

pero si dejo la linea asi, me tira error de formato al subir cualquier iimagen, si la quito funciona de nuevo el upload....

es raro ejejeje,

gracias
  #10 (permalink)  
Antiguo 15/08/2014, 03:27
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 17 años, 9 meses
Puntos: 67
Respuesta: Reducir nombre y quitar caracteres raros

Al aplicar substr lo que te hace es reducir la cadena de texto al tamaño indicado, lo que pasa es que cuando haces eso con nombres largos, eso que te va a quitar la extensión del archivo si o si, porque te lo reduce por derecha a no ser que le indiques lo contrario.

Por lo que tendrías que hacer lo siguiente:
- Separas el nombre de la extensión.
- Al nombre le aplicas el substr.
- Después como ya debería de estar recortado le añades de nuevo la extensión.
- Subes el archivo.
Y así no te debería de dar problema de formato.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net
  #11 (permalink)  
Antiguo 15/08/2014, 16:29
 
Fecha de Ingreso: noviembre-2010
Mensajes: 131
Antigüedad: 9 años
Puntos: 1
Respuesta: Reducir nombre y quitar caracteres raros

gracias @bookmaster por tu tiempo, segui lo que me indicas, mira deje asi:
Código PHP:

                $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($nombres010);
                
                
//$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 de echo al hacer el insert, me dice corrcto, pero no mueve la imagen y por l mismo no la puedo recuperar luego, aunque en el browser me aparece asi:

http://localhost/imagenes_avisos/2014081553.jpg

con lo cual veo que cumple, recorta a 10, le añade el .jpg

pero no la esta moviendo a la carpeta, y por lo mismo no la puedo recuperar...

saludos y gracias
  #12 (permalink)  
Antiguo 16/08/2014, 02:46
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 17 años, 9 meses
Puntos: 67
Respuesta: Reducir nombre y quitar caracteres raros

Comprueba que tengas bien puesta las rutas tanto a la hora de subir la imagen, como a la hora de mostrarla, ya que si dices que te la sube y que te la muestra si accedes directamente a ella, el problema le tendrías en la ruta de muestra.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net

Etiquetas: caracteres, nombre, raros, reducir
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 06:47.