jueves, 27 de agosto de 2015

Obtener uso de disco o partición mediante PHP

Si necesitamos saber el tamaño total y el uso del disco en el que tenemos alojada nuestra web, por ejemplo para avisar de que queda poco espacio libre, lo podemos hacer fácilmente mediante PHP. Para ello contamos con dos funciones muy útiles:
  • float disk_free_space ( string $directory ): devuelve el número de bytes disponibles en el sistema de archivos o partición de disco que corresponde con el directorio especificado.
  • float disk_total_space ( string $directory ): devuelve el número total de bytes del sistema de archivos o partición de disco que corresponde con el directorio especificado.

A modo de ejemplo hemos creado una función que utiliza las funciones anteriomente mencionadas y que nos devolverá una cadena con el total y el uso de discos en GB y el porcentaje de uso y libre si hemos superado un porcentaje límite de uso de disco o partición, que establecemos por defecto en el 90%. Si no superamos dicho límite, devolvemos false:


 function getDiskUsage($dir, $limit=90){
  $freespace = disk_free_space($dir);
  $totalspace = disk_total_space($dir);
  $freespace_mb = $freespace/1024/1024;
  $totalspace_mb = $totalspace/1024/1024;
  $freespace_percent = ($freespace/$totalspace)*100;
  $used_percent = (1-($freespace/$totalspace))*100;

  if ($used_percent > $limit){
   $text = sprintf(_('Espacio total').": %.2fGB", $totalspace_mb/1024).' - ';
   $text.= sprintf(_('libre').": %.2fGB", $freespace_mb/1024).' - ';
   $text.= sprintf(_('%% usado').": %.2f%%", $used_percent).' - ';
   $text.= sprintf(_('%% libre').": %.2f%%", $freespace_percent);
   return $text;
  }

  return false;
 }