Мне нужна библиотека XMPP для PHP - PullRequest
0 голосов
/ 29 мая 2020

И я не могу использовать composer (сервер находится за брандмауэром, и PHP -download.com не работает)

В частности, мне нужно экспортировать список пользователей с их группы

Я пробовал https://code.google.com/archive/p/xmpphp/, но он несовместим с PHP 7

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Итак, вы не можете использовать composer на сервере. Хорошо, но почему вы не используете composer на своем компьютере, загрузите зависимости и загрузите папку vendor. Тогда у вас есть все, что вам нужно.

Composer загрузить все зависимости в папку vendor и сгенерировать несколько файлов автозагрузки. Когда вы загружаете проект отверстия, он должен работать.

0 голосов
/ 29 мая 2020
$server   = "SERVER NAME HERE";
$username = "USER NAME HERE";
$password = "PASSWORD HERE";
$resource = "globe";
$streamid = "";

function vardump($data, $title = false){
    if($title){
        echo '' . $title . '';
    }
    echo '';
    var_dump($data);
    echo '
'; } function open_connection ($ server) {$ connection = fsockopen ($ server, 5222, $ errno, $ errstr); if (! $ connection) {print "$ errstr ($ errno)
"; вернуть ложь; } return $ connection; } функция send_ xml ($ connection, $ xml) {fwrite ($ connection, $ xml); } функция textcontains ($ text, $ searchfor, $ or = false) {return stripos ($ text, $ searchfor)! == false; } функция send_recv_ xml ($ connection, $ xml, $ size = 4096) {send_ xml ($ connection, $ xml); $ data = recv_ xml ($ соединение, $ размер); $ data ["sent_ xml"] = $ xml; $ data ["sent_ html"] = htmlspecialchars ($ xml); вернуть данные $; } функция fread_untildone ($ connection, $ size = 4096) {$ content = ''; if ($ size <0) {while (! textcontains ($ content, '</iq>')) {$ content. = fread ($ connection, abs ($ size)); }} else {$ content = fread ($ connection, $ size); } / * while (! feof ($ connection)) {// не сработало $ content. = fread ($ connection, $ size); } * / return $ content; } функция recv_ xml ($ connection, $ size = 4096) {$ xml = fread_untildone ($ connection, $ size); if ($ xml === "") {return null; } // анализирует xml $ xml_parser = xml_parser_create (); xml_parse_into_struct ($ xml_parser, $ xml, $ val, $ index); xml_parser_free ($ xml_parser); $ RET = массив ($ val, $ index); $ RET ["исходные данные"] = $ xml; $ RET ["специальные данные"] = htmlspecialchars ($ xml); $ RET ["время"] = время (); return $ RET; } функция find_xmpp ($ connection, $ tag, $ value = null, & $ ret = null) {stati c $ val = null, $ index = null; do {if ($ val === null && $ index === null) {list ($ val, $ index) = recv_ xml ($ connection); если ($ val === null || $ index === null) {вернуть ложь; }} foreach ($ index as $ tag_key => $ tag_array) {if ($ tag_key === $ tag) {if ($ value === null) {if (isset ($ val [$ tag_array [0]] [ 'значение'])) {$ ret = $ val [$ tag_array [0]] ['значение']; } вернуть истину; } foreach ($ tag_array as $ i => $ pos) {if ($ val [$ pos] ['tag'] === $ tag && isset ($ val [$ pos] ['value']) && $ val [$ pos] ['значение'] === $ значение) {$ ret = $ val [$ pos] ['значение']; вернуть истину; }}}} $ val = $ index = null; } while (! feof ($ connection)); вернуть ложь; } функция xmpp_connect ($ server, $ username, $ password, $ resource = "глобус") {global $ streamid; $ connection = open_connection ($ сервер); если (! $ соединение) {вернуть ложь; } send_ xml ($ connection, ' '); $ data = recv_ xml ($ соединение); $ streamid = $ data [0] [0] ["атрибуты"] ["ID"]; // vardump ($ streamid, "идентификатор потока:"); send_ xml ($ соединение, ' '. $ имя пользователя. ''); $ data = recv_ xml ($ соединение); $ XML = ' '; $ fields = []; foreach ($ data [1] как $ KEY => $ VALUE) {$ KEY = strtolower ($ KEY); переключатель ($ KEY) {case "username": $ VALUE = $ username; перерыв; case «пароль»: $ VALUE = $ пароль; перерыв; case "дайджест": $ VALUE = strtolower (sha1 ($ streamid. $ password)); перерыв; case «ресурс»: $ VALUE = $ resource; перерыв; по умолчанию: $ VALUE = ""; } $ fields [$ KEY] = $ VALUE; если ($ VALUE) {$ XML. = '<'. $ KEY. '>'. $ VALUE. ' '; }} $ XML. = ''; // vardump ($ fields, "auth"); $ data = send_recv_ xml ($ соединение, $ XML); // vardump ($ data, 'логин'); return $ connection; } function xmpp_enum_users ($ connection, $ server, $ username, $ resource = "глобус") {// $ XML = ' '; // $ XML. = ' '; / * $ XML = ' '; * / global $ streamid; $ XML = ' '; return send_recv_ xml ($ соединение, $ XML, -4096); } функция xmpp_disconnect ($ connection) {fclose ($ connection); } $ connection = xmpp_connect ($ server, $ username, $ password, $ resource); $ data = xmpp_enum_users ($ соединение, $ сервер, $ имя пользователя, $ ресурс); $ xml = simplexml_load_string ($ data ["исходные данные"]); $ users = []; foreach ($ xml -> запрос-> элемент как $ user) {$ username = $ user-> attributes () -> name; $ группа = $ пользователь-> группа [0]; $ users [$ username] = $ group; } vardump ($ users, "пользователи"); эхо '
'. json_encode ($ users); эхо '
'; foreach ($ users as $ username => $ group) {echo $ username. знак равно $ группа. '
'; } xmpp_disconnect ($ соединение);

Это запуск клиента XMPP. Потребовалось время, чтобы найти базовый код для подключения, и я заметил, что другие люди просят об этом, но не получают его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...