Skocz do zawartości
Rysiu512

$sock->query() - API od DirectAdmin'a - jak wykryć błąd?

Polecane posty

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

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 przez Suspect121 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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 przez Rysiu512 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

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 punkty
http://php.net/manual/en/book.curl.php

Edytowano przez systemy.internetowe (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość l3szcz

Garść porad ode mnie:
- Directadmin niezależnie od przyczyny błędu zawsze zwraca NULL (przynajmniej u mnie :D ). 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=293
który jest naprawdę bardzo pomocny w rozwiązywaniu problemów.

Edytowano przez l3szcz (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×