Código PHP:
<?php
// lees tu archivo remoto ..
$url='http://www.handyzone.com/galerias/logos/amor/1028.gif';
$fp = fopen($url,'rb');
$archivo = fread ($fp, filesize ($url));
// GUARDAS tu $archivo (variable)
$fp=fopen('imagen_remota.gif','w'); // abrir archivo en modo binario "rb" ..
fwirte($fp,$archivo); // escribir ...
fclose($fp); // cerrar archivo ..
?>
El problema es que filesize() NO devuelve valor en llamadas externas (que pasen por
http:// ) sólo en locales (archivo.tal directo) .. Si conoces el tamaño (en bytes) de ese archivo .. puedes indicarlo en el segundo parámetro de fread() y fucionaría correctamente (en teoría).
Pero, con este código que simula una conexión HTTP normal .. puedes obtener el tamaño de un archivo remoto:
Créditos:
http://www.iezzi.ch/snippets/003_fsize.php
(traducido a función):
Código PHP:
<?php
function filesize_externo($u){
$ourhead = "";
$url=parse_url($u);
$host=$url["host"];
$path=$url["path"];
$fp = fsockopen($host, 80, &$errno, &$errstr, 20);
if(!$fp) {
echo("error");
exit ();
} else {
fputs($fp,"HEAD $u HTTP/1.1\r\n");
fputs($fp,"HOST: dummy\r\n");
fputs($fp,"Connection: close\r\n\r\n");
while (!feof($fp)) {
$ourhead = sprintf("%s%s", $ourhead, fgets ($fp,128));
}
}
fclose ($fp);
$split_head = explode("Content-Length: ",$ourhead);
$size = round(abs($split_head[1])/1024);
return $size;
}
?>
Así que el código superior que te dejé tendrías que sustituir:
Código PHP:
$archivo = fread ($fp, filesize ($url));
por
Código PHP:
$archivo = fread ($fp, filesize_externo ($url));
Y .. debería ir. Ya nos contaras.
Un saludo,
Un saludo,