07. september 2008 - 00:13 Der er 5 kommentarer og
1 løsning

Download af MEGA stor fil

Hej

Jeg har en selvudpakkende ZIP fil, som jeg ønsker brugere skal kunne downloade. Den er stor ( ca. 8.5 Mbyte).

Fil001 ser sådan ud: ('dwntest.php')


<?php
if(isset($_GET["file"]))
{
    $path = "";
    header("Content-Disposition: attachment; filename=". $_GET["file"] ."");
    header("Content-Type: application/octet-stream");
    header("Content-Length: ".filesize($path.$_GET["file"]));
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
    $fp = fopen($path.$_GET["file"],"r");
    print fread( $fp, filesize($path.$_GET["file"]) );
    fclose($fp);
    exit();
}
?>

fil002 ser sådan ud:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
<a href='dwntest.php?file=akj.zip'>Download AKJ</A>
</BODY>
</HTML>

(har prøvet <a href='akj.zip'>Download AKJ</A> ..)

Det virkede heller ikke .... !


Det virker og dog ikke:

Jeg får download dialogboksen og siger SAVE men får ca. 2,2 Kbyte overført og så er det bare pangggg !!! - og lukket  overførsel ...

Hvad er det der går galt // hvad gør JEG galt...

Kan nogen give mig et godt råd ?

(Kan det være noget med en time-out ??? )


Hilsen

Kristian
Avatar billede erikjacobsen Ekspert
07. september 2008 - 00:59 #1
Du læser hele filen ind i RAM - der er sikkert en grænse du dermed overskrider.
Avatar billede hmortensen Nybegynder
07. september 2008 - 01:22 #2
Lukker du lige det andet identiske spørgsmål...
Avatar billede coderdk Praktikant
07. september 2008 - 02:53 #3
erstat

    $fp = fopen($path.$_GET["file"],"r");
    print fread( $fp, filesize($path.$_GET["file"]) );
    fclose($fp);

med

    readfile( $path . basename( $_GET["file"] ) );
07. september 2008 - 10:36 #4
Svar til Coderk:

Den nye kode:

  <?php
if(isset($_GET["file"]))
{
    $path = "";
    header("Content-Disposition: attachment; filename=". $_GET["file"] ."");
    header("Content-Type: application/octet-stream");
    header("Content-Length: ".filesize($path.$_GET["file"]));
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
    readfile( $path . basename( $_GET["file"] ) );
    exit();
}
?>

Som du ser er næstsidste linie skiftet ud..

Igen samme problem:  Ca. 2,2 Kb overførsel og panggg.. afsluttes.

Kan det være det som Erikjacobsen antyder:  RAM overskridelse.

I så fald kunne en sløjfe måske løse problemet..

PSEUDOKODE:  (delphi syntaks:)

while NOT Eof($file)
  begin
      readblock(file,data);          // læs en datablok
      udsend(data);                  // send tilæ bruger
  end;
closefile(file);
exit;

hvor blokstørrelsen er på ca. 2 K

Hilsen
Kristian
07. september 2008 - 11:56 #5
Rettede koden til følgende:

<?php
if(isset($_GET["file"]))
{
    $path = "";
    $fp = fopen($_GET["file"],"r");
    header("Content-Disposition: attachment; filename=". $_GET["file"] ."");
    header("Content-Type: application/octet-stream");
    header("Content-Length: ".filesize($path.$_GET["file"]));
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    header("Content-Transfer-Encoding: binary\n");
    header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");

    ob_flush();
    flush();
   
    while(!feof($fp))
    {
        $buffer = fread($fp, 2048);
        print $buffer;
    }
    fclose ($fp);
    exit();
}
?>


og så 'VIOLA'  virkede det alt sammen ..

Stor lykke i de små hjem.

fik også indlagt headeren: ' header("Content-Transfer-Encoding: binary\n");  '

Hilsen

Kristian
16. april 2010 - 11:28 #6
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester