Ver Mensaje Individual
  #3 (permalink)  
Antiguo 11/07/2003, 20:04
leonardop
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 20 años, 9 meses
Puntos: 1
Nuestro amigo Manoloweb tiene razón. Como está anotado en el manual de PHP, la función filesize() no trabaja con archivos remotos (en nuestro caso, ubicados en otro servidor.)

Para hacer este tipo de cosas, usualmente hay que recurrir a trucos poco elegantes. En esta situación, podría por ejemplo jugarse con un socket que hable con el servidor remoto y pedir las cabeceras del archivo en busca de la cabecera específica Content-Length, pero es un poco engorroso y a final de cuentas hay URLs que no retornan esta cabecera, e incluso puede presentarse el caso (improbable, es cierto) de que el servidor devuelva una cabecera con información errónea.

La única forma de saber el tamaño de un archivo remoto con seguridad es descargarlo y medirlo (da forma similar al hecho de que la única manera de estar completamente seguro de que una dirección de correo electrónica es válida es enviando un mensaje a la dirección dada.) Cualquier otra solución podría quedar corta en alguna situación particular.

Reconociendo esto, algo que podría resultar es:

Código:
<?php

// URL del archivo del que se desea conocer el tamanyo
$url = 'http://cualquiercosa/esto-es-solo-un-ejemplo.htm';

$fp = fopen ($url, "r");

$tamanyo = 0;

// Leer el archivo en segmentos de 1kb
while ($cadena = fread ($fp, 1024))
    $tamanyo += strlen ($cadena);

print "El tamaño es $tamanyo";

?>
Nota que para que esto funcione, PHP debe estar configurado de modo tal que la directiva allow_url_fopen esté habilitada en php.ini.

También cabe mencionar que podría usarse la función file_get_contents() si la versión de PHP que usas es 4.3.0 o superior. En tal caso, el código podría reducirse un poco.

Por último, coincido con la advertencia de Manoloweb en el sentido en que debes tener cuidado ya que con archivos relativamente grandes (o si la conexión entre tu servidor y el servidor remoto resulta lenta), este script puede tomar mucho tiempo en completar su tarea.