PHP: obtener tamaño de archivo remoto con strlen? (html)

Estaba mirando documentos PHP para fsockopen y todo eso y dicen que no se puede usar filesize () en un archivo remoto sin hacer cosas locas con ftell o algo así (no estoy seguro de lo que dijeron exactamente), pero pensé en ello cómo hacerlo:

$file = file_get_contents("http://www.google.com"); $filesize = mb_strlen($file) / 1000; //KBs, mb_* in case file contains unicode 

¿Sería este un buen método? Parecía tan simple y bueno de usar en ese momento, solo quiero saber si esto podría tener problemas o no ser del tamaño real del archivo.

Solo deseo usar esto en texto (sitios web) por cierto, no binario.

Esta respuesta requiere PHP5 y cUrl. Primero verifica los encabezados. Si Content-Length no se especifica, usa cUrl para descargarlo y verificar el tamaño (aunque el archivo no se guarda en ningún lugar, solo temporalmente en la memoria).

  $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array('User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3'), )); curl_exec($c); return curl_getinfo($c, CURLINFO_SIZE_DOWNLOAD); } ?> 

Debería mirar la función get_headers () . Devolverá un hash de encabezados HTTP a partir de una solicitud HTTP. El encabezado Content-length puede ser un mejor juez del tamaño del contenido real, si está presente.

Una vez dicho esto, realmente debería usar curl o streams para hacer una solicitud HEAD en lugar de un GET. Content-length debe estar presente, lo que le ahorra la transferencia. Será más rápido y más preciso.

obtendrá el archivo completo y luego calculará el tamaño del archivo (en lugar de la longitud de la cadena) de los datos recuperados. por lo general, el tamaño del archivo puede indicar el tamaño del archivo directamente desde el sistema de archivos sin leer primero el archivo completo.

así que esto será bastante lento, y cada vez buscará todo el archivo antes de poder recuperar el tamaño del archivo (longitud de la cadena)