Download the PHP package norgul/xmpp-php without Composer

On this page you can find all versions of the php package norgul/xmpp-php. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package xmpp-php

PHP client library for XMPP (Jabber) protocol

Latest Stable Version Total Downloads Latest Unstable Version Build Status License

This is low level socket implementation for enabling PHP to communicate with XMPP due to lack of such libraries online (at least ones I could find that had decent documentation).

XMPP core documentation can be found here.

Installation requirements and example

Project requirements are given in composer.json ( Composer website):

You can use this library in your project by running:

You can see usage example in Example.php file by changing credentials to point to your XMPP server and from project root run php Example.php.

Library usage

Initialization

In order to start using the library you first need to instantiate a new Options class. Host, username and password are mandatory fields, while port number, if omitted, will default to 5222 which is XMPP default.

Username can be either bare JID or in JID/resource form. If you are using a bare JID the resource will be added automatically. You can override this by explicitly setting a resource with $client->iq->setResource(). In the second case the username will be automatically parsed to username and resource variables. In case of JID/resource/xyz format, everything after second slash will be ignored. If both JID/resource is present as well as using the $client->iq->setResource() method, which ever was defined last will take precedence.

Options object is required for establishing the connection and every other subsequent request, so once set it should not be changed.

Once this is set you can instantiate a new XmppClient object and pass the Options object in.

XMPP client class explanation

Since XMPP is all about 3 major stanzas, (IQ, Message and Presence), I've created separate classes which are dependant on socket implementation so that you can directly send XML by calling a stanza method.

This means that 3 stanzas have been made available from XmppClient class constructor to be used like a chained method on client's concrete class.

Current logic thus is $client->STANZA->METHOD(). For example:

Connecting to the server

Beside being a stanza wrapper, XmppClient class offers a few public methods.

$client->connect() method does a few things:

  1. Connects to the socket which was initialized in XmppClient constructor
  2. Opens an XML stream to exchange with the XMPP server
  3. Tries to authenticate with the server based on provided credentials
  4. Starts the initial communication with the server, bare minimum to get you started

Current version supports PLAIN and DIGEST-MD5 auth methods.

TLS is supported by default. If server has support for TLS, library will automatically try to connect with TLS and make the connection secure.

If you'd like to explicitly disable this functionality, you can use setUseTls(false) function on the Options instance so that TLS communication is disabled. Note that this will function in environments where TLS is supported but not required. If TLS is required, program will connect to it independently of the option you set.

Sending raw data

send() message is exposed as being public in XmppClient class, and its intention is to send raw XML data to the server. For it to work correctly, XML which you send has to be valid XML.

Getting raw response

Server responses (or server side continuous XML session to be exact) can be retrieved with $client->getResponse(). This should be used in an infinite loop or for more sustainable solution in some WebSocket solution like Ratchet if you'd like to see continuous stream of everything coming from the server.

If you would like to see the output of the received response in the console you can call the $client->prettyPrint($response) method.

Receiving messages and other responses

In case you are not interested in complete response which comes from server, you may also use $client->message->receive() ($client->getMessages() was removed because it was just a shorthand method for this one) which will match message tags with regex and return array of matched messages. In case you'd like to see the response in the terminal, you can do something like this:

Disconnect

Disconnect method sends closing XML to the server to end the currently open session and closes the open socket.

Stanza method breakdown

Remember from here -> $client->STANZA->METHOD()

Message

send() - sending a message to someone. Takes 3 parameters of which the last one is optional. First parameter is the actual message you'd like to send (body), second one is recipient of the message and third one is type of message to be sent. This defaults to chat.

You can find possible types in this RFC document

receive() - covered in this section

IQ

getRoster() - takes no arguments and fetches current authenticated user roster.

setGroup() - puts a given user in group you provide. Method takes two arguments: first one being the group name which you will attach to given user, and other being JID of that user.

Presence

setPriority() - sets priority for given resource. First argument is an integer -128 <> 127. If no second argument is given, priority will be set for currently used resource. Other resource can be provided as a second argument whereas the priority will be set for that specific resource.

subscribe() - takes JID as an argument and asks that user for presence.

acceptSubscription() - takes JID as an argument and accepts presence from that user.

declineSubscription() - takes JID as an argument and declines presence from that user.

Sessions

Sessions are currently being used only to differentiate logs if multiple connections are being made.

XmppClient class takes in second optional parameter $sessionId to which you can forward session ID from your system, or it will be assigned automatically.

You can disable sessions through Options object ($options->setSessionManager(false)), as they can cause collision with already established sessions if being used inside frameworks or similar. Needless to say if this is disabled, forwarding a second parameter to XmppClient will not establish a new session.

More options (not required)

Options object can take more options which may be chained but are not required. These are explained and commented in the code directly in the Options class:

Socket options

Most of the socket options are set by default so there is no need to tamper with this class, however you can additionally change the timeout for the period the socket will be alive when doing a socket_read(), and you can do that with $socket->setTimeout().

Logging

Upon new established session the library is creating a xmpp.log log file in logs/ folder:

You can manually set logger when instantiating Options with setLogger($logger). The method accepts any object which implements Loggable interface so you can create your own implementation.

Fun fact: this used to be a PSR-3 logger interface, but I decided it was an overkill for this stage of development.

Other

Example.php has a sendRawXML() method which can be helpful with debugging. Method works in a way that you can provide hand-written XML and send it to the server. On the other hand you can also trigger a method by providing method name instead of XML.

Some valid XMPP XML will be declined (like sending <presence/>) because simplexml_load_string() is not able to parse it as being a valid XML. In cases you need to do some custom stuff like that and you are sure it is a XMPP valid XML, you can remove the parsing line and just let the send() method do its magic.

Be aware! Be very aware! sending an invalid XML to the server will probably invalidate currently open XML session and you will probably need to restart the script. This is highly experimental and not maintained really. It is a poor orphan method whose parents have abandoned it and left in a hurry. It may prove to be Harry Potter one day, but hey... we all clearly doubt it. You may be a special snowflake but no one likes you. Onward to orphanagemobil! Begone method (just kidding, I won't delete it)!

Who says readme's are boring.

Dev documentation

For anyone willing to contribute, a quick breakdown of the structure:



Xml


CI

Continuous integration is done through Travis CI, and each push goes through a process which is currently as simple as:

TODO's


All versions of xmpp-php with dependencies

PHP Build Version
Package Version
Requires php Version >=7.1
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package norgul/xmpp-php contains the following files

Loading the files please wait ....