Skocz do zawartości
Szukaj w
  • Więcej opcji...
Znajdź wyniki, które zawierają...
Szukaj wyników w...
zmechu

[Problem Rozwiązany]ts3admin.class - pobranie listy wszystkich użytkowników TSa

Rekomendowane odpowiedzi

Witajcie!

Sprawa niby prosta, o ile zna się php i ts3admin.class 🙂 Chciałbym wyciągnąć z serwera TS3 listę WSZYSTKICH użytkowników. Mam nawet gotowca:

require("../lib/ts3admin.class.php");
$tsAdmin = new ts3admin($ts3_ip, $ts3_queryport);

if($tsAdmin->getElement('success', $tsAdmin->connect())) {
	$tsAdmin->login($ts3_user, $ts3_pass);
	$tsAdmin->selectServer($ts3_port);
	$clients = $tsAdmin->clientList();
	
	echo count($clients['data']) . ' clients on selected server';
	
	foreach($clients['data'] as $client) {
		echo $client['client_nickname'];	
	}
}

z tym tylko że ten kod wyciąga tylko listę klientów będących on-line, a nie wszystkich. Znalazłem funkcję clientDbList() która powinna zrobić to co potrzebuję ale kod:

$clientsdb = $tsAdmin->clientDbList($start = 0, $duration = 100, $count = true);

                $DBClientEntriescount = $tsAdmin->clientDbList();
                foreach ($DBClientEntriescount['data'] as $clientindb) {
                    $DBClientEntries = $clientindb['count'];
                }
echo $DBClientEntries;

coś nie chce zaskoczyć pokroju "Error in clientDbList() " lub "Message: convert error" czy innymi wszystkomówiącymi 🙂

 

Co robię źle?

 

Pozdrawiam!


ts.virtual-gaming.eu - nie polecam, 2/10 😉

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Prawie dobrze z wyjątkiem kilku błędów (tych które sam dopisałeś oczywiście) . Problem polega na tym, że na serwerze możesz mieć bardzo dużą liczbę klientów, dlatego też patrz zawsze dokładną składnię polecenia:
 

Cytat

/**
  * clientDbList
  * 
  * Displays a list of client identities known by the server including their database ID, last nickname, etc.
  *
  * <b>Possible params:</b> [start={offset}] [duration={limit}] [-count]
  *
  * <b>Output:</b>
  * <pre>
  * Array
  * {
  *  [count] => 1 (if count parameter is set)
  *  [cldbid] => 2
  *  [client_unique_identifier] => nUixbsq/XakrrmbqU8O30R/D8Gc=
  *  [client_nickname] => par0noid
  *  [client_created] => 1361027850
  *  [client_lastconnected] => 1361027850
  *  [client_totalconnections] => 1
  *  [client_description] => 
  *  [client_lastip] => 127.0.0.1
  * }
  * </pre>
  *
  * @author     Stefan Zehnpfennig
  * @param        integer    $start        offset [optional] (Default: 0)
  * @param        integer    $duration    limit [optional] (Default: -1)
  * @param        boolean    $count        set true to add -count param [optional]
  * @return     array clientdblist
  */

 

Tak, więc musisz podać 2 parametry do tego.

  1. $start - od którego klienta ma zacząć odczytywać (np. zacznij od początku, czyli od 0)
  2. $duration - ilu klientów ma odczytać (np. pokaż mi 10 klientów)
  3. $count - wartość true (prawda/tak) albo false (fałsz/nie)  - łączna ilość klientów (przydatne przy iteracjach)

Tak więc jeśli chcesz odczytać 20 pierwszych klientów to wpisujesz  :

clientDbList(0,20);

Jeśli natomiast chcesz odczytać kolejnych, to 

clientDbList(20,20);

 

Można oczywiście to ładnie zapętlić w while, bądź for (podstawy PHP), dzięki czemu wyjdzie nam coś takiego:

for ($x = 0; $x <= 10; $x++) {
 clientDbList($x*20, 20);
}

Spowoduje to wyświetlenie 10*20 = 200 użytkowników.

 

Dodatkowo ułatwiającą bardzo sprawę jest wcześniej wspomniany $count, który pokazuje ilu użytkowników mamy łącznie. Tak więc wystarczy coś w stylu

 

$clientCount = clientDbList(0,1, true)['data'][0]['count'];
for ($x = 0; $x <= $clientCount; $x++) {
clientDbList($x, 1);
}

Warto to jakoś jeszcze zoptymalizować sobie, pod tym względem, aby nie pobierało pojedynczo rekordów, tylko np. po 20, czyli 

$clientCount = clientDbList(0,1, true)['data'][0]['count'];
for ($x = 0; $x <= $clientCount; $x=$x+20) {
print_r(clientDbList($x, 20)['data']);
}

Coś mniej więcej w tym stylu. Przyznam się, że piszę to dosłownie z pamięci, bo mi @Paweł MF zawrócił głowę (możesz mu podziękować) i mogłem porobić błędy

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Problem został rozwiązany.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...