Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] cambiar nombre de subida de imagen al host

Estas en el tema de cambiar nombre de subida de imagen al host en el foro de PHP en Foros del Web. Tengo el siguiente problema, si por ejemplo subo una imagen a traves de un formulario a una carpeta de mi host con el nombre de ...
  #1 (permalink)  
Antiguo 01/11/2013, 12:19
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Exclamación cambiar nombre de subida de imagen al host

Tengo el siguiente problema, si por ejemplo subo una imagen a traves de un formulario a una carpeta de mi host con el nombre de imagen coche.jpg (por ejemplo) se sube correctamente, pero si subo otra imagen diferente pero con el mismo nombre (coche.jpg) ésta última imagen que subo reemplaza a la anterior...


¿Cómo podría evitar esta confrontación?¿tal vez dando nombres aleatorios??

El código que tengo para subir la imagen es:

$ruta="/intercambios/imagenes";
$archivo=$_FILES['imagen1']['tmp_name'];
$nombreArchivo=$_FILES['imagen1']['name'];
$nombreArchivo = str_replace(" ","_",$nombreArchivo);
move_uploaded_file($archivo,$rutax."/".$nombreArchivo);
$ruta=$ruta."/".$nombreArchivo;


Gracias de antemano compañeros
  #2 (permalink)  
Antiguo 01/11/2013, 12:48
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: cambiar nombre de subida de imagen al host

Puedes añadirle el prefijo de la fecha para que sea irrepetible:

Código PHP:
Ver original
  1. $archivo .= '_'.date('d-m-y');

Saludos
  #3 (permalink)  
Antiguo 01/11/2013, 12:57
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta Respuesta: cambiar nombre de subida de imagen al host

muy buena idea ! aunque si se suben 2 imagenes con el mismo nombre en el mismo dia se volvera a reemplazar...no?¿
  #4 (permalink)  
Antiguo 01/11/2013, 13:03
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: cambiar nombre de subida de imagen al host

Si vas a ser tú el que las sube no creo que se te olvide que hay otro archivo con el mismo nombre (y además en el mismo día). Si se trata de un usuario tendrás que añadir muchas más restricciones en el código.

Última edición por PHPeros; 01/11/2013 a las 13:23
  #5 (permalink)  
Antiguo 01/11/2013, 13:41
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta Respuesta: cambiar nombre de subida de imagen al host

efectivamente va a ser un usuario y otra restricción que tengo es el tamaño de la imagen....

primero queria el poder hacer que no se sobrescriban al subir dos con el nombre igual y luego queria asegurar que solo se puedan subir imagenes, es decir que tengan formatos determinados como jpg, png, bmp, etc..
  #6 (permalink)  
Antiguo 01/11/2013, 13:49
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: cambiar nombre de subida de imagen al host

Si buscas en Google encontrarás miles de ejemplos de lo que buscas.

Además para verificar si existe un archivo debes usar file_exists. Consulta el manual.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #7 (permalink)  
Antiguo 01/11/2013, 14:02
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: cambiar nombre de subida de imagen al host

Si el archivo existe o no puedes comprobarlo con file_exists():

Código PHP:
Ver original
  1. if (file_exists($_FILES['archivo']['tmp_name'])){
  2. // sentencia TRUE
  3. }else{
  4. // sentencia FALSE
  5. }

Para comprobar el tipo/extensión de imagen puedes usar pathinfo():

Código PHP:
Ver original
  1. $extension = pathinfo($_FILES['archivo']['tmp_name'], PATHINFO_EXTENSION);
  2.  
  3. switch($extension){
  4. ...
  5. }

Saludos

Última edición por PHPeros; 01/11/2013 a las 14:13
  #8 (permalink)  
Antiguo 01/11/2013, 14:13
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: cambiar nombre de subida de imagen al host

o usar esto: $archivo .= '_'.microtime();

si no se van a subir dos fotos en el mismo segundo te va a funcionar
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #9 (permalink)  
Antiguo 02/11/2013, 05:38
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: cambiar nombre de subida de imagen al host

E intentado acotar los formatos de subida de archivo pero me parece que estoy cometiendo un error ya que todos los archivos me muestra que tiene el formato correcto incluso los que no estan permitidos, me parece que el problema es que no busca bien la extension del archivo que se sube....¿Que creeis que esta pasando?:


$rutax="../intercambios/imagenes";
$ruta="/intercambios/imagenes";
$nombreArchivo=$_FILES['imagen1']['name'];
$archivo=$_FILES['imagen1']['tmp_name'];
$nombreArchivo = str_replace(" ","_",$nombreArchivo);
$nombreArchivo = str_replace("'","_",$nombreArchivo);

$ext = array("jpg","JPG","png","PNG","bmp","BMP","gif","G IF","jpeg","JPEG");

$extimagen = pathinfo($nombreArchivo);
if (is_uploaded_file($archivo)) {
if(array_search ($extimagen['extension'],$ext));
{
echo '<script>alert("Formato de archivo correcto")</script>';
}
}
else {echo '<script>alert("Formato de archivo incorrecto")</script>';}
  #10 (permalink)  
Antiguo 02/11/2013, 05:56
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: cambiar nombre de subida de imagen al host

Por qué reepmplazas eso carcteres?
  #11 (permalink)  
Antiguo 02/11/2013, 05:57
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: cambiar nombre de subida de imagen al host

no es nada es esto -> '

tras realiar pruebas archivos que contenian en su nombre el caracter ' no eran subidos
  #12 (permalink)  
Antiguo 02/11/2013, 05:59
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: cambiar nombre de subida de imagen al host

los reemplazo porque no se suben si no al servidor...

Ahora e realizado lo siguiente:

$rutax="../intercambios/imagenes";
$ruta="/intercambios/imagenes";
$nombreArchivo=$_FILES['imagen1']['name'];
$archivo=$_FILES['imagen1']['tmp_name'];
$nombreArchivo = str_replace(" ","_",$nombreArchivo);
$nombreArchivo = str_replace("'","_",$nombreArchivo);

$extension = explode(".",$nombreArchivo);
$num = count($extension)-1;

if($extension[$num] == "jpg"or"JPG"or"png"or"PNG"or"bmp"or"BMP"or"gif"or" GIF"or"jpeg"or"JPEG")
{
echo '<script>alert("Formato de archivo correcto")</script>';
}
else {
echo '<script>alert("Formato de archivo incorrecto")</script>';
}


y tengo el mismo problema, me muestra que todos los archivos tienen el formato correcto....¿Qué esta mal?
  #13 (permalink)  
Antiguo 02/11/2013, 05:59
 
Fecha de Ingreso: septiembre-2011
Mensajes: 219
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: cambiar nombre de subida de imagen al host

Código PHP:
Ver original
  1. $ext_validos =  array('gif','png' ,'jpg');
  2. $filename = $_FILES['imagen']['name'];
  3. $ext = pathinfo($filename, PATHINFO_EXTENSION);
  4. if(!in_array($ext,$ext_validos) ) {
  5.     echo 'error';
  6. }else{
  7.    echo 'valido';
  8. }

Saludos
  #14 (permalink)  
Antiguo 02/11/2013, 06:10
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Exclamación Respuesta: cambiar nombre de subida de imagen al host

Me sigue marcando que los archivos son validos aunque meta uno diferente


$rutax="../intercambios/imagenes";
$ruta="/intercambios/imagenes";
$nombreArchivo=$_FILES['imagen1']['name'];
$archivo=$_FILES['imagen1']['tmp_name'];
$nombreArchivo = str_replace(" ","_",$nombreArchivo);
$nombreArchivo = str_replace("'","_",$nombreArchivo);

$ext_validos = array("jpg","JPG","png","PNG","bmp","BMP","gif","G IF","jpeg","JPEG");
$ext = pathinfo ($nombreArchivo, PATHINFO_EXTENSION);
if(!in_array($ext_validos)){
echo "error";
}else{
echo "valido";
}
  #15 (permalink)  
Antiguo 02/11/2013, 06:30
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: cambiar nombre de subida de imagen al host

para mas informacion cuando lo envio me sale esto ahora:


in_array() expects at least 2 parameters, 1 given in /home/u332505508/public_html/publicarart/publicar.php on line 102 error Warning: array_search() expects parameter 2 to be array, string given in /home/u332505508/public_html/publicarart/publicar.php on line 120
  #16 (permalink)  
Antiguo 02/11/2013, 06:35
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: cambiar nombre de subida de imagen al host

No lo has copiado bien, vuelve a hacerlo:

http://www.forosdelweb.com/f18/cambi...2/#post4523271

Aúpa!
  #17 (permalink)  
Antiguo 02/11/2013, 06:37
 
Fecha de Ingreso: octubre-2013
Mensajes: 5
Antigüedad: 10 años, 6 meses
Puntos: 2
Respuesta: cambiar nombre de subida de imagen al host

Hola Amigo, una ves hice un post sobre esto en mi blog, hasta te detallo como subirla sin recargar la pagina: [URL="http://www.desarrollarg.com.ar/subir-imagenes-sin-recargar-toda-la-pagina/"]click aqui[/URL]!

Espero que te sirve de ayuda! cualquier cosa me preguntas!
  #18 (permalink)  
Antiguo 02/11/2013, 06:44
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: cambiar nombre de subida de imagen al host

gracias amigo, aunque actualmente me encuentro trabajando en lo de los formatos permitidos para su subida, cuando pruebe lo tuyo te dire que tal me ha ido, tiene buena pinta la verdad....gracias!!
  #19 (permalink)  
Antiguo 02/11/2013, 06:55
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Exclamación Respuesta: cambiar nombre de subida de imagen al host

Cita:
Iniciado por PHPeros Ver Mensaje
No lo has copiado bien, vuelve a hacerlo:

http://www.forosdelweb.com/f18/cambi...2/#post4523271

Aúpa!
Copiadito tal cual y todos los archivos son correctos y validos!!!!!

$rutax="../intercambios/imagenes";
$ruta="/intercambios/imagenes";
$archivo=$_FILES['imagen1']['tmp_name'];
$nombreArchivo = str_replace(" ","_",$nombreArchivo);
$nombreArchivo = str_replace("'","_",$nombreArchivo);

$ext_validos = array('jpg','JPG','png','PNG','bmp','BMP','gif','G IF','jpeg','JPEG');
$nombreArchivo=$_FILES['imagen1']['name'];
$ext = pathinfo ($nombreArchivo, PATHINFO_EXTENSION);
if(!in_array($ext,$ext_validos)){
echo '<script>alert("Formato de archivo correcto")</script>';
}else{
echo '<script>alert("Formato de archivo incorrecto")</script>';
}
  #20 (permalink)  
Antiguo 02/11/2013, 07:01
 
Fecha de Ingreso: octubre-2013
Mensajes: 5
Antigüedad: 10 años, 6 meses
Puntos: 2
Respuesta: cambiar nombre de subida de imagen al host

Amigo, tengo el codigo que necesitas, pero sabes programar Orientado a Objetos?o te la paso en estructural?
  #21 (permalink)  
Antiguo 02/11/2013, 07:08
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: cambiar nombre de subida de imagen al host

SOLUCIONADO

estaba cometiendo el error mas tonto del mundo

$rutax="../intercambios/imagenes";
$ruta="/intercambios/imagenes";
$archivo=$_FILES['imagen1']['tmp_name'];
$nombreArchivo = str_replace(" ","_",$nombreArchivo);
$nombreArchivo = str_replace("'","_",$nombreArchivo);

$ext_validos = array('jpg','JPG','png','PNG','bmp','BMP','gif','G IF','jpeg','JPEG');
$nombreArchivo=$_FILES['imagen1']['name'];
$ext = pathinfo ($nombreArchivo, PATHINFO_EXTENSION);
if(!in_array($ext,$ext_validos)){
echo '<script>alert("Formato de archivo correcto")</script>';
}else{
echo '<script>alert("Formato de archivo incorrecto")</script>';
}


So os dais cuenta el if nos dice que SI ES DIFERENTE haga esto.....y yo tenia puesto que era correcto en vez de incorrecto. luego cuando metia un archivo que no fuera imagen me marcaba correcto!!!

Perdón y Gracias a la vez a PHPeros...
  #22 (permalink)  
Antiguo 02/11/2013, 07:09
 
Fecha de Ingreso: septiembre-2011
Mensajes: 219
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: cambiar nombre de subida de imagen al host

Cita:
Iniciado por angel_xx_1990 Ver Mensaje
Copiadito tal cual y todos los archivos son correctos y validos!!!!!

$rutax="../intercambios/imagenes";
$ruta="/intercambios/imagenes";
$archivo=$_FILES['imagen1']['tmp_name'];
$nombreArchivo = str_replace(" ","_",$nombreArchivo);
$nombreArchivo = str_replace("'","_",$nombreArchivo);

$ext_validos = array('jpg','JPG','png','PNG','bmp','BMP','gif','G IF','jpeg','JPEG');
$nombreArchivo=$_FILES['imagen1']['name'];
$ext = pathinfo ($nombreArchivo, PATHINFO_EXTENSION);
if(!in_array($ext,$ext_validos)){
echo '<script>alert("Formato de archivo correcto")</script>';
}else{
echo '<script>alert("Formato de archivo incorrecto")</script>';
}
Copiadito tal cual no. Cuando haces debug de un error, deberás quitar todo lo que no prescindible, ejemplo: en tres ocasiones estas sobreescribiendo la variable $nombreArchivo, el echo con '<script>' puede o no funcionar correctamente.

Quita todo lo que no corresponda para la resolución del problema, luego lo adornas con lo que necesitas.

Saludos
  #23 (permalink)  
Antiguo 02/11/2013, 07:11
 
Fecha de Ingreso: octubre-2013
Mensajes: 5
Antigüedad: 10 años, 6 meses
Puntos: 2
Respuesta: cambiar nombre de subida de imagen al host

Código PHP:
<?php
$formatosValidos 
= array("jpg""png""gif""bmp","jpeg","PNG","JPG","JPEG","GIF","BMP");

if(!empty(
$_FILES['imagen']['name'])){
    
    
//Obtenemos la extencion de la imagen        
    
$i strrpos($_FILES['imagen']['name'],'.');
    if (!
$i) { $ext ''; }
    
$l strlen($_FILES['imagen']['name']) - $i;
    
$ext substr($_FILES['imagen']['name'],$i+1,$l);
    
    if(
in_array($ext,$formatosValidos)){
        
//Si es valida continuamos
        
        //creamos una variable random para que las imagenes no se 
        //pisen si subimos 2 con el mismo nombre
        
$rand=rand(10000,99999);
         
        
//nombre de la carpeta donde guardas las imagenes
        
$carpeta='images';
        
$img=$_FILES['imagen']['tmp_name'];
        
$imgNom=$_FILES['imagen']['name'];
 
        
//Subimos la foto
        
$resultado move_uploaded_file($img,$carpeta."/".$rand."_".$imgNom);
        
        
//comprobamos que haya subido con exito
        
if($resultado) echo '<script>alert("La imagen se agrego con exito!")</script>';
        else echo 
'<script>alert("Ocurrio un error, por favor intentelo nuevamente.")</script>';
        
    }else{
        
        
//Si no es una extension valida mostramos el error
        
echo '<script>alert("Formato de archivo incorrecto")</script>';
        
    }
    
}else{
    
    echo 
'<script>alert("Por favor, introdusca una imagen")</script>';
    
}
?>
Ahi tenes la solucion amigaso! tanto grege para decir gregorio muchachos! te lo detalle muy claro!
  #24 (permalink)  
Antiguo 02/11/2013, 07:14
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: cambiar nombre de subida de imagen al host

Todos contentos. El autor del tema ya ha solventado su duda.
  #25 (permalink)  
Antiguo 02/11/2013, 12:46
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 9 meses
Puntos: 0
Exclamación Respuesta: cambiar nombre de subida de imagen al host

Me acabo de dar cuenta de un error

Al decirle que genere un numero aleatorio antes del nombre del archivo, cuando se suben por ejemplo 3 imágenes (en total hay para subir 6), el resto de imagenes que no se han subido graban en su casilla de la base de datos el numero aleatorio...

esto me es un problema porque cuando no lo generaba el numero aleaotrio se grababa en la casilla la direccion donde debía ir el archivo, y para que shadowbox no me mostrara las imagenes en blanco le puse un comparativo diciendo que:

<?php if ($fila[8]!="/ruta/imagenes/"):?>

<a href="<?php echo $fila[8];?>"rel="shadowbox[<?php echo $contador;?>]" style="display:none"><img src=<?php echo $fila[8];?> width="180"></a>

de ésta manera solo me mostraba las imagenes que existian...pero ahora me muestra TODAS (las que no existen da error) y es debido a que ahora graba en vez de grabar en la base de datos esto:

/ruta/imagenes/

graba por ejemplo esto

/ruta/imagenes/642342_

con el numero aleatorio incluido asique me muestra errores en la fotografias que no hay....

Se podría solucionar diciendole que en las casillas que no hay foto ponga un 0, por ejemplo y en el comparativo poner el 0:

<?php if ($fila[8]!="0"):?>


pero claro.....no se como se haria.....


El codigo utilizado para poner el numero aleatorio a sido este:

$rand=rand(100000,999999);
move_uploaded_file($archivo,$rutax."/".$rand."_".$nombreArchivo);
$ruta=$ruta."/".$rand."_".$nombreArchivo;

Etiquetas: formulario, nombre, subida
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 15:10.