Autor | Zpráva | ||
---|---|---|---|
Mitch Profil * |
#1 · Zasláno: 20. 8. 2006, 13:12:31
Zdravím,
mám jeden web na PIPNI a oni snížili memory_limit na 6M, takže když odesílám větší soubory pomocí PHP a readfile tak to pošle akorát hlášku Allowed memory exhausted. Tak sem to upravil aby se to posílalo po částech header("Content-Description: File Transfer"); header("Content-Type: application/force-download"); header("Content-Disposition: attachment; filename=\"$file\""); $fd = fopen("store/".$path.$file,'rb'); if ($fd) { while(!feof($fd)) {print fread($fd, 4096);} fclose($fd); } což všude funguje ale ne na jejich serveru. IE napíše stránku nelze zobrazit a FF s Operou neukážou vůbec nic - jako by server nic neposlal. Tak jsem jim napsal a oni mi odpověděli cituji: "musite si jeste vypnout buffering pro PHP a data rovnou fyzicky odeslat." A i když jsem prolez net tak jsem nepochopil co přesně mám udělat. Nemá někdo řešení? Díky Mitch |
||
DJ Miky Profil |
#2 · Zasláno: 20. 8. 2006, 13:16:11
Podle toho, co napsali, zřejmě máš nastavený output buffering v PHP. Pokud ano, tak dej nakonec:
ob_end_flush(); |
||
Mitch Profil * |
#3 · Zasláno: 20. 8. 2006, 13:59:09
$fd = fopen("store/".$path.$file,'rb');
if ($fd) { while(!feof($fd)) {print fread($fd, 4096);} fclose($fd); ob_end_flush(); } Bohužel to samé, zapoměl jsem poznamenat že ta chyba se projeví u velkého souboru -14,2 MB. Další největší co tam mám je 8MB a s tím problémy nejsou. |
||
24k Profil * |
#4 · Zasláno: 20. 8. 2006, 17:37:02
S tím jsem taky bojoval. U velkych souboru to probehne memory exhausted ;/. Tak to zabal do zipu a posilej to klasicky pres header location. (tedy u tech nad 8 MB)
|
||
Mitch Profil * |
#5 · Zasláno: 20. 8. 2006, 20:03:16
Memory_limit sem si nechal zvednout na 32M tak jsem zase začal používat readfile ale to by bylo moc jednoduché kdyby to fungovalo jako dřív. Prostě to udělá u toho 14MB souboru to samé jako u načítání po částech, to nechálpu...
|
||
Sunny Profil * |
#6 · Zasláno: 21. 8. 2006, 00:15:59
Problém je v tom, že i když vypisuješ data postupně tak se shromažďují v output bufferu... viz output_buffering na php.net. Zkus tohle:
Je to sice až příliž překombinovaný, ale tvůj ůčel to splní! |
||
Mitch Profil * |
#7 · Zasláno: 22. 8. 2006, 01:28:56
2Sunny: Díky, po menší úpravě už to funguje.
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0