概要と動作デモ
PHPで書かれた簡単チャットです。非フレーム型で、JavaScriptによる自動リロード機能、在室者名を表示する機能があります。また、リロードボタンを押したときに新しい発言がない場合、ブラウザに無駄な読み込みをさせずに転送量を節約する機能があります。
バージョン2.0より、JavaScriptによるHTTP通信をサポートしました。Ajaxと呼ばれる仕組みに似たものを利用し、ページ全体を再読み込みせずに新規発言のみをダウンロードするので、以前よりもサクサクと高速に動作します。また、転送量もさらに節約できます。動作デモをお試しください。
また開発にあたり、Web裏技のミニチャット2を参考にさせていただきました。
動作環境
以下の環境で動作すると思われます。
-
サーバ側
- PHP5.2.0以上
-
クライアント側
- Mozilla Firefox 3.6以上
- Opera 11.00以上
- Apple Safariの最新版
- Google Chromeの最新版
- Microsoft Internet Explorer 6.0以上
TOK2という無料ウェブサーバでは動作しません。
利用許諾
いわゆるX11ライセンス(MITライセンス)の下で自由にご利用いただけます。
ダウンロード
スクリプトの文字コードはUTF-8、改行コードはCR+LF(Windows用)です。Windows以外の環境の方は適宜改行コードを変更してください。
- php-chat-3-0.zip - バージョン 3.0 (2012-08-20)
以前のバージョンのデータファイルは一旦クリア(空ファイルに)してください。
設置方法
初期設定
"chat.php"および"chat.js"をテキストエディタで開き、冒頭の「初期設定」のうち、必要な部分をだけ書き換えてください。恐らくは何も書き換えなくても動きます。
編集したファイルは
サーバに転送
デフォルトでは以下のような配置を想定しています。
-
/chat/
-
/data/
- messages.dat.cgi
- sessions.dat.cgi
-
/templates/
- error.php
- quit.php
- speak.php
- start.php
- chat.css
- chat.js
- chat.php
-
/data/
以下の表に従ってパーミッションを変更すれば設置完了です。FTP転送する際は、ファイルはすべてアスキーモード(テキストモード)で転送してください。
ファイル | パーミッション | 解説 |
---|---|---|
chat.php | 604 | スクリプト本体 |
messages.dat.cgi | 606 | 発言記録ファイル |
sessions.dat.cgi | 606 | 参加者名記録ファイル |
chat.js | 外部JavaScriptファイル | |
chat.css | 外部CSSファイル |
より安全な設置方法
例えば以下のように、公開する必要の無いファイルを非公開ディレクトリに移動すると、より安全に運用できます。
-
/user/
-
/chat/
-
/data/
- messages.dat.cgi
- sessions.dat.cgi
-
/templates/
- error.php
- quit.php
- speak.php
- start.php
-
/data/
-
/public_html/
-
/chat/
- chat.css
- chat.js
- chat.php
-
/chat/
-
/chat/
上記のディレクトリ構成例では、データファイルおよびテンプレートのパスを以下のように変更する必要があります。
// データファイルのパス
define('DATA_DIR', '../../chat/data/');
:
// テンプレートのパス
define('TEMPLATE_DIR', '../../templates/');
おまけ
以下のような簡単なPHPコードで、チャットの参加者名を別のページに埋め込むこともできます。'./data/sessions.dat.cgi' の部分を、埋め込んだページからの相対パスなどに書き換えてください。
<?php
$names = array();
foreach (file('./data/sessions.dat.cgi') as $line) {
list(,, $name) = split("\t", rtrim($line));
array_push($names, $name);
}
echo '<p>参加者(' . count($names) . '):</p>';
if (count($names)) {
echo '<ul>';
foreach ($names as $name)
echo "<li>$name</li>";
echo '</ul>';
} else {
echo '<p>なし</p>';
}
?>
更新履歴
公開日 | Ver | 更新内容 |
---|---|---|
2012-08-20 | 3.0 |
|
2008-07-13 | 2.0.2 |
|
2007-08-24 | 2.0.1 |
|
2007-05-05 | 2.0 |
|
2007-04-21 | 1.4 |
|
2005-02-19 | 1.3 |
|
2004-10-13 | 1.2.1 |
|
2004-10-08 | 1.2 |
|
2004-08-26 | 1.1 |
|
2003-11-03 | 1.0 |
|