Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Leguim en 30 Agosto 2019, 16:35 pm



Título: [Resuelto]: ¿Como puedo obtener el tamaño de una imagen/archivo y validarlo?
Publicado por: Leguim en 30 Agosto 2019, 16:35 pm
Buenos días!
¿Como se podría obtener el peso de una imagen y también como se podría usar en una comparación?

Es decir:

Código
  1. if($peso_imagen <= 3M) // Si el peso es menor igual a tres megas (tampoco sabría como escribir ese peso)
  2. {
  3.    [Imagen aceptada]
  4. }
  5. else
  6. {
  7.    [Imagen rechazada]
  8. }
  9.  

Gracias.


Mod: Temas sobre PHP van al subforo de PHP.


Título: Re: [Pregunta]: ¿Como puedo obtener el tamaño de una imagen/archivo y validarlo?
Publicado por: @XSStringManolo en 30 Agosto 2019, 18:59 pm
$tamanhoImagen = filesize( '/ruta/imagen.jpg' );

Si la imagen es externa usa file_get_contents.


Título: Re: [Pregunta]: ¿Como puedo obtener el tamaño de una imagen/archivo y validarlo?
Publicado por: EdePC en 30 Agosto 2019, 19:24 pm
Saludos,

- Se puede hacer de dos maneras, en Client Side usando javascript y en Server Side con php, supongo que lo ideal es hacerlo en ambos lados. La ventaja de Client Side es que el archivo no se sube al servidor, no consume ancho de banda, ni hay que esperar a que el archivo termine de subirse para comprobarlo. La desventaja del Client Side es que no es seguro ya que el cliente puede editarlo a su gusto.

Código
  1. <form action="#" method="post" onsubmit="validar()" enctype="multipart/form-data">
  2.  <input type="file" id="fileImg" name="fileImg">
  3.  <input type="submit" value="Upload">
  4. </form>
  5.  
  6. <script>
  7.  function validar() {
  8.    if ( document.getElementById("fileImg").files[0].size > 3000000 ) {
  9.      alert("Límite de subida es 3 MB");
  10.      event.preventDefault();
  11.    } else {
  12.      alert("Archivo permitido");
  13.    }
  14.  }
  15. </script>
  16.  
  17. <?php
  18.  if ( isset($_FILES["fileImg"]) ) {
  19.    if ( $_FILES["fileImg"]["size"] > 3000000 ) {
  20.      echo "<script>alert('Límite de subida es 3 MB')</script>";
  21.    } else {
  22.      echo "<script>alert('Archivo permitido')</script>";
  23.      // Ahora debes guardar la imagen
  24.      // move_uploaded_file($_FILES["fileImg"]["tmp_name"], "images/img01.png");
  25.    }
  26.  }
  27. ?>

- Ahora otra cosa para discutir es como tratar los Bytes, MB, MiB, etc XD, lo normal es trabajar con Bytes, y los sistemas operativos trabajan con MiB aunque diga MB pero siempre suelen poner los octetos y Bytes también, en realidad 3MB = 2.86102294921875 MiB, y así, por eso es que los vivos fabricantes de HDD, SSD, USB dicen 8GB, 64GB, 1TB, etc y en realidad en sistema operativo reconoce menos por que los mide en MiB, TiB, etc y los fabricantes si usan correctamente el MB, TB, etc


Título: Re: [Pregunta]: ¿Como puedo obtener el tamaño de una imagen/archivo y validarlo?
Publicado por: MinusFour en 30 Agosto 2019, 20:09 pm
PHP y Apache tienen directivas para limitar el tamaño de los requests enviados. En PHP tienes:

post_max_size (https://www.php.net/manual/en/ini.core.php#ini.post-max-size)
upload_max_size (https://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize)

En Apache:

LimitRequestBody (https://httpd.apache.org/docs/2.4/mod/core.html#limitrequestbody)


Título: Re: [Pregunta]: ¿Como puedo obtener el tamaño de una imagen/archivo y validarlo?
Publicado por: Leguim en 30 Agosto 2019, 21:07 pm
¡Muchas gracias a los tres!  ;-)