Filesize på remote-fil

PHP

2 svar · 205 visningar · startad av Asterix

Medlem sedan dec. 1999483 inlägg
Trådstart#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??

Medlem 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

Medlem sedan dec. 1999483 inlägg
#3

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

261 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)