Skocz do zawartości


 

Zdjęcie

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

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

  • Proszę się zalogować aby odpowiedzieć
5 odpowiedzi na ten temat

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

#1 Rysiu512

Rysiu512

    Czasami na forum

  • Użytkownicy
  • 42 postów
  • Imię:Lukasz

Napisany 03 wrzesień 2017 - 16:11

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ć?


  • 0

#2 Suspect121

Suspect121

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 199 postów
  • Imię:Mateusz

Napisany 03 wrzesień 2017 - 16:22

https://api.cakephp....t.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.


Edytowany przez Suspect121, 03 wrzesień 2017 - 16:24.

  • 0

#3 Rysiu512

Rysiu512

    Czasami na forum

  • Użytkownicy
  • 42 postów
  • Imię:Lukasz

Napisany 03 wrzesień 2017 - 16:38

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()?


Edytowany przez Rysiu512, 03 wrzesień 2017 - 16:39.

  • 0

#4 Suspect121

Suspect121

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 199 postów
  • Imię:Mateusz

Napisany 03 wrzesień 2017 - 18:11

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.


  • 0

#5 systemy.internetowe

systemy.internetowe

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 140 postów
  • Firma:HTTP 200 usługi IT - Dariusz Janicki
  • Imię:Dariusz
  • Nazwisko:Janicki

Napisany 03 wrzesień 2017 - 18:27

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
 


Edytowany przez systemy.internetowe, 03 wrzesień 2017 - 18:29.

  • 0

#6 l3szcz

l3szcz

    AntyHejt v1.0

  • Firma Bronze
  • PipPipPipPipPipPipPipPip
  • 1071 postów
  • Skąd:pomorskie
  • Firma:Szukam
  • Imię:Tomasz
  • Nazwisko:Leszczyński

Napisany 04 wrzesień 2017 - 04:06

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.directa...item.php?id=293
który jest naprawdę bardzo pomocny w rozwiązywaniu problemów.


Edytowany przez l3szcz, 04 wrzesień 2017 - 04:20.

  • 0





0 użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników