Версия 1.01 Простой php класс для работы с протоколом XMPP (jabber). Отправка, примем сообщений, ведение логов.
Все Php файлы сохранены в юникоде (utf-8), так как jabber работает в юникоде.
1. Отредактируйте файл config.ini.php
2. Откройте файл xmpp.class.php.
Отредактируйте самый первый метод eventMessage(). Это реакция на входящие сообщения. По умолчанию установлена отправка ответного сообщения на входящее. Можете обработать входящие сообщения по своему усмотрению.
3. Отредактируйте index.php Пример:
<?php include_once("xmpp.class.php"); $webi = new XMPP($webi_conf); $webi->connect(); // установка соединения... $webi->sendStatus('text status','chat',3); // установка статуса $webi->sendMessage("asd@asd.ru", "text message"); // отправка сообщения
// так можно зациклить while($webi->isConnected)
{ $webi->getXML();
} ?>
--- Версия 1.01 Добавлена возможность отключения шифрования ---
Подробная статья о работе с jabber через PHP
Jabber и PHP
06.07.2010 Дмитрий
Большое спасибо за отличный класс и проделанную работу. Скажите пожалуйста, возможно ли отправлять и принимать сообщение через icq-номер зарегистрированный на транспорте icq джаббера?
06.07.2010 админ
Вопрос интересный.
Работу транспортов я не изучал, даже не скажу, получится этим классом работать с транспортами или нет.
Наверное проще для icq использовать свой класс специальный для работы с ICQ.
07.07.2010 domov0y
сообщение отправленное на транспорт ничем не отличается от обычного.
все тот же
<message to="uin@you_icq_transport.you_jabber_server">
</message>
07.07.2010 Дмитрий
Да, получилось отправить как обычное сообщение. Только нужно быть внимательным с кодировками и правильно их выставить в настройках транспорта непосредственно на сервере или же предварительно настроить транспорт в любом десктопном клиенте. Еще одно важное замечание: от длинного сообщения аська падает. Сделал условие в скрипте с ограничение посредством mb_strlen($content,'utf-8')
07.07.2010 сергей
Дмитрий, как от длинного сообщения аська падает?
Сам клиент аськи вываливается что ли?
08.07.2010 Дмитрий
При отправке длинного сообщения, вываливается аська на транспорте. То есть сам скрипт продолжает работать и это видно по тому, что JID джаббера остается в онлайне. Так что нареканий на Ваш клас нет. Есть только одна непонятная ошибка, возможно она появилась после небольших изменений в скрипте для интеграции его в фреймворк CI.
A PHP Error was encountered
Severity: Warning
Message: fwrite(): supplied argument is not a valid stream resource
Filename: libraries/Xmpp.php
Line Number: 141
да и мне самому как то не понятно это :)
return fwrite($this->stream,$xml."\n");
09.07.2010 админ
Дмитрий, эта ошибка говорит о том, что ресурс потока $this->stream не правильный.
Возможно на этом этапе идет отправка сообщения в отключенный поток или переменная $this->stream вообще не правильная.
Скорее всего просто поток в этом месте уже отвалился.
21.08.2010 Skobkin.ru
Как отключить шифрование? У меня PHP его не поддерживает.
Специального метода как в классе XMPPHP не нашел.
23.08.2010 Николай
Здравствуйте, что нужно добавить в файл index.php чтобы обрабатывались входящие сообщения? Покажете какой именно код добавить. А то отправка писем работает, а входящие не обрабатываются не как.
23.08.2010 виктор
Николай, для входящих сообщений открывайте файл xmpp.class.php
Самый первый метод eventMessage()
Тут как раз ловятся входящие сообщения.
В переменной $content текст сообщения
В переменной $fromJid от кого сообщение
26.08.2010 Николай
Я это понял, надо ли чтот добалять в файл index.php? Я добалял в index.php
$webi->eventMessage($fromJid, $content, $offline = FALSE); но оффлайн сообщения не приходили
26.08.2010 Виктор
Николай, нет, ничего не нужно добавлять в index.php.
Эта функция и так обрабатывается автоматически, прямо в ней вносите правки.
Оффлайн сообщения скорее всего приходили, просто они не обрабатывались.
Прямо в xmpp.class.php в eventMessage сделайте вывод переменной $content на экран и посмотрите приходят сообщения или нет.
27.08.2010 Николай
При выполнеии скрипта почему то jabber логин с которого вхожу отстается потосянно в сети и не отключается, почему так получается? выводил переменную $content, она не вывилась на экран.
27.08.2010 Виктор
Николай, а может в это время у вас запущен этот же логин jabber в другом месте, с более высоким приоритетом?
поэтому и находится он в сети и сообщения входящие уходят в него.
09.10.2010 7oa
Ошибочка!
Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in Z:\home\jabberxmpp\www\xmpp.class.php on line 353
Не понятно как отключать шифрование.
09.10.2010 Админ
7oa, в конфиге есть
$webi_conf['tls_off'] = 0;
это отключение шифрования.
именно отключение, чтобы отключить нужно поставить 1
09.10.2010 7oa
Шифрование отключила. Но появилась другая ошибка.
Warning: Invalid argument supplied for foreach() in Z:\home\jabberxmpp\www\xmpp.class.php on line 429
09.10.2010 7oa
Закомментировала этот кусок кода. Вроде заработало.
Один минус - долго думает.
10.10.2010 админ
7oa, это не ошибка, это предупреждение, можно отключить эти сообщения с помощью
error_reporting(0);