[php] ograniczenie wykonywania skryptu..

0

witam, mam prosty skrypcik ktory otwiera mi jakis zewnetrzny plik, po czym podaje mi go od siebie .. cos jakby proxy do pobierania konkretnego pliku:

header("Content-type:application/octet-stream");
header("Content-Length: ".$size);
header('Content-Disposition: attachment; filename='.$filename);
$zal=fopen($path, 'r');
for ($i=1; $i <= $size; $i++) {
	echo fread($zal, 1);
}
fclose($zal);

tylko ten skrypcik powoduje ze po 30 sekundach przerywa mi sie sciaganie, a do pobieranego pliku dokleja sie error php :/ jak mozna by to ominąc?? tylko zwiekszajac limit do powiedzmy 10 minut??

0

w pętli daj:

set_time_limit(30);

to będzie przedłużać limit o 30 sec po każdym odebranym bajcie ... i tak właśnie się zastanawiam czemu pobierasz po bajcie ? :|

0

jak bede pobierał po 100 to moge przeskoczyc freadem koniec pliku, a nie wiem co sie wtedy dzieje :P a to cos zlego??

0

a jest jeszcze taki myk ze ustawiam tego timeouta w pętli i mimo to po losowej liczbie czasu i tak mi przerywa skrypt, tyle ze juz bez bledu wykonania.. :/

0

EOF'a nie przeskoczysz, po prostu ostatni odczyt zwróci mniejszą ilość bajtów niż żądana (tyle ile było jeszcze do odczytania).
Lepiej zrobić pętlę:

while (!feof($f)) echo fread($f, 1024); // lub większy bufor.
0

ok, moze byc i tak.. ok.. a czy w przypadku pliku "na zewnatrz" poprawnie mi zadziala feof? bo filesize np nie chciało działac..
i jeszcze jeden problem: skrypt jest strasznie pamięciozerny.. da sie cos i z tym zrobic??

0

filesize używa stat'a, czyli działa tylko dla plików lokalnych. Dla plików zdalnych po feof zadziała, bo po prostu skończy się strumień. Żeby zmniejszyć użycie pamięci, rób flusha() po każdym / co kilka echo, żeby spowodować opróżnienie (wysłanie do użytkownika) bufora wyjścia.

0

ok, sprobuje :)

0

cos jest nie tak..
jak to mozliwe ze ten skrypt (bez tego flusha na razie) na zewnetrznym hoscie zjada mnostwo ramu (tak ze pobieranie zawsze zatrzymuje sie przy 50MB) - bo mi zablokowali konto, a u mnie w domu apache ani MB ramu wiecej nie zje ... za to uzywa 100% procesora..
czy podzielenie tego na wieksze kawalki spowoduje spadek zuzycia?

1 użytkowników online, w tym zalogowanych: 0, gości: 1