Foros del Web » Programando para Internet » PHP »

Upload de imágenes, a veces funciona a veces no

Estas en el tema de Upload de imágenes, a veces funciona a veces no en el foro de PHP en Foros del Web. Hola! Estoy adaptando un script de upload de imagenes con redimensionamiento. Todo funciona bien, el problema es que, a veces. Me explico, el script no ...
  #1 (permalink)  
Antiguo 06/12/2008, 02:57
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 22 años, 2 meses
Puntos: 4
Upload de imágenes, a veces funciona a veces no

Hola!

Estoy adaptando un script de upload de imagenes con redimensionamiento. Todo funciona bien, el problema es que, a veces. Me explico, el script no tenía comprobación de tamaño o tipo de archivo, entonces yo se lo coloqué. El problema es que a veces hace la comprobación y a veces no (tanto de tipo de archivo como de tamaño). Aquí el script:

Código PHP:

    $tam_max 
50000;

      if(
is_uploaded_file($_FILES['foto']['tmp_name'])) {

    if(
$_FILES['foto']['size'] > $tam_max) {

         
unlink($_FILES['foto']['tmp_name']);

                 echo 
"El archivo es demasiado grande";

                 die();

    }

        if(
$_FILES['foto']['type'] <> "image/gif" OR $_FILES['foto']['type'] <> "image/pjpeg"  OR $_FILES['foto']['type'] <> "image/jpeg") {

         
unlink($_FILES['foto']['tmp_name']);

                 echo 
"El archivo no es una foto";
            die();
        }

   
//empieza la redimension, tomamos la imagen temporal subida
   
$info getimagesize($_FILES['foto']['tmp_name']);
   
//segun el caso sera jpg, gif, png
   
switch ($info[2]) {
  case 
1:
    
$picture imagecreatefromgif($_FILES['foto'] ['tmp_name']); break;
  case 
2:
    
$picture imagecreatefromjpeg($_FILES['foto'] ['tmp_name']); break;
  case 
3:
    
$picture imagecreatefrompng($_FILES['foto'] ['tmp_name']); break;
  
// etcétera //
  
}

$original $picture;
$original_w imagesx($original);
$original_h imagesy($original);

$max 300;  //AQUI PONES EL TAMAÑO DE LA IMAGEN A LO QUE QUIERAS

if($original_w>$original_h) {
    
$muestra_w $max;
    
$muestra_h intval(($original_h/$original_w)*$max);
    } else {
    
$muestra_w intval(($original_w/$original_h)*$max);
    
$muestra_h $max;
    }

$muestra imagecreatetruecolor($muestra_w,$muestra_h);

imagecopyresampled($muestra,$original,0,0,0,0$muestra_w,$muestra_h,$original_w,$original_h);

imagedestroy($original); // aqui destruyo el original, pues no hace falta ya


     // me verifica haya sido cargado el archivo
        
$ruta_destino "../fotos/";
         
$namefinaltrim ($_FILES['foto']['name']);
        
$namefinalereg_replace (" """$namefinal);
        
$uploadfile$ruta_destino $namefinal;


       if(
imagejpeg($muestra,$uploadfile,'100')) { // se coloca en su lugar final

                  
echo "<b>Upload exitoso!. Datos:</b><br>";
                    echo 
"Nombre: <i><a href=\"".$uploadfile."\">".$_FILES['foto']['name']."</a></i><br>";
                      echo 
"Tipo MIME: <i>".$_FILES['foto']['type']."</i><br>";
                    echo 
"Peso: <i>".$_FILES['foto']['size']." bytes</i><br>";
                     echo 
"<br><hr><br>";


                }


        } else {

                echo 
"No hubo imagen para la ficha<br />";

        } 

A veces por ejemplo subo una imagen jpg tamaño gigante, pero en lugar de decir, "Tamaño muy grande" pasa directamente a "No hubo imagen para la ficha". A veces subo un jpg y dice que el tipo de archivo es incorrecto, pero a veces no. También, en la última parte donde se dan los datos del archivo, la variable $_FILES['foto']['type']. aparece vacia... no dice nada de nada.

¿Alguna ayuda?

GRacias.

Samuel.
__________________
Equívocos sin importancia
  #2 (permalink)  
Antiguo 06/12/2008, 13:34
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Upload de imágenes, a veces funciona a veces no

Hola

prueba usando getimagesize para determinar el tipo u el tamaño del archivo, y tambien prueba cambiando los operadores de este IF

Código PHP:
 if($_FILES['foto']['type'] <> "image/gif" OR $_FILES['foto']['type'] <> "image/pjpeg"  OR $_FILES['foto']['type'] <> "image/jpeg") { 
Código PHP:
$info getimagesize($_FILES['foto']['tmp_name']); 


 if( 
$info[2] == "image/gif" || $info[2]  == "image/pjpeg"  || $info[2]  == "image/jpeg") { 
Un saludo
  #3 (permalink)  
Antiguo 06/12/2008, 14:20
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Upload de imágenes, a veces funciona a veces no

Threepewood:
Mi recomendacion es que primero separes la subida de la redimensionada.
Segundo aqui en este foro se han escrito excelentes scripts para
subir archivos que conllevan el uso de move_uploaded....
Saludos
Franco
  #4 (permalink)  
Antiguo 06/12/2008, 14:43
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 22 años, 2 meses
Puntos: 4
Respuesta: Upload de imágenes, a veces funciona a veces no

Hola!

Al final lo he solucionado, quiza no d la mejor manera pero es que type nunca me dio resultado.

A ver qué les parece

Código PHP:
    $tam_max 102400;

    
$tipo_archivo $HTTP_POST_FILES['foto']['type'];

     if(
is_uploaded_file($_FILES['foto']['tmp_name'])) {

    if (!(
strpos($tipo_archivo"jpeg") || strpos($tipo_archivo"gif") || strpos($tipo_archivo"pjpeg") || strpos($tipo_archivo"jpg"))) {


         echo 
"$tipo_archivo<br>";
         echo 
"El archivo no es una foto";

            die();

        }



        if (
$_FILES['foto']['size'] > $tam_max) {

            echo 
"El archivo es muy grande";

            die();
        } 
__________________
Equívocos sin importancia
  #5 (permalink)  
Antiguo 06/12/2008, 20:03
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Upload de imágenes, a veces funciona a veces no

Threepwood:
Ya el archivo ha sido subido pero esta en el directorio TEMPORAL
ahora debes hacer un move_uploaded... para ubicarlo en el sitio
final; es decir donde tu lo quieres colocar.
No uses unlink hasta que el archivo este en su ubicacion final porque
entonces php te dara errores.
Una vez en la ubicacion definitiva, puedes redimensionarlo con
mas facilidad y no te dara errores.
Saludos
Franco
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 22:03.