nginx + php5 i wielki problem
astar. - 16-09-2009 23:24
nginx + php5 i wielki problem
zainstalowałem ngnix + php fcgi i pojawia sie problem....
prosty kod php:
Kod:
$fp = fopen($file, 'rb');
fseek($fp, $seek_start);
while(!feof($fp)){
set_time_limit(0);
$l = fread($fp, 1024*100);
echo $l;
}
kod odczytuje plik z dysku i wysyła partiami do przeglądarki, wszystko działa, tylko, ze na wspomnianym serwerze nginx + php5 fcgi pętla while kończy swoje działanie w ciagu paru sekund, dużo wcześniej niż do przeglądarki klienta dotrą wszystkie dane!! Natomiast na serwerze apache2 + mod php5 pętla po poleceniu echo się zatrzymuje i czeka aż klient odbierze całość danych.
no i nareszcie pytanie:)
Dlaczego tak się dzieje, czy jest to spowodowane architekturą poszczególnych serwerów ?? ogólnie potrzebuje, zrobić funkcjonalność na nginx taką jaka jest pod apache2 czy jest to możliwe ??
dodam jeszcze ze plik php.ini jest ten sam dla php apache i php cgi
Cuddles - 17-09-2009 07:17
Czy aby na pewno wysyła to do przeglądarki po kawałku?
http://pl.php.net/flush
astar. - 17-09-2009 12:34
sprawdziłem dokładnie, jedno wywołanie pętli pod apche2 powoduje przesłanie do przeglądarki 102400 bajtów, dokładnie tak jak być powinno, natomiast pod nginx rozmiar tego "kawałka" to 102120...
komar07 - 17-09-2009 15:22
spróbuj za echo dać ob_flush(); flush();
i wywal set_time_limit poza pętle po co ci ono tam?
astar. - 17-09-2009 16:17
Cytat:
spróbuj za echo dać ob_flush(); flush();
i wywal set_time_limit poza pętle po co ci ono tam?
cenna uwaga z tym set_time_limit :), zrobiłem jak radzisz niestety w dalszym ciągu całe while wykonuje się w ciągu sekundy, dodam że plik jest spory i pobieram go jakieś 10 min
zanotowane.pldoc.pisz.plpdf.pisz.plkonstruktor.keep.pl