Download fil script, "låser" faneblad mens download er igang.

Tags:    php headers

Hej, jeg har lavet et script så admins på siden kan download filer fra serveren, virker også fint.

problemet er man kan ikke navigere rundt på siden mens den downloader, ville gerne have sådan man kunne downloade måske 4filer på samme tid.

så man skal vente på første fil er færdig før man kan klikke på næste link.


Fold kodeboks ind/udPHP kode 


er der en anden og smarter måde at lave det på?

ps. det er filer på over 40mb.



10 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Ved ikke om det er dette problem du støder mod: http://www.openajax.org/runtime/wiki/The_Two_HTTP_Connection_Limit_Issue

Har du prøvet at bruge flere forskellige typer browsere? Altså nr.1 browser til første download, nr.2 browser til andet download, og nr. 3 browser til tredje download?



Link til download scriptet, og få det til at åbne et nyt vindue? Hvorfor gøre det mere avanceret?



Link til download scriptet, og få det til at åbne et nyt vindue? Hvorfor gøre det mere avanceret?


Virker ikke, så står det nye faneblad og venter på at den anden download er færdig.



Jeg kunne forestille mig at problemet ligger i at fpassthru åbner en forbindelse til filen og serverer den for den besøgende, bid for bid, efterhånden som den bliver sendt.

Du kan forsøge dig med at bruge readfile() istedet for; den dumper bare indholdet af filen. Hvis den gør, så kan du køre flere parallelle downloads, men tilgengæld vil det bruge en del mere memory på serveren.

Fold kodeboks ind/udPHP kode 


Jeg har ikke nogen erfaringer med den slags, men jeg håber da det kan hjælpe dig lidt på vej.



Jeg kunne forestille mig at problemet ligger i at fpassthru åbner en forbindelse til filen og serverer den for den besøgende, bid for bid, efterhånden som den bliver sendt.

Du kan forsøge dig med at bruge readfile() istedet for; den dumper bare indholdet af filen. Hvis den gør, så kan du køre flere parallelle downloads, men tilgengæld vil det bruge en del mere memory på serveren.

Fold kodeboks ind/udPHP kode 


Jeg har ikke nogen erfaringer med den slags, men jeg håber da det kan hjælpe dig lidt på vej.



Jeg startet med at bruge readfile, kan ikke huske hvorfor jeg stoppet med det, tror nok det var noget med den ikke var så glad tor store filer.

men har lige testet med den igen og det gør ingen forskel, om det er fpassthru eller fileread, den venter stadig på den første er færdig.





Jeg må blankt indrømme at jeg ikke helt ved hvordan du skal løse den her. Problemet er, at en hel php tråd blokeres hver gang du læser fra filsystemet.

Du kan måske bruge ob_flush() til at tvinge den til at tømme bufferen...?



ja jeg er også løbet lidt tør for idéer (derfor jeg lavet denne tråd)

men tak for dine bud :)

vil prøve at kigge på nogen output buffers.



Ved ikke om det er dette problem du støder mod: http://www.openajax.org/runtime/wiki/The_Two_HTTP_Connection_Limit_Issue

Har du prøvet at bruge flere forskellige typer browsere? Altså nr.1 browser til første download, nr.2 browser til andet download, og nr. 3 browser til tredje download?


kan godt hente en fil i chrome og en anden fil i firefox på samme tid



Ja det havde jeg så glemt. D'oh.

Princippet kender vi fra optimering af hjemmesider - et af de vigtigste parametre er at minimere antallet af HTTP request - netop pga det fænomen Michael omtaler.

Et simpelt lille hack er at hoste dit download content på et andet subdomæne. Evt kan du bruge en wildcard A-record i din DNS til at lave en række dynamiske subdomæner.

*.eksempel.com peger på samme mappe på din server. Alle andre end www viser en blank side (for at undgå duplicate content seo-straf)

hits på downloadX.eksempel.com kalder dit download script.

Så kan du variere hostnamet på dine downloads, og derved komme uden om begrænsningen.
download1.eksempel.com?file=en_stor_fil.zip
download2.eksempel.com?file=en_anden_stor_fil.zip
...
downloadN.eksempel.com?file=en_stor_fil.zip

wildcard A-recorden er jeg lidt i tvivl om virker - men samme idé virker ihvert fald med CNAME records - og derfor kan jeg ikke se hvorfor det skulle være anerledes.

En uddybende artikel - dog med et andet udgangspunkt, men samme problem og CNAME løsning: http://www.ajaxperformance.com/2006/12/18/circumventing-browser-connection-limits-for-fun-and-profit/



vil lige prøve at kigge på det, venter tilbage sener, det står ikke lige som top prioritet pt.



t