[Resuelto]: ¿Como puedo obtener el tamaño de una imagen/archivo y validarlo?

Iniciado por Leguim, 30 Agosto 2019, 16:35 PM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

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 (php) [Seleccionar]

if($peso_imagen <= 3M) // Si el peso es menor igual a tres megas (tampoco sabría como escribir ese peso)
{
   [Imagen aceptada]
}
else
{
   [Imagen rechazada]
}


Gracias.



Mod: Temas sobre PHP van al subforo de PHP.

@XSStringManolo

$tamanhoImagen = filesize( '/ruta/imagen.jpg' );

Si la imagen es externa usa file_get_contents.

EdePC

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 (php-brief) [Seleccionar]
<form action="#" method="post" onsubmit="validar()" enctype="multipart/form-data">
  <input type="file" id="fileImg" name="fileImg">
  <input type="submit" value="Upload">
</form>

<script>
  function validar() {
    if ( document.getElementById("fileImg").files[0].size > 3000000 ) {
      alert("Límite de subida es 3 MB");
      event.preventDefault();
    } else {
      alert("Archivo permitido");
    }
  }
</script>

<?php
  
if ( isset($_FILES["fileImg"]) ) {
    if ( 
$_FILES["fileImg"]["size"] > 3000000 ) {
      echo 
"<script>alert('Límite de subida es 3 MB')</script>";
    } else {
      echo 
"<script>alert('Archivo permitido')</script>";
      
// Ahora debes guardar la imagen
      // move_uploaded_file($_FILES["fileImg"]["tmp_name"], "images/img01.png");
    
}
  }
?>


- 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

MinusFour

PHP y Apache tienen directivas para limitar el tamaño de los requests enviados. En PHP tienes:

post_max_size
upload_max_size

En Apache:

LimitRequestBody