![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 22.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam
mam zdefiniowane kilka serwerów które pinguję i w pętli wywołuję wiele razy taki kod: w zmiennej $host mam adres serwera który będę pingował a w $httpReq jest to co do niego wysyłam. Pętla ma kilka tysięcy interacji i przy każdej iteracji mam zapytanie które mi zwiększa o 1 pewien rekord w bazie (to taki mój licznik pingnięć). No i bardzo często (średnio raz na 4 razy) w połowie pętli licznik zatrzymuje się i stoi w miejscu, choć w konsoli widzę że proces jest uruchomiony. Skrypt uruchamiałem albo z crona albo z konsoli bo wykonanie trwa kilka godzin więc jakbym go w przeglądarce uruchomił to raczej miałbym timeouta (IMG:style_emoticons/default/smile.gif) . Najgorsze jest to że w funkcji fsockopen mam timeout w ostatnim argumencie i nawet jak ustawię ten timeout na 1 sekundę to widzę po komunikatach że ostatni komunikat jest przed tą funkcją i w tym miejscu iteracja pętli się zawiesza. Podpowiedzcie co tu zrobić żeby zdefiniować jakiś działający timeout żeby w przypadku nie odpowiadającego serwera skrypt jechał dalej i nie zawieszał mi się tak jak teraz. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 9 Dołączył: 12.11.2005 Skąd: ze wnowu?! Ostrzeżenie: (0%) ![]() ![]() |
No wlasnie nie o to (IMG:style_emoticons/default/winksmiley.jpg) Teraz mozesz poczytac czym rozni sie while... od do...while (czyli tym, ze do... zrobi przynajmniej raz costam, sprawdzanie warunku petli wykonuje sie _PO_ wykonaniu petli)
A chodzi o to, ze fgets ma zabrac 127 bitow, ew linie ze znakiem jej konca lub napotkac koniec strumienia. Jesli trafisz na serwer, ktory nie zamyka socketa poprawnie to zawisniesz w tym miejscu, bo feof dalej zwraca false, z fgets nie ma juz nic do przeczytania. Zastosuj ten kod z safe_feof. To moze byc jakos tak (nie mam teraz czasu, zeby zobaczyc czy to bedzie poprawnie...):
A tak poza tym, to dlaczego uparles sie na socket? Chcesz zobaczyc czy dziala serwis, to zamiast robic to w ten sposob mozesz uzyc file_get_contents:
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 00:10 |