среда, 28 января 2009 г.

Работа из PHP с xmpp (jabber)

Работа над протоколом jabber была начата ещё в 1998 году, но более широкое распространение получил в середине 2000 года. С того времени появилось много библиотек и реализаций данного протокола, почти для всех языков программирования. Более детальный список можно посмотреть на оффсайте: http://xmpp.org/software/libraries.shtml.

Extensible Messaging and Presence Protocol, сокращённо XMPP, это открытый протокол, основанный на XML, предназначенный для обмена мгновенными сообщениями и информацией о присутствии (списке контактов, например). Был опубликован в виде RFC 3920. Он остаётся основным протоколом технологии обмена мгновенными сообщениями Jabber. Главной целью протокола – была расширяемость, таким образом, он быстро получил много дополнительных возможностей, такие как передача голоса или передача файлов.

На оффсайте набор библиотек для работы на PHP представлен тремя вариантами:

  • JAXL
  • Lightr
  • xmpphp

Больше всего приглянулась библиотека xmpphp, как самая простая в использовании и с довольно удобными вызовами. О ней и пойдёт разговор.

Для того чтобы начать её использовать необходимо подключить файл XMPP.php, перед началом работы. Дальше создать объект класса XMPPHP_XMPP с указанием основных параметров соединения: джаббер сервера, порта подключения, данных для авторизации, и уровня логирования.

Фрагмент кода приведен ниже.

include ‘XMPPHP/XMPP.php’;

$conn = new XMPPHP_XMPP('jabber_server_here', 5222, 'your_login', ' your_password', 'xmpphp', 'jabber.ru', $printlog=false, $loglevel=XMPPHP_Log::LEVEL_INFO);
$conn->useEncryption(false);        //disable encryption
try
{
    $conn->connect();
    $conn->processUntil('session_start');
    $conn->presence();
    $conn->message('your jabber here', 'текст сообщения, которое хотите отправить');
    $conn->disconnect();
}
catch(XMPPHP_Exception $e)
{
    //here you can process $e->getMessage() if some error occurred;
}

В примере было отключено шифрование командой $conn->useEncryption(false). Это нужно делать непосредственно перед вызовом метода connect, пока не было установлено соединение. Позволит решить проблему, если вы получили ошибку вида «Fatal error: Cannot access protected property XMPPHP_XMPP::$use_encryption …», или в случае, если вы хотите отключить SSL/TLS шифрование.

Данное решение, использовать джаббер для отсылки сообщений средствами PHP, может пригодится для отправки извещения вам прямо в messenger об очередном пришедшем комментарии с вашего форума, заказе на покупку из web-магазина, поста из агрегатора новостей или другой важной информации с вашего приложения на сервере.

6 комментариев:

  1. Интересная статья. Спасибо.

    ОтветитьУдалить
  2. Пожалуйста, рад стараться! На практике опробовали?

    ОтветитьУдалить
  3. Статья то интересная, согласен. А вот как реализовать такое:
    .....
    $conn->processUntil('session_start');
    if(!$link)
    {
    die("Can't connect to DB");
    }
    else
    {
    $sql="SELECT data FROM rsstable WHERE id=3";
    $query=mysql_query($sql);
    echo "sss";
    }
    if (!mysql_error())
    {
    $conn->message('admin@azon-pc', $query.' SYSTEM SEND SOME MESSAGE');
    } else
    {die("ERROR");}
    .....
    То есть от правка сообщений из базы.

    ОтветитьУдалить
  4. Spatial, если честно не понял вопроса, в чём заключается у Вас проблема в реализации, в чём стоит вопрос?

    ОтветитьУдалить
  5. А можно ли реализовать запрос авторизации и приглашение в чат? Например польозователь gtalk, пока не вышлешь приглашение в чат - не получает сообщений. В старых версиях xmpphp вроде что то было.

    ОтветитьУдалить
  6. Олег, насколько мне известно, xmpphp API не позволяет делать автоматизированный buddy request. Как сделать отсылку и подтверждение invite to chat касательно Google Talk я тоже сказать не могу, такой информации нигде не нашёл, в интернете все только и задаются этим вопросом, но ответа никто не дал. Если кто-то сталкивался с таким вопросом и нашёл решение, буду благодарен, если сообщите.

    ОтветитьУдалить

Рекоммендую

Попробуйте надёжный хостинг от Scala Hosting