webForumDet fria alternativet

Webbläsaren hänger sig vid nedladdning från vår server

PHP

5 svar · 372 visningar · startad av aztek

Medlem sedan feb. 200277 inlägg
Frågan#1

Jag har ett "ladda ner" skript som gör så att man måste spara filen, alltså inte försöka öppna i browserfönstret. Problemt är att om jag börjar ladda ner en fil så hänger sig browsern. Kan inte byta sida eller något annat. Verkar som om servern tror att nedladdningen är browsern så att den uppkopplingen är upptagen. Hur kan man lösa detta?

Ni kan testa på http://217.215.27.149:8090/smuts/djsets.php och testa att ladda ner någon fil.

Nedan är skriptet jag använder:

<?php 
$result = mysql_query('SELECT * FROM djsets WHERE id = '.$id) or die (mysql_error()); 
   while ($row = mysql_fetch_array($result)) { 
      extract($row); 
      $filename = "/test/$row[4]"; 
   } 
mysql_close($connection_djsets); 

$shortname = basename($filename); 

if(file_exists($filename) && !eregi("p?html?", $filename) && !eregi("inc", $filename) && !eregi("php", $filename) && !eregi("log", $filename) && !eregi("php3?", $filename)){ 
   $size = filesize($filename); 
   header("Content-Type: application/download"); 
   header("Content-Length: $size"); 
   header("Content-Disposition: attachment; filename=$shortname"); 
   header("Content-Transfer-Encoding: binary"); 
   $fh = fopen("$filename", "rb"); 
   fpassthru($fh); 
   exit; 
?>
Medlem sedan juli 20039 inlägg
#2

Hmm..., det är kanske inte det som är problemet iofs, men det är väl åtminstone smidigare att använda readfile för att öppna filen och skicka data till browsern...

php.net skrev:

If you just want to dump the contents of a file to the output buffer, without first modifying it or seeking to a particular offset, you may want to use the readfile(), which saves you the fopen() call.

Medlem sedan feb. 200277 inlägg
#3

Hmm, där hängde jag inte riktigt med. Tanken bakom det jag gjort är att se till så att man måste spara filen, inte kunna öppna den i browsern.

Medlem sedan feb. 200277 inlägg
#4

Skulle man ersätta

$fh = fopen("$filename", "rb"); 
   fpassthru($fh);

med readfile() ?

Medlem sedan juli 20039 inlägg
#5

Jepp..., precis, det jag menade var alltså att man kunde byta ut dom två raderna mot bara:

readfile($filename);

men om det sen löser problemet är väl ganska tveksamt..., men det är iaf ett lite smidigare sätt att skriva på tycker jag... :)

Medlem sedan feb. 200277 inlägg
#6

Nope, löste inget. Funkade bra att skriva med readfile() med det blir samma fel fortfarande tyvärr. Det verkar som om IE fastnar en längre stund än t.ex Mozilla Firebird.

256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)