Saber lo que pasa un fichero... en internet

Iniciado por dimitrix, 19 Marzo 2015, 19:09 PM

0 Miembros y 1 Visitante están viendo este tema.

dimitrix

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?





#!drvy

Tendrías que mirar el Content-Length que te devuelve el server en los headers.

Código (php) [Seleccionar]
<?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

MinusFour

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.

Código (php) [Seleccionar]
<?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();

Código (php) [Seleccionar]

stream_context_set_default(
    array(
        'http' => array(
            'method' => 'HEAD'
        )
    )
);


Tambien lo puedes hacer con curl:

Código (php) [Seleccionar]

<?php

function getContentLength($url){
$curl curl_init($url);
curl_setopt($curlCURLOPT_NOBODYTRUE);
curl_setopt($curlCURLOPT_RETURNTRANSFERTRUE);
curl_exec($curl);
$contentLength curl_getinfo($curlCURLINFO_CONTENT_LENGTH_DOWNLOAD);
return $contentLength;
}

echo 
getContentLength('http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-desktop-amd64.iso');
?>

dimitrix

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).