Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Stiahnutie súboru cez PHP skript

Zdravíím.

Potrebujem cez PHP skript stiahnut subor. Mam to riesene takto:

header("Content-Disposition: attachment; filename=NAZOVSUBORU");
header("Content-length: VELKOST");
header("Content-type: application/octet-stream");
print $fp = readfile("SUBOR", "rb");

Funguje to relativne dobre, az na to, ze to dokaze stiahnut len male subory ... priblizne do 1 MB. Vacsie subory stiahne s velkostou 0b.

Tak sa chcem spytat ci sa da niekde nastavit aby to zvladalo aj vacsie subory, alebo ako by sa dal tento problem vyriesit?

vopred dakujem.

Předmět Autor Datum
neviem nie som PHP expert (asi mas na php serveri nastaveny nejaky buffer na 1MB), ale skus to urobi…
MM.. 21.11.2007 20:10
MM..
No skusal som to fpassthru a aj fread, ale stale rovnako. ale zistil som ze, 30 MB subor to stiahne… poslední
mrazik 21.11.2007 21:39
mrazik

neviem nie som PHP expert (asi mas na php serveri nastaveny nejaky buffer na 1MB), ale skus to urobit bez toho print napr. funkciou fpassthru (predtym treba pouzit fopen a potom by bolo dobre aj fclose)
function.fpassthru.php
- mas tam aj priklad, ale chyba tam fclose, za fpassthru by som dal aj fclose($fp);

P.S. inac nemas ten druhy parameter v tom readfile blbo?
function.readfile.php
Nema to sice asi s problemom nic spolocne, len nejak nerozumiem tomu parametru ked v popise readfile je nieco uplne ine (ten parameter pasuje pre fopen, ale nie pre readfile), a celkovo sa mi zda ze sa to moze snazit tak ako to mas robit tam ascii konverzie prip. ukoncit sa pri najdeni bajtu s hodnotou 0, apod., radsej by som readfile ani print vobec nepouzil.

No skusal som to fpassthru a aj fread, ale stale rovnako. ale zistil som ze, 30 MB subor to stiahne ale 70 MB nie.
Momentalne tam mam nieco taketo:

$fp = fopen("CESTAKSUBORU, 'rb');
						
header("Cache-Control: ");
header("Pragma: ");
header("Content-Disposition: attachment; filename=NAZOV");
header("Content-length: VELKOST");
header("Content-type: application/octet-stream");
						
sleep(1);

session_write_close();
ob_flush();
flush();
					   
while(!feof($fp)) {
						
$buffer = fread($fp, 32 * 1024);
print $buffer;
}
						
fclose ($fp);
exit;

Zpět do poradny Odpovědět na původní otázku Nahoru