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
Annonceindlæg tema
07. september 2008 - 00:59
#1
Du læser hele filen ind i RAM - der er sikkert en grænse du dermed overskrider.
07. september 2008 - 01:22
#2
Lukker du lige det andet identiske spørgsmål...
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
Vi tilbyder markedets bedste kurser inden for webudvikling