Foros del Web » Programando para Internet » PHP »

Error llamando a funcion getimagesize dos veces con el mismo archivo

Estas en el tema de Error llamando a funcion getimagesize dos veces con el mismo archivo en el foro de PHP en Foros del Web. Hola a todos, llevo todo el fin de semana buscando la solución al problema y al final he desistido por lo que vengo aquí a ...
  #1 (permalink)  
Antiguo 08/03/2010, 07:04
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 9 meses
Puntos: 11
Error llamando a funcion getimagesize dos veces con el mismo archivo

Hola a todos, llevo todo el fin de semana buscando la solución al problema y al final he desistido por lo que vengo aquí a pedir consejo a ver si alguien me puede echar un cable.

Estoy "intentando" implementar una función para crear thumbnails y que se suban al server, para ello he creado una función que realiza todo el proceso automáticamente. La primera vez que ejecuto la función me funciona todo perfectamente, pero la segunda vez que la ejecuto con los mismos parámetros me salta un error:

Código PHP:
    function resize_and_upload($image$target_file$w$h) {
          
// Aqui ya me salta el error cuando uso la función por segunda vez
      
list($width$height) = getimagesize($image);
      
$size resize_img($image$w$h);
      
$new_width $size[0];
      
$new_height $size[1];

      
move_uploaded_file($image$target_file);
     
      
$new_image imagecreatetruecolor($new_width$new_height);
      
$old_image imagecreatefromjpeg($target_file);
      
imagecopyresampled($new_image,$old_image,0,0,0,0,$new_width$new_height$width$height);       

      
imagejpeg($new_image$target_file75);
    } 
A continuación os pongo el código que uso para implementar la función

Código PHP:
// Esta funcion simplemente coge el ultimo ID de la BDD para que las fotos se vayan ordenando secuencialmente.
$id =  ultimo_id();
$destname =$id;
$path "img/testphotos/tn/";
$destname .= ".jpg";
$filename $_FILES['file']['tmp_name'];
// Primero creo una imagen de tamaño max. 600x600                
resize_and_upload($filename$path.$destname600600);                                    
$destname $id;
$destname .= "_t.jpg";
// Posteriormente creo el thumbnail de dicha imagen de tamaño max. 100x100
// Aqui me genera el error despues de haber creado la imagen anterior correctamente, 
// los parametros son exactamente los mismos, solo cambia el tamaño
resize_and_upload($filename$path.$destname100100); 
El error que me lanza es que no se puede abrir el nombre de fichero que le estoy pasando, algo que me resulta realmente extraño ya que estoy usando exactamente la misma imágen, únicamente he cambiado las proporciones

Warning: getimagesize(/Applications/MAMP/tmp/php/phpRkYWUk) [function.getimagesize]: failed to open stream: No such file or directory in /Applications/MAMP/htdocs/web/login/images.functions.inc.php on line 91


y asi con todas las funciones de resize_and_upload()

Gracias a todo el que me pueda ayudar y un saludo.

Última edición por miwelillo; 08/03/2010 a las 10:33
  #2 (permalink)  
Antiguo 08/03/2010, 07:41
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
Respuesta: Error llamando a funcion getimagesize dos veces con el mismo archivo

no puedo decirte donde esta el error ya que no soy adivino pero puedo decirte que depures el codigo con varios echos o prints para ver donde esta el error.
creo que esta en la ruta como telo indica el codigo.
  #3 (permalink)  
Antiguo 08/03/2010, 10:30
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Error llamando a funcion getimagesize dos veces con el mismo archivo

Cita:
Iniciado por enlinea777 Ver Mensaje
no puedo decirte donde esta el error ya que no soy adivino pero puedo decirte que depures el codigo con varios echos o prints para ver donde esta el error.
creo que esta en la ruta como telo indica el codigo.
Hola,

Gracias por tu respuesta, efectivamente el error me lo da justo en la línea en el que lo indica (la primera linea de la función, cuando recoge las dimensiones de la imágen, pero solamente la segunda vez que se la llama), lo que no entiendo es por que me da el error cuando le estoy pasando un argumento que "en teoría" es totalmente valido (la ruta hasta donde se encuentra la imagen). Ya había probado antes a imprimir el valor del nombre del fichero guardado por el servidor $_SERVER['file']['tmp_name'] la primera vez que uso la función (cuando funciona) y la segunda vez que uso la función (cuando no funciona) y en ambos casos el resultado es el mismo (no me devuelve un valor nulo ni nada por el estilo, siempre el valor hacia la imagen pero en la carpeta de ficheros temporales del servidor) por lo que no entiendo porque en un caso si que hace bien la operación pero posteriormente falla.

Como curiosidad: si en lugar de pasarle la segunda vez por parámetro el valor $_FILE['file']['tmp_name'] (el que recojo del formulario) le paso la ruta hacia la imagen que he subido anteriormente, me ejecuta todas las funciones bien excepto las 2 últimas encargadas de crear la imagen (imagecopyresampled e imagejpeg), por lo que me crea una imagen en negro pero de proporciones 100x100.

Última edición por miwelillo; 08/03/2010 a las 10:39
  #4 (permalink)  
Antiguo 08/03/2010, 12:15
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Error llamando a funcion getimagesize dos veces con el mismo archivo

Continuando con el problema, acabo de intentar abrir la imagen manualmente una vez se ha subido al servidor y parece como si desapareciese una vez que he usado la función por primera vez, ¿es esto posible? Revisando la documentacion de $_FILES no dice nada de que los ficheros caduquen una vez hayan sido usados, y si compruebo el tamaño mediante $_FILES['file']['size'] me da != 0 por lo que la imagen existe y es valida!

Código PHP:
$id ultimo_id();
$destname $id;
$destname .= ".jpg";
$path "img/testphotos/tn/";

// Me devuelve la ruta de la imagen temporalmente, algo tipo:
// /Applications/MAMP/tmp/php/phpYh4qva"            
echo $_FILES['file']['tmp_name'];

//Primera llamada a la funcion, funciona correctamente y me redimensiona y copia la imagen sin problemas
resize_and_upload($_FILES['file'], $path.$destname600600);    
$destname $id;
$destname .= "_t.jpg";

// Intento abrir la imagen manualmente = error 
// fopen(/Applications/MAMP/tmp/php/phpYh4qva) [function.fopen]: failed to open stream: No such file or directory y me muestra "La imagen no existe"                    
if(!$f fopen($_FILES['file']['tmp_name'], 'r')){
        echo 
"<p>La imagen no existe</p>";

  #5 (permalink)  
Antiguo 08/03/2010, 12:30
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Error llamando a funcion getimagesize dos veces con el mismo archivo

Mira este recurso que publiqué hace poco:

http://www.forosdelweb.com/f18/aport...agenes-785553/

Saludos
__________________
Tu álbum de cromos online!!
  #6 (permalink)  
Antiguo 08/03/2010, 12:37
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Error llamando a funcion getimagesize dos veces con el mismo archivo

Cita:
Iniciado por santris Ver Mensaje
Mira este recurso que publiqué hace poco:

http://www.forosdelweb.com/f18/aport...agenes-785553/

Saludos
Gracias! voy a ver si entiendo el codigo que has escrito para guiarme un poco, que la verdad, no se donde me esta fallando y me estoy volviendo loco!!!
  #7 (permalink)  
Antiguo 08/03/2010, 13:58
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
Respuesta: Error llamando a funcion getimagesize dos veces con el mismo archivo

te recomiendo usar esta clase:

http://www.verot.net/php_class_upload_samples.htm

es lo mejor que he encontrado en la web para manejar imajenes, puede subirlas y crear nuevas apartir de una con el tamaño que quieras.
  #8 (permalink)  
Antiguo 09/03/2010, 12:09
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Error llamando a funcion getimagesize dos veces con el mismo archivo

Hola!

Muchas gracias por todas las respuestas, consegui solucionarlo mediante el aporte de santris aunque no descarto usar la clase que me has pasado ya que parece realmente util y me puede simplificar enormemente el tener que implementar todas las funciones a mano (aunque aun no estoy del todo familiarizado con la POO en PHP)

Un saludo!

Etiquetas: dos, funcion, getimagesize
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 02:36.