![]() |
![]() ![]() |
![]() |
![]()
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 ![]() 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: 278 Pomógł: 44 Dołączył: 17.02.2004 Skąd: Wieliczka Ostrzeżenie: (10%) ![]() ![]() |
-------------------- neverever
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 22.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
witam, wlepiłem funkcję stream_set_timeout (nie wiem czy w dobrym miejscu) i co kawałek kodu dodałem echo 1 2 3 4 5 6 żebym wiedział w którym momencie skrypt się zatrzymał. Cały ten kod który poniżej wklejam jest wywoływany w pętli wiele razy:
no i gdy skrypt się "zawiesił" zajrzałem do logów i na końcu logu było coś takiego: więc jak widać skrypt zawiesił się gdzieś pomiędzy echo 4 a echo 5, w tej pętli while... podpowiedzcie proszę - jak to poprawić? Ten post edytował marcinpl87 13.02.2010, 00:25:44 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 471 Pomógł: 89 Dołączył: 29.07.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
http://php.net/manual/en/function.feof.php
If a connection opened by fsockopen() wasn't closed by the server, feof() will hang. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 9 Dołączył: 12.11.2005 Skąd: ze wnowu?! Ostrzeżenie: (0%) ![]() ![]() |
Cytat Warning If a connection opened by fsockopen() wasn't closed by the server, feof() will hang. Zobacz do manuala feof, jest tam kod korego mozesz uzyc, aby rozwiazac problem. -------------------- Yes, sex is always the answer, it's never a question
Cos' the answers yes, oh the answers yes. Not just a suggestion, if you ask the question Then its always yes, yeah! |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 22.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
witam. rozumiem że chodziło o tą pętlę do...while
zmodyfikowałem więc mój kod, teraz wygląda tak: ale skrypt znowu zatrzymuje się po 1234 czyli przed do{} co robię źle? |
|
|
![]()
Post
#7
|
|
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
![]() 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:
-------------------- Yes, sex is always the answer, it's never a question
Cos' the answers yes, oh the answers yes. Not just a suggestion, if you ask the question Then its always yes, yeah! |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 278 Pomógł: 44 Dołączył: 17.02.2004 Skąd: Wieliczka Ostrzeżenie: (10%) ![]() ![]() |
witam, wlepiłem funkcję stream_set_timeout (nie wiem czy w dobrym miejscu) i co kawałek kodu dodałem echo 1 2 3 4 5 6 żebym wiedział w którym momencie skrypt się zatrzymał. Cały ten kod który poniżej wklejam jest wywoływany w pętli wiele razy: Najpierw wypadało trochę poczytać z podanego linka, no i warto by zerknąć w przykłady poniżej. Wiedział byś wtedy jak to stosować.
-------------------- neverever
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 11:27 |