Foros del Web » Programando para Internet » PHP »

PHP OO Warning: getimagesize(): Filename cannot be empty

Estas en el tema de Warning: getimagesize(): Filename cannot be empty en el foro de PHP en Foros del Web. Hola amigos, antes que nada quiero darles las gracias por ayudar a personas como yo, que estamos empezando a programar por nuestra cuenta, ayudando y ...
  #1 (permalink)  
Antiguo 14/12/2013, 06:27
 
Fecha de Ingreso: julio-2013
Ubicación: Paraguay
Mensajes: 71
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta Warning: getimagesize(): Filename cannot be empty

Hola amigos, antes que nada quiero darles las gracias por ayudar a personas como yo, que estamos empezando a programar por nuestra cuenta, ayudando y dando criticas constructivas acompañadas de la experiencia que muchos de ustedes cuentan. Lo siguiente que me trae por aqui es esto:

Estoy realizando en script que sube fotos al servidor, para comprobar que la imagen sea un jpg y por cuestiones de seguridad use getimagesize:

Código PHP:
Ver original
  1. // Formato de la foto:
  2. $formato = getimagesize($_FILES['foto']['tmp_name']);
  3. if ($formato['mime'] != 'image/jpeg') {
  4.     $error = true;
  5.     $mensaje[] = ('Sólo se pueden enviar fotos en formato JPG.');
  6. }

Todo bien hasta ahi, funciona pero pasa lo siguiente, suponiendo que alguien de click al boton enviar sin cargar absolutamente nada me arroja el siguiente error:

Warning: getimagesize(): Filename cannot be empty

Los mensajes de error se muestran bien, pero estan acompañados por este ultimo, que dice que getimagesize no puede estar vacio, alguna solucion para esto? Espero la ayuda de ustedes. Muchas gracias.
  #2 (permalink)  
Antiguo 14/12/2013, 08:05
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Warning: getimagesize(): Filename cannot be empty

Pues eso, tu propia pregunta te da la solucion :) comprueba que realmente haya algo:

Código PHP:
Ver original
  1. if(isset($_FILES['foto']) && strlen($_FILES['foto']['tmp_name']) > 0) {
  2.     $formato = getimagesize($_FILES['foto']['tmp_name']);
  3.     etc...
  4. }

Saludos
vosk
  #3 (permalink)  
Antiguo 14/12/2013, 08:08
 
Fecha de Ingreso: julio-2013
Ubicación: Paraguay
Mensajes: 71
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Warning: getimagesize(): Filename cannot be empty

Lo se amigo, solo que no se que codigos usar, o en este caso las variables. Solo ese es mi problema.
  #4 (permalink)  
Antiguo 14/12/2013, 08:11
 
Fecha de Ingreso: julio-2013
Ubicación: Paraguay
Mensajes: 71
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Warning: getimagesize(): Filename cannot be empty

En este caso mi codigo lo hice de esta manera:

Código PHP:
Ver original
  1. // Selección de la foto:
  2. if (empty($_FILES['foto']['name'])) {
  3.     $error = true;
  4.     $mensaje[] = ('Por favor, seleccione una foto para enviar.');
  5. }
  6. // Formato de la foto:
  7. $formato = getimagesize($_FILES['foto']['tmp_name']);
  8. if ($formato['mime'] != 'image/jpeg') {
  9.     $error = true;
  10.     $mensaje[] = ('Sólo se pueden enviar fotos en formato JPG.');
  11. }
  12. // Peso de la foto:
  13. $peso_permitido = 1000000;
  14. if ($_FILES['foto']['size'] > $peso_permitido) {
  15.     $error = true;
  16.     $mensaje[] = ('No puede enviar fotos mayores a ' . ceil($peso_permitido / 1024) . ' MB.');
  17. }

Solucionando este probelma y aplicando lo que me dijiste como seria ???
  #5 (permalink)  
Antiguo 14/12/2013, 08:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Warning: getimagesize(): Filename cannot be empty

Tu problema es que no dominas programación, siendo decirlo de ese modo, pero ese es el error.
Tu estás validando al principio, pero se te escapa que PHP es un lenguaje lineal, que ejecuta de arriba abajo, y si no lo haces cancelar la ejecución, luego de ese IF seguirá con la primera linea subsiguiente, que es precisamente la que plantea el problema.
Al menos deberías contener todo lo que sigue dentro de un ELSE, y no dejarlo librado a la ejecución.
¿No te parece?

Código PHP:
// Selección de la foto:
if (empty($_FILES['foto']['name'])) {
    
$error true;
    
$mensaje[] = ('Por favor, seleccione una foto para enviar.');
}
else{
// Formato de la foto:
// Peso de la foto:
$peso_permitido 1000000;
$formato getimagesize($_FILES['foto']['tmp_name']);
if (
$formato['mime'] != 'image/jpeg') {
    
$error true;
    
$mensaje[] = ('Sólo se pueden enviar fotos en formato JPG.');
}
elseif (
$_FILES['foto']['size'] > $peso_permitido) {
    
$error true;
    
$mensaje[] = ('No puede enviar fotos mayores a ' ceil($peso_permitido 1024) . ' MB.');
}
else{
//El resto del proceso
}

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 14/12/2013, 08:19
 
Fecha de Ingreso: julio-2013
Ubicación: Paraguay
Mensajes: 71
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Warning: getimagesize(): Filename cannot be empty

Use la variable $error para eso, en este caso mas abajo del codigo use esto:

Código PHP:
Ver original
  1. // Si se cumplen todas las condiciones continuamos:
  2. if ($error = false) {

Y si me falta aprener a fondo, por eso mismo es que estoy aqui, para aprender con ustedes. :)
  #7 (permalink)  
Antiguo 14/12/2013, 08:20
 
Fecha de Ingreso: julio-2013
Ubicación: Paraguay
Mensajes: 71
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Warning: getimagesize(): Filename cannot be empty

Yo solo puse parte del codigo, en donde creo que esta el problema, osea donde se origina el problema del empty :)
  #8 (permalink)  
Antiguo 14/12/2013, 08:35
 
Fecha de Ingreso: julio-2013
Ubicación: Paraguay
Mensajes: 71
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Warning: getimagesize(): Filename cannot be empty

Pude solucionarlo agregando esta linea:

Código PHP:
Ver original
  1. if(isset($_FILES['foto']) && strlen($_FILES['foto']['tmp_name']) > 0) {

Gracias amigo!
  #9 (permalink)  
Antiguo 14/12/2013, 09:05
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Warning: getimagesize(): Filename cannot be empty

Ok perfecto, pero revisa lo que te comenta gnzsoloyo: un if por si solo no detiene la ejecucion, y dentro del codigo cuando detectas algun tipo de error tienes que finalizar la ejecucion, es decir que cuando detectas que no hay imagen tienes que omitir cualquier otra comprovacion.

Código PHP:
Ver original
  1. if(isset($_FILES['foto']) && strlen($_FILES['foto']['tmp_name']) > 0) {
  2.     if($_FILES['foto']['size'] > 9999999999) {
  3.         $formato = getimagesize($_FILES['foto']['tmp_name']);
  4.         if($formato['mime'] == 'image/jpeg') {
  5.             //ok, las siguientes operaciones tienen que ir dentro de este if
  6.         }
  7.         else {
  8.             //formato no valido
  9.         }
  10.     }
  11.     else {
  12.         //excede tamaño
  13.     }
  14. }
  15. else {
  16.     //no hay imagen
  17. }
  18. //cualquier linea que haya debajo de este else se ejecuta igualmente

Dicho de otra forma: vas descartando y solo haces las operaciones immediatas, todo lo demas lo omites (puedes notificarlo para que el usuario sepa que pasó, pero no operes en casos no validos)

Saludos
vosk

Etiquetas: empty, getimagesize, warning
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 11:16.