AJAX Chat for phpBB3
v 0.8.6 phpBB3 ( blueimp.net/ajax/ )

Table of Contents



Configuring and Customizing



Socket Server



This is the version of Blueimp's AJAX Chat desinged to be run with phpBB3.
If you want to integrate AJAX Chat with one of the other forums we support, go back and choose the right version.

AJAX stands for "Asynchronous JavaScript and XML".
The AJAX Chat client (your browser) uses JavaScript to query the web server for updates.
Instead of delivering a complete HTML page only updated data is sent in XML format.
By using JavaScript the chat page can be updated without having to reload the whole page.
PHP is used to communicate with the database and authenticate users.


Server-Side Client-Side
PHP >= 4
MySQL >= 4
Ruby >= 1.8 (optional)
Enabled JavaScript
Enabled Cookies
Flash Plugin >= 9 (optional)


Download your preferred version of AJAX Chat and unzip the file on your computer.

Before You Begin

In order to edit PHP files you will need a good text editor. You should not use Windows notepad, wordpad, or Microsoft Word to edit PHP files. These programs will add something called a byte-order-mark (BOM) to the files and this may prevent chat from functioning properly. We recommend using Notepad ++ ( http://notepad-plus.sourceforge.net ) for editing all files. It also has the benefit of color-coding your files so you can edit them more easily.
If you get an error message like "Cannot modify header information - headers already sent" it is likely because you have used one of the above programs to edit files.

Upload to Server

Upload the chat folder to your server into your phpBB3 forum directory:
e.g. http://example.org/phpBB3/chat/

Create Database Tables

Execute the provided installation script by visiting the following URL with your browser:

Replace "http://example.org/phpBB3/chat/" with the real URL to your chat directory.

Delete Installation Script

Execute the provided installation script by visiting the following URL with your browser:

Delete the file install.php from the chat directory on your server.

Congradulation! You Are Winner!

Yay! You're done! To test your chat, navigate to your chat URL in a browser: http://example.org/path/to/chat/index.php
You are now free to customize chat to further suit your needs.

Configuring and Customizing

Configuration Files

AJAX Chat is fully customizable and contains two configuration files:

  1. lib/config.php: This file contains the core configuration options for chat. Essential options for configuring the database, security, available languages, etc, are found here.
  2. js/config.js: This file contains client side settings that change your users' default options in chat. Many of these settings can be changed by users in their options but some (like the refresh rate) cannot.

Both of these files are well commented with information on what the settings mean.

Customizing the Layout

The layout of AJAX Chat is fully customizable by using CSS (Cascaded Style Sheets).
AJAX Chat comes with a predefined set of styles. To add your own style, do the following:

  1. Add a new CSS file (e.g. mystyle.css) by copying one of the existing styles from the CSS directory.
  2. Edit your file (css/mystyle.css) and adjust the CSS settings to your liking.
  3. Add the name of your style without file extension to the available styles in lib/config.php:
    // Available styles:
    $config['styleAvailable'] = array('mystyle','beige','black','grey');
    // Default style:
    $config['styleDefault'] = 'mystyle';

To further customize the layout you can adjust the template files in lib/template/.

Make sure you are creating valid XHTML, else you will produce errors in modern browsers.
This is due to the page content-type served as "application/xhtml+xml".
Using this content-type improves performance when manipulating the Document Object Model (DOM).

If for some reason you cannot create valid XHTML you can force a HTML content-type.
Just edit lib/config.php and set the following option:

$config['contentType'] = 'text/html';

Adjusting the Language Settings

AJAX Chat comes with two language file directories:

  1. js/lang/: This directory contains the language files used for the chat messages localization. These are JavaScript files with the extension ".js".
  2. lib/lang/: This directory contains the language files used for the template output. These are PHP files with the extension ".php".

Many languages are already included with the download and you can customize them by editing these files.
For each language, you need a file in both of these directories, with the language code as file name (such as en.js and en.php)..
The language code is used following the ISO 639 standards.

The files for the english (language code "en") localization are js/lang/en.js and lib/lang/en.php.

If you create your own localization, you must put the files in the correct folders and then make two changes to config.php:

  1. Add the language code (this must match the filename you chose for the language. Remember to use commas correctly to separate multiple language codes):
    $config['langAvailable'] = array('en');
  2. Add the language name (this is what users see in the dropdown menu to choose the language):
    $config['langNames'] = array('en'=>'English');

To avoid errors, you should follow these rules:

  1. Make sure you encode your localization files in UTF-8 (without Byte-order mark).
  2. Don't use HTML entities in your localization files.
  3. Don't remove any "%s" inside the JavaScript language files - these are filled with dynamic data.

Adding Features

AJAX Chat is designed with numerous hooks and overrides available to improve core functionality without requiring you to edit the core files. With an intermediate understading of PHP and javascript you can modify your chat to suit your needs.

Have a look through a few examples available on the sourceforge wiki: https://sourceforge.net/apps/mediawiki/ajax-chat/index.php?title=General_Modifications


Accessing the Logs

By default, AJAX Chat stores all chat messages in the database.
To access the logs you have to add the GET parameter view=logs to your chat url (add ?view=logs to the end of the url):

e.g. http://example.org/path/to/chat/?view=logs

If you are not already logged in, you have to login as administrator to access the logs.

The log view enables you to monitor the latest chat messages on all channels.
It is also possible to view the logs of private rooms and private messages.
You have the option to filter the logs by date, time and search strings.

The search filter accepts MySQL style regular expressions as described here: http://dev.mysql.com/doc/refman/5.1/en/regexp.html
You can search for IPs, using the following syntax: ip=


AJAX Chat is also usable as shoutbox - this is a short guide on how to set it up to display on a PHPBB3 forum.
The following edits are made in files you can find in your phpbb3 installation directory.

PHPBB3 Shoutbox Integration

In includes/functions.php

function getShoutBoxContent()
	global $phpEx, $phpbb_root_path;

	// Get the URL to the chat directory:
	if (!defined('AJAX_CHAT_URL'))
		define('AJAX_CHAT_URL', $phpbb_root_path . 'chat/');

	// Get the real path to the chat directory:
	if (!defined('AJAX_CHAT_PATH'))
		if (empty($_SERVER['SCRIPT_FILENAME']))
		define('AJAX_CHAT_PATH', realpath(dirname($_SERVER['SCRIPT_FILENAME']) . '/chat') . '/');

	// Validate the path to the chat:
	if (@is_file(AJAX_CHAT_PATH . 'lib/classes.' . $phpEx))
		// Include Class libraries:
		require_once(AJAX_CHAT_PATH.'lib/classes.' . $phpEx);

		// Initialize the shoutbox:
		$ajaxChat = new CustomAJAXChatShoutBox();

		// Parse and return the shoutbox template content:
		return $ajaxChat->getShoutBoxContent();

	return null;
      'SHOUTBOX'                  => getShoutBoxContent(),
   // The following assigns all _common_ variables that may be used at any point in a template.

In styles/[STYLE_NAME]/template/overall_footer.html

Add: <!-- IF not S_IS_BOT --> <div style="font-size: 1.2em; margin-bottom: 20px;">{SHOUTBOX}</div> <!-- ELSE --> <div id="ajaxChatCopyright"><a href="https://blueimp.net/ajax/">AJAX Chat</a> © <a href="https://blueimp.net">blueimp.net</a></div> <!-- ENDIF --> After <div id="page-footer">

In styles/[STYLE_NAME]/theme/stylesheet.css

Add: @import url("../../../chat/css/shoutbox.css"); After <div id="page-footer">

Socket Server

Using the AJAX technology alone the chat clients have to permanently pull updates from the server.
This is due to AJAX being a web technology and HTTP being a stateless protocol.
Events pushed from server-side need a permanent or long-lasting socket connection between clients and server.
This requires either a custom HTTP server (called "comet") or another custom socket server.

AJAX Chat uses a JavaScript-to-Flash bridge to establish a permanent socket connection from client side.
The JavaScript-to-Flash bridge requires a Flash plugin >= 9 installed on the user browser.
Clients without this requirement will fall back to pull the server for updates.

This part of the setup is OPTIONAL and meant for experienced users only.


The socket server coming with AJAX Chat is implemented in Ruby.
You need to be able to run a Ruby script as a service to run the socket server.
To be able to start the service, the script files in the socket/ directory have to be executable:

$ chmod +x server
$ chmod +x server.rb

"server" is a simple bash script to start and stop a service.
"server.rb" is the ruby socket server script.
"server.conf" is a configuration file - each setting is explained with a comment.

To start the service, execute the "server" script with the parameter "start":

$ ./server start

This will create two additional files:

"server.pid" contains the process id of the service.
"server.log" is filled with the socket server log.

To monitor the socket server logs, you can use the "tail" command included in most GNU/Linux distributions:

$ tail -f server.log

By default only errors and start/stop of the server are logged.
To get more detailed logs configure the log level by editing the configuration file.

To stop the service, execute the "server" script with the parameter "stop":

$ ./server stop

If the socket server is running, you have to enable the following option in lib/config.php:

$config['socketServerEnabled'] = true;

This tells the server-side chat script to broadcast chat messages via the socket server.
Chat clients will establish a permanent connection to the socket server to listen for chat messages.

By default only local clients (,::1) may broadcast messages.
Clients allowed to broadcast messages may also handle the channel authentication.
If your socket server is running on another host you should set the broadcast_clients option to the chat server IP.

Using the socket server increases response time while improving server performance at the same time.

Flash Permissions

Since Flash and all Flash 10 versions, permissions for creating sockets using Flash have changed.
Now an explicit permission (using xml-syntax) is required for creating socket connections.
In the current state, socket server won't work with the newest Flash versions.
You will get a "Flash security error" in the browser.

A solution is to use a policy-files server which will listen to connections in port 843 in the server.
Each time a client tries to connect to the chat, the Flash client will request the policy authorization to the server.
The policy-files server is downloadable from http://ammonlauritzen.com/FlashPolicyService-09b.zip
It works with FF3 and IE7 (not yet tested in other browsers).

A more detailed explanation can be found here:

* http://ammonlauritzen.com/blog/2007/12/13/new-flash-security-policies/
* http://ammonlauritzen.com/blog/2008/04/22/flash-policy-service-daemon/

Official Adobe documentation:

* http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security.html
* http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security_04.html


Your donations contribute to the growth and development of this project and are always appreciated.


Bluimp's AJAX Chat is released under the GNU Affero General Public License.

You should also find this license included with your download of this project.

back to top