Image

PHP Funciones Útiles - Obtener el tamaño de cualquier archivo

Desarrollo

Hola ABC-eLearners, a modo de ayuda para todos los lectores con ganas de aprender a programar, voy a compartirles mis experiencias, esta vez en PHP, las que considere más útiles para todos. Esta vez les comparto una función que devuelve el tamaño de cualquier archivo del servidor, o de un servidor remoto accesible. Esta función nos devuelve un resultado en la unidad Byte (B).

<?php
function GetFileSize($route)
{
  if(filter_var($route, FILTER_VALIDATE_URL)){
    #Este sería una ruta de tipo URL.
    $headers = get_headers($route, 1);
    $filesize = $headers['Content-Length'];

    return $filesize;
  } else if(is_file($route)){
    #Este sería una ruta local.
    return filesize($route);
  } else {
    return 0; #Aquí devuelvo 0 pues no sería u archivo.
  }
}
echo GetFileSize("https://cdn.pixabay.com/photo/2018/02/10/19/19/goal-3144351_960_720.jpg");
# Resultado: 261113
?>


Si se dan cuenta, el resultado es muy poco entendible. Aumentemos ahora una función que nos devuelva un resultado claro en unidades más conocidas como KiloByte (KB), Megabyte (MB), Gigabyte (GB), TeraByte (TB).

<?php
function GetFileSize($route, $unity = "B")
{
  if(filter_var($route, FILTER_VALIDATE_URL)){
    $headers = get_headers($route, 1);
    $filesize = $headers['Content-Length'];

    return FileSizeConvert($filesize, $unity);
  } else if(is_file($route)){
    return FileSizeConvert(filesize($route), $unity);
  } else {
    return 0;
  }
}

function FileSizeConvert($bytes, $unity)
{
  $bytes = floatval($bytes);
  $unity = mb_strtoupper($unity);

  $arBytes = array(
    "TB" => array(
      "value" => pow(1024, 4)
    ),
    "GB" => array(
      "value" => pow(1024, 3)
    ),
    "MB" => array(
      "value" => pow(1024, 2)
    ),
    "KB" => array(
      "value" => 1024
    ),
    "B" => array(
      "value" => 1
    ),
  );

  $Result = isset($arBytes[$unity]) ? $bytes/$arBytes[$unity]["value"] : $bytes;

  return round($Result, 2)." ".$unity;
}
echo GetFileSize("https://cdn.pixabay.com/photo/2018/02/10/19/19/goal-3144351_960_720.jpg", "KB");
# Resultado 2: 254.99 KB
?>


Si desean más decimales pueden modificar la función FileSizeConvert a su antojo. Comenten aquí abajo si tienen alguna sugerencia o si tienen algún problema a resolver, los leemos.

0 Commentario(s)

Deja un comentario