Skocz do zawartości

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


zmechu
 Udostępnij

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 😉

Odnośnik do komentarza
Udostępnij na innych stronach

  • Global Administrator

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

Odnośnik do komentarza
Udostępnij na innych stronach

  • Dave zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

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

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

×
×
  • Dodaj nową pozycję...

🍪 Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.