ugrás a tartalomhoz

Letöltő script másképpen

bagoly000 · 2008. Már. 1. (Szo), 15.43
Sziasztok!

Csináltam egy fájl letöltő php scriptet.

<?php

//Kezdeti értékek
$fajl = "egy_fajl.mp3";

//Headerek
header("Content-Type: application/octet-stream");
header("Last-Modified: ".date("D, j M Y G:i:s T", filemtime($fajl)));
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=\"".$fajlnev."\"");
header("Accept-Ranges: bytes");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: ".filesize($fajl));
header("Content-Transfer-Encoding: binary");

//Fájl beolvasása
$letoltes = fopen($fajl, "r");
if(!(!$letoltes)){
   @set_time_limit(0); //Idő limit kikapcs
   while(!feof($letoltes))
   {
      echo fread($letoltes, 1048576);
      ob_flush(); //Buffer ürítése
   }
   fclose( $letoltes ); //Fájl bezárása
}

?>
Nagyjából így néz ki.
Gépemen tesztelve tökéletesen megy, mert a set_time_limit() engedélyezett funkció. De ha ingyenes tárhelyről akarok letölteni egy fájlt, ami 30 másodpercen belül nem ér át, akkor annak a vége lemarad.

Az lenne a lényeg, hogy ha böngészővel rámegyek egy linkre, akkor a fájl mentése legyen elérhető. Nem tud-e valaki esetleg erre egy megoldást? Akár böngészőoldali javascripttel, vagy hasonló?

(Próbálgattam a mime/types -t módosítani, de ingyenes tárhelyen nem lehetett)

Előre is köszönöm.
 
1

Nem tudsz mit csinálni

janoszen · 2008. Már. 1. (Szo), 18.41
Nem tudsz vele mit csinálni, 30 sec a limit. :)

Egyébként az ob_flush milyen célt szeretne szolgálni ha még el sem indítottad az output bufferinget? Neked nem inkább a flush() kéne?
2

őőő

bagoly000 · 2008. Már. 1. (Szo), 19.37
Nem igazán tudom milyen célt szolgál az ob_flush(), valami buffert űrít, de így sem volt vele probléma.
Nem ismer valaki valami javascriptet, vagy akármit, amivel pl "http:/weblap.hu/fajl.mp3" -hoz röktön mentést ajánl fel?
3

JS?

janoszen · 2008. Már. 2. (V), 08.21
Minek neked JS? Azt hiszem, kicsit kavarod a technológiákat. Rálinkelsz a fájlra és csókolom. Ha pedig menteni óhajtod, akkor a header kiküldést nem úszod meg. Csomagold be ZIP-be, vagy amibe jól esik és akkor nincs ilyen gondod.
5

asd

bagoly000 · 2008. Már. 2. (V), 13.05
kösz a tippet, csak nekem egy képgaléria miatt kellet volna. egy képet meg is tudjon nézni, és kattintással le is tudja menteni, illetve zenefájlokhoz.
De mostmár tudom, hogy ez ingyenes tárhelyre nem megoldható. Köszönöm a válaszokat.
4

Ingyenes tárhely

vbence · 2008. Már. 2. (V), 11.11
Ha engedélyezve lenne a htaccess, akkor a ForceType Apache direktívát is használhatnád...
6

readfile

QXY · 2008. Már. 3. (H), 03.18
Egy próbát szerintem megér, hogy nem blokkonként olvasod ciklusban, hanem egyben a readfile()-val.
7

nem jó

bagoly000 · 2008. Már. 3. (H), 22.03
Az sajnos nem jó, a readfile -nál van egy maximális fájlméret, azt hiszem 2 MB, és az időlimit ugyanúgy vonatkozik rá.
8

max_execution....

Ronyn · 2008. Már. 4. (K), 14.15
Nem igazán értem a dolgot-tudtommal a futási idöbe csak! a script futása számit bele,nem az hogy a kliens mennyi idö alatt tölti le a fájlt...
Egy forum stb script is lefut tizedmásodpercek alatt,független attol hogy modemmel esetleg fél perc alatt töltödik le az oldal..
Márpedig a php néhány másodperc alatt kimenetre küldi az adott xx megás fájlt,és ezzel véget is ér a futása,a többi a szerver-kliens közt zajlik...
Legrosszabb esetben pufferelni kell,amivel ugyanugy egyszerre megy ki,mint a readfile esetén...
Persze itt meg a memory_limit lehet akadály...
9

Puffer

vbence · 2008. Már. 4. (K), 15.18
Több megányi adatot nem fog pufferelni a PHP. Nincs is hol...
10

Mint irtam...

Ronyn · 2008. Már. 4. (K), 16.48
...a pufferelés csak egy lehetöség,másrészt az hogy mennyit tud pufferelni,az a memory_limit-töl függ,amit szntén emlitettem,viszont mondjuk ha van egy 32 megás limitje(ingyenes tárhelyen mondjuk nem hiszem,hanem csak az a 2 mega engedélyezett,ami a readfile-nél jelentkezik),abba belefér egy mp3 vagy hasonlo...
De ez mindegy is,itt most arrol beszélek hogy miért is függ a script futási ideje(set_time_limit()),a letöltési sebességtöl?
11

letöltési sebesség nem függ

bagoly000 · 2008. Már. 7. (P), 00.54
A letöltési sebesség nem függ a set_tile_limit -től, ha egy fájlt 30 másodpercen belül nem sikerül letölteni, akkor lemarad a vége, használhatatlan lesz.