Hace días necesitaba obtener el tamaño en bytes de un archivo usando PHP, y pensé: «con la función filesize obtengo ese dato»; pero ¡oh sorpresa!, lo que no sabía es que filesize solo te permite obtener el tamaño de un archivo alojado en el mismo servidor, y yo necesitaba obtener el tamaño de un archivo remoto, en otro servidor.
Bueno, la situación anterior me llevo a escribir la siguiente función:
<?php function getRemoteFileSize($url) { $info = get_headers($url,1); if (is_array($info['Content-Length'])) { $info = end($info['Content-Length']); } else { $info = $info['Content-Length']; } return $info; } ?>
Su uso es muy simple, sería de la siguiente manera:
<?php $file = 'http://www.google.com.mx/intl/es_mx/images/logo.gif'; echo getRemoteFileSize($file); // Devuelve 8896 ?>
Aquí pueden ver que el tamaño del logo de Google es de 8,896 bytes y que el resultado de mi función es correcto.
Algunos puntos interesantes:
- Mi función getFileSize devuelve el tamaño en bytes
- La función durará lo mismo para obtener el tamaño de un archivo ya sea de 1 MB o de 1 GB
- No importa si el archivo que estamos solicitando sufre alguna redirección (por htaccess por ejemplo), la función devolverá el tamaño del archivo destino, no el de las redirecciones
Saludos 🙂