AsterixMedlem sedan dec. 1999483 inlägg filesize() går ju inte att använda på remote-filer så jag skrev denna funktionen:
function urlfilesize ($url, &$output) {
unset ($buffer, $size);
if ($file = @fopen ("$url", "r")) {
while(!feof($file)) {
$buffer.= fread($file,1);
$size++;
}
fclose ($file);
$output = $buffer;
return $size - 1;
}
$output = FALSE;
return FALSE;
}
Nu undrar jag om det finns det något bättre sätt??
nicclasMedlem sedan feb. 20001 050 inlägg Ja, jag tror att det går att göra bättre. Som du gör nu läser du ner hela sidan/filen till din server, och det kan ju ta en del bandbredd om det handlar om stora filer. (Även om webbhotell inte brukar hålla ordning på bandbredden "åt det här hållet".) Prova detta:
<?
function urlfilesize($site){
$fp = fsockopen ($site, 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, "GET / HTTP/1.0\r\nHost: ".$site."\r\n\r\n");
while (!feof($fp)) {
$line=fgets ($fp,128);
if(strlen(stristr($line,"content-length"))>0){
$size=preg_replace("/content-length: (.*)/i","\\1",$line);
return $size;
}
}
fclose ($fp);
return 0;
}
}
// test
$site="www.webforum.nu";
echo urlfilesize($site);
?>
Är inte 101% säker på att en server måste skicka "Content-Length" men misstänker det.
/nicclas - https://www.frisim.com
AsterixMedlem sedan dec. 1999483 inlägg Tackar funkar utmärkt. Använder den förresten till min sida: SITESIZE