webForumDet fria alternativet

Filesize på remote-fil

PHP

2 svar · 200 visningar · startad av Asterix

Medlem sedan dec. 1999483 inlägg
Frågan#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

384 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
127 ms — deklarationer (db)
125 ms — hämta statistik (db)
129 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)