webForumDet fria alternativet

Filesize på remote-fil

2 svar · 200 visningar · startad av Asterix

AsterixMedlem sedan dec. 1999483 inlägg
#1

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
#2

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
#3

Tackar funkar utmärkt. Använder den förresten till min sida: SITESIZE

136 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)