Tecnolack - blog de cultura geek

Obtener el tamaño de un archivo remoto usando PHP

account_circle Por Davemm access_time 23 de marzo del 2010

PHP

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 🙂

@Mail
Recibe actualizaciones vía email.