Pues imaginaros que tengo la web:
www.miweb.com
Y quiero saber cuanto pesa el fichero www.google.es/basededatos/backup2014.bak
Sé que se puede saber, pero no sé como sin descargar el fichero ¿Alguien me ayuda?
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13 ?
Tendrías que mirar el Content-Length que te devuelve el server en los headers.
<?php
/**
* Devolver Content-Length de una url.
* @param [string] $url - URL para request.
* @return [integer] - Tamaño en bytes.
*/
function remoteSize($url){
$head = get_headers($url,true);
return (isset($head['Content-Length']) ? (int)$head['Content-Length'] : null);
}
/* ejemplo - (retorna: 1044381696) */
echo remoteSize('http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-desktop-amd64.iso');
?>
Aunque supongo que te vendría mejor utilizar curl o algo parecido porque get_headers() esta algo limitado por defecto y algunos servidores te podrían negar la consulta por no tener user-agent por ejemplo.
La idea es obtener los headers y cortar la conexión sin recibir el body.
Saludos
Cita de: #!drvy en 19 Marzo 2015, 19:42 PM
Tendrías que mirar el Content-Length que te devuelve el server en los headers.
<?php
/**
* Devolver Content-Length de una url.
* @param [string] $url - URL para request.
* @return [integer] - Tamaño en bytes.
*/
function remoteSize($url){
$head = get_headers($url,true);
return (isset($head['Content-Length']) ? (int)$head['Content-Length'] : null);
}
/* ejemplo - (retorna: 1044381696) */
echo remoteSize('http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-desktop-amd64.iso');
?>
Aunque supongo que te vendría mejor utilizar curl o algo parecido porque get_headers() esta algo limitado por defecto y algunos servidores te podrían negar la consulta por no tener user-agent por ejemplo.
La idea es obtener los headers y cortar la conexión sin recibir el body.
Saludos
Segun la documentacion el metodo por default para get_headers es GET y en este caso lo recomendado seria simplemente usar HEAD. Tienes que usar esto, antes de get_headers();
stream_context_set_default(
array(
'http' => array(
'method' => 'HEAD'
)
)
);
Tambien lo puedes hacer con curl:
<?php
function getContentLength($url){
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_NOBODY, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_exec($curl);
$contentLength = curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
return $contentLength;
}
echo getContentLength('http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-desktop-amd64.iso');
?>
Sólo me queda decir "muchas gracias".
Eso sí, una duda más, una vez tengo el número de caracteres ¿Cómo se el tamaño?
Porque la función pone que retorna el número de "bytes" por lo que un carácter es un binario de 8 dígitos, pero... ¿Y si es un UTF-16? Creo que usaba bloques de más de 8 bits por lo que usaría 2 o 4 bytes (según wiki pueden ser 4 :S).