zmechu 78 Posted January 15, 2020 Report Share Posted January 15, 2020 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 :-) Link to post Share on other sites
Lolek 491 Posted January 17, 2020 Report Share Posted January 17, 2020 (edited) Funkcja czasem nie nazywa się clientDBList w ts3admin.class? Jeżeli chcesz zobaczyć całą listę, to musisz zobaczyć jaki jest ['count'] i pózniej podzielić to na 200, bo tyle maksymalnie Ci clientDBList zwraca. $entireClientDBList = []; $count = $ts->getElement('data', $ts->clientDBList(0, 1, $count = true)); // pierw bierzesz sobię count ile masz użytkowników $countAll = ceil($count[0]['count']/200); // dzielisz sobię count na 200 bo tyle maksymalnie ci może każda lista zwrócić $i = 1; $min = 0; echo "Start: ".date("H:i:s", time()).PHP_EOL; do{ $max = $i * 200; $data = $ts->getElement('data', $ts->clientDbList($min, $max, $count = false)); $entireClientDBList = array_merge_recursive($entireClientDBList, $data); $min = $max + 1; $i++; }while($i <= $countAll); echo "Stop: ".date("H:i:s", time()).PHP_EOL; echo count($entireClientDBList); Na ok. 39k użytkowników w bazie, zajmuje ta pętla ok. 10sekund :v Start: 19:27:26 Stop: 19:27:36 38905 Być może jest lepszy sposób ale nie chciało mi się testować. Edited January 17, 2020 by Lolek zmechu, Pabloo and kingorbit 1 2 Link to post Share on other sites
zmechu 78 Posted January 17, 2020 Author Report Share Posted January 17, 2020 Bingo, działa świetnie! Dzięki! ts.virtual-gaming.eu - nie polecam, 2/10 :-) Link to post Share on other sites
WebX 34 Posted January 19, 2020 Report Share Posted January 19, 2020 Link to post Share on other sites
Recommended Posts