Foros del Web » Programando para Internet » PHP »

Subir imágenes al servidor no funciona desde todos los clientes

Estas en el tema de Subir imágenes al servidor no funciona desde todos los clientes en el foro de PHP en Foros del Web. Verán, tengo el siguiente código que funciona perfectamente: Código PHP: if( is_uploaded_file ( $_FILES [ 'archivo' ][ 'tmp_name' ])){             if( $_FILES [ 'archivo' ][ 'type' ...
  #1 (permalink)  
Antiguo 18/03/2009, 09:30
 
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 10 meses
Puntos: 2
Subir imágenes al servidor no funciona desde todos los clientes

Verán, tengo el siguiente código que funciona perfectamente:

Código PHP:
if(is_uploaded_file($_FILES['archivo']['tmp_name'])){
            if(
$_FILES['archivo']['type'] == "image/jpeg"){
                
move_uploaded_file $_FILES 'archivo' ][ 'tmp_name' ], $dclo.$foto);
                
crear_grande2($foto);
            }
            else
                
$error .= "El archivo debe ser una imagen en formato JPG<br>";
        }
        else{
            
$error .= "No se ha podido subir el archivo de imagen<br>";
        } 
Aún no está en línea. En mi computadora funciona perfectamente, accediendo de manera local desde otra PC también funciona... pero hay una tercera PC de la que no funciona, sino que marca el error de "El archivo debe ser una imagen en formato JPG"

¿A qué se puede deber esto?

Me parece realmente extraño, si alguien me dijera esto yo diría que es imposible pues se supone que el cliente no debe afectar la forma en que funciona el servidor.

¿Alguna idea?
  #2 (permalink)  
Antiguo 18/03/2009, 09:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Subir imágenes al servidor no funciona desde todos los clientes

Hola Charlii,

El problema es que no todos los navegadores envian el mismo tipo Mime para las imagenes, algunas lo envian como image/jpg, otros como image/jpeg y otros como image/p-jpg.

Saludos.
  #3 (permalink)  
Antiguo 18/03/2009, 10:06
 
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 10 meses
Puntos: 2
Gracias, en este momento no puedo probarlo pero cuando lo haga aviso si me funcionó.

En todo caso el código según entiendo quedaría así:

Código PHP:
if(is_uploaded_file($_FILES['archivo']['tmp_name'])){
            if(
$_FILES['archivo']['type'] == "image/jpeg" || $_FILES['archivo']['type'] == "image/jpg" || $_FILES['archivo']['type'] == "image/pjpg"){
                
move_uploaded_file $_FILES 'archivo' ][ 'tmp_name' ], $demo.$foto);
                
crear_miniatura($foto);
            }
            else
                
$error .= "El archivo debe ser una imagen en formato JPG<br>";
        }
        else{
            
$error .= "No se ha podido subir el archivo de imagen<br>";
        } 
Una pregunta...

el último MIME que mencionas (image/p-jpg) ¿no es en realidad image/pjpg?

Lo acabo de probar y sigue sin funcionar...

ya verifiqué que el error se encuentra en el navegador pues con Firefox funciona, y en el mismo cliente con IE6 no funciona...

¡Arreglado!

El MIME que se envía con IE es image/pjpeg

Última edición por GatorV; 18/03/2009 a las 10:42
  #4 (permalink)  
Antiguo 18/03/2009, 10:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Subir imágenes al servidor no funciona desde todos los clientes

Cierto, una disculpa, por otro lado también conviene verificar la extensión y al final usar getimagesize() con ese puedes garantizar que es una imagen.

Saludos.
  #5 (permalink)  
Antiguo 18/03/2009, 10:47
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Subir imágenes al servidor no funciona desde todos los clientes

También, sólo como sugerencia, en lugar de estar haciendo una comparación de igualdad por cada MIME/type posible, es más legible si usas in_array() de esta manera:
Código php:
Ver original
  1. $tipos = array('image/jpeg', 'image/jpg', 'image/pjpg');
  2. if (in_array($_FILES['archivo']['type'], $tipos)) {
  3.     // Tipo válido
  4. }
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 18/03/2009, 10:52
 
Fecha de Ingreso: septiembre-2008
Ubicación: Lanzarote, Canarias
Mensajes: 486
Antigüedad: 15 años, 7 meses
Puntos: 41
Respuesta: Subir imágenes al servidor no funciona desde todos los clientes

Hola,

yo hice un script el otro día, por que uno me lo pidió, por si te sirve...

Código:
<?php

if (isset($_POST[subir])) { 

if(!$_FILES['imagen']['name']){ 
$error .='el campo imágen esta vacio.';
}

$file_ext = substr($_FILES['imagen']['name'], strripos($_FILES['imagen']['name'], '.'));

if(!eregi(".jpg", $file_ext)){
$error.='Solo se permite imágenes con extensión jpg.';
}

$sizei = @getimagesize($_FILES['imagen']['tmp_name']);
$widthi = $sizei[0];
$heighti = $sizei[1];

if(!$heighti && !$widthi) {
$error.='No es una imagen válida.';
}

if($_FILES['imagen']['size'] > 1048576){
$error .='El tamaño de la imagen es superior al permitido, solo se permiten imagenes de hasta 1 MB.';
}

if(count($error)==0) {

$ok.= 'La imagen se subio con éxito.';

move_uploaded_file($_FILES['imagen']['tmp_name'], "".$_FILES['imagen']['name']."");

}
}

echo'
'.$error.''.$ok.'
<form action="subir.php" method="post" enctype="multipart/form-data">
<input type="file" name="imagen">
<input type="submit" value="subir" name="subir">
</form>
';

?>
saludos.
  #7 (permalink)  
Antiguo 18/03/2009, 11:11
 
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Subir imágenes al servidor no funciona desde todos los clientes

Gracias por el consejo, David
  #8 (permalink)  
Antiguo 18/03/2009, 12:04
 
Fecha de Ingreso: mayo-2005
Mensajes: 45
Antigüedad: 18 años, 11 meses
Puntos: 1
Respuesta: Subir imágenes al servidor no funciona desde todos los clientes

Lo más seguro es que compruebes la extensión porque por experiencia se que cualquiera podría subir un .php haciendo que el navegador te envie un MIME de jpg y creas que es una imagen, vamos que el MIME no es fiable.
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:50.