Rysiu512 0 Zgłoś post Napisano Wrzesień 3, 2017 Mam pytanie. Korzystam w PHP z czegoś następującego: ... $sock = new HTTPSocket; $sock->connect($HOST, $PORT); $sock->set_login($USER, $PASS); $sock->set_method('POST'); $sock->query() Właśnie sobie jednak uświadomiłem, że wielkimi krzakami skończy się dla mnie dany skrypt gdy padnie z jakichś niezależnych powodów DirectAdmin (lub kompletnie serwer na którym się znajduje). W jaki sposób można wykryć, że dane query się nie wykonało. Znaczy się, jestem w 100% pewny, że query jest dobre i łączę się z dobrym serwerem. Nie mam jednak pewności jednak czy serwer jest obecnie "up". Jak można to rozwiązać? Udostępnij ten post Link to postu Udostępnij na innych stronach
Suspect121 53 Zgłoś post Napisano Wrzesień 3, 2017 (edytowany) https://api.cakephp.org/2.4/class-HttpSocket.html#_connect Używasz chyba podobnej klasy ale dla pewności zapoznaj się z dokumentacją tej swojej. Jak możesz zauważyć metoda connect w przypadku błędu może zwrócić wartość false lub wyjątek. Wystarczy umieścić ten kod w bloku try-catch w celu obsługi wyjątku a dodatkowo sprawdzić czy metoda connect zwróciła true i ewentualnie odpowiednio zareagować na wartość false. Edytowano Wrzesień 3, 2017 przez Suspect121 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Rysiu512 0 Zgłoś post Napisano Wrzesień 3, 2017 (edytowany) Dzięki. Tak zgadza się. Ale co jeżeli wykonam connect() -> będzie ok. A serwer wysypie się dopiero np. na 10 query()? Sam connect() to już coś ale nie załatwia mi on chyba sprawy definitywnie. Chyba, że łączyć się przy każdym query()? Edytowano Wrzesień 3, 2017 przez Rysiu512 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Suspect121 53 Zgłoś post Napisano Wrzesień 3, 2017 Z całą pewnością metoda query też zwraca wartość która pozwoli określić jej status wykonania. Będzie to tak samo wartość typu boolean lub wyjątek. Udostępnij ten post Link to postu Udostępnij na innych stronach
systemy.internetowe 7 Zgłoś post Napisano Wrzesień 3, 2017 (edytowany) Zobacz jakie jest API tej klasy z której korzystasz, bo nie jest to cześć PHP. Zobacz czy zrzuca wyjątki jeśli tak otocz blokiem try catch.Poza tym do obsługi POST możesz używać cURL'a. W jaki sposób można wykryć, że dane query się nie wykonało. Znaczy się, jestem w 100% pewny, że query jest dobre i łączę się z dobrym serwerem. Nie mam jednak pewności jednak czy serwer jest obecnie "up". Jak można to rozwiązać? Jak chodzi o sockety, które to używasz w sumie zupełnie niepotrzebnie, bo żądania GET / POST / PUT / HEAD możesz realizować za pomocą cRLA. W celu realizacji powinieneś: 1) ustawić parametry połączenia jak chodzi o time out; 2) Nawiązać połączenie jeśli zwraca false to obsługujesz jako błąd; 3) Zapisać do gniazda co w tym wypadku realizuje ta metoda query pewnie też odczytuje. I dla żądań HTTP odczytać status odpowiedzi te 200, 404, 500 itd ... - i zamknąć gniazdo. 4) Zobaczyć czy odpowiedz zawiera to czego oczekujesz jakiś charakterystyczny ciąg znaków. Ale jak już pisałem do ządań HTTP lepsza jest biblioteka CURL która realizuje te główne punktyhttp://php.net/manual/en/book.curl.php Edytowano Wrzesień 3, 2017 przez systemy.internetowe (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Gość l3szcz Zgłoś post Napisano Wrzesień 4, 2017 (edytowany) Garść porad ode mnie:- Directadmin niezależnie od przyczyny błędu zawsze zwraca NULL (przynajmniej u mnie ). Warto debugować każdą zmienną jaką odpalasz podczas wywołania socketu (np. przez var_dump czy echo).- Bardzo ważne jest też to byś zaznaczył w ustawieniach administratora traktowanie localhosta jako wyjątku bo inaczej przy wielu próbach połączenia z błednym hasłem będzie Ci banować IP localhost. - BARDZO WAŻNE: musisz pamiętać, że w przypadku tej kobyły jaką jest Directadmin rozwiązanie problemów jest 10 razy cięższe niż z innymi systemami (tak to jest jak 10 pijanych programistów po afterku zaczyna programować) ALE jest coś takiego jak tryb debug Directadmina: https://help.directadmin.com/item.php?id=293który jest naprawdę bardzo pomocny w rozwiązywaniu problemów. Edytowano Wrzesień 4, 2017 przez l3szcz (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach