プログラム
「星空の放蕩者」PHP 中国語ドキュメントの例を引用:
チャット ルームは、Web サイト上の退屈な人々のための秘密兵器です。同時に、ウェブマスターやその他の担当者もここで時間を潰すことができます。オンラインで活発な恋愛をしている場合でも、少なくともタイピング速度を上げることはできます。
チャット ルームは、実際には複数の人が使用する CGI プログラムです。プログラムは、各人が入力した文字列を、システムが受信した時刻に従って並べ替えて、各ユーザーに送信します。 Web チャット ルームと BBS チャット ルームの違いは、BBS チャット ルームは受信したすべての文をチャット ルーム内のすべてのインターネット ユーザーに即座に配信できることです。Web CGI プログラムは BBS Telnet 回線のように常に接続できるわけではなく、Web CGI は情報を迅速に送信する必要があります。可能な限り選択してから接続を終了します。この状況は、Web チャット ルームが依然として HTTP 送信プロトコルを使用しているため、HTTP 実装のバージョンが、バージョン 0.9、1.0、または 1.1 のいずれであっても、ネットワーク接続ポートを長時間占有することができないために発生します。
データをすぐに転送できない問題と情報の更新の問題を解決するために、Netscape はブラウザのバージョン 3.0 以降の新しい技術を採用し、Internet Explorer も Netscape が開発したこれらの技術を実装しました。 Netscape では、これをサーバー プッシュとクライアント プルの 2 つのテクノロジーに分割しています。サーバー プッシュでは、Web サーバーからの複数の MIME エンコーディングを使用してユーザーにデータを送信しますが、クライアント プルでは HTML メタ タグと http-equiv="Refresh" 属性を使用します。読み込み時間に関しては、content 属性を使用して実現されます。
タグは通常、ブラウザがユーザー側 Web ページを更新できるように
.. のセクションに配置されます。以下は、15 秒ごとにリロードするように設定されたメタと PHP の例です。
サーバープッシュまたはクライアントプルを使用しない場合チャット ルームを作成します。Web ブラウザでチャットできるようにする他の方法はありますか?答えは「はい」です。 Java または ActiveX (IE4 および 5 に限定) を使用したり、独自の専用ブラウザ プラグイン プログラム (Qimo のチャット ルームなど) を開発したりすることもできますが、これは PHP とは関係がなく、私たちの焦点でもありません。
また、すべてのネチズンのメッセージは定期的に更新されるため、更新によって書きかけの文字列が消去されることを避けるために、チャットルームを構築するためにフレームテクノロジーを使用する必要があります。以下の例はチャット ルームのメイン プログラムです。
このプログラムはフレームを使用して 2 つの PHP プログラムを呼び出します。将来のメンテナンスのために、それらを /chatroom などの同じディレクトリに置くことをお勧めします。さらに、list.php と post.php で同じ変数を使用するために、次の例では、共通の変数パスを env.inc に配置します。これは、/chatroom または Web サーバーの PHP インクルードに配置できます。 Apache) を設定したパスに追加します。
// ファイル名: env.inc
$tempdir="/tmp/";
$chatfile="/tmp/abc";
チャット ルームのバックエンドは、ファイルを使用するだけで簡単に設計できます。システムの効率を本当に重視する場合は、データベースを作成してそこにチャット コンテンツを投入することもできます。 UNIX を使用したトリップ通信 IPC。
このセクションでは、ユーザー コメントの内容をファイルに入れる方法について説明します。ここでの例のほとんどは、UNIX/Linux 外部コマンドを使用します。システムにこのコマンド (またはプログラム) がない場合は、関連するプログラムをご自身でインストールしてください。
実際、データをファイルにスローする方が、データベースを使用するよりも高速です。それでも速度を重視する場合は、UNIX マシンに RAM ディスクをインストールし、その RAM ディスクへのファイル アクセス パスを設定することができます。アクセス速度は厳しい要件を満たすことができます。高速検索エンジンとして宣伝している Web サイトの中には、データベース情報全体を RAM ディスクに保存しているものもあります。これにより、システム速度がすぐに 10 倍から 100 倍向上します。さらに、RAM の価格は他のソリューションに比べて比較的安価です。 Windows NT を使用している場合は、Microsoft が提供するのを待つか、サードパーティ製品を使用するしかありません。
UNIX にあまり詳しくないユーザーもいるかもしれないので、使用するコマンドを簡単に紹介します:
touch: 新しいファイルを作成するか、古いファイルの最終更新日を変更します。
echo プラス 2 つの大なり記号: 文字列表示を指定された場所にリダイレクトします。
tail: ファイル内のデータの最後の数行を表示します。デフォルト値は 10 行で、マイナス記号と数値を使用して表示する行数を変更できます。
以下は、env.inc ファイルを使用してメッセージ文字列を送信および処理するプログラムです。
// ファイル名: post.php
require("env.inc");
if (($chatuser!="") and ($chattext!=" ")) {
$chatstr="
".date("h:i:s")."-
".$chatuser." : ".$chattext;
$cmdstr="echo "".$chatstr."" >> ".$chatfile;
if (!file_exists($chatfile)) passthru("touch ".$chatfile);
passthru($cmdstr);
}
?>
< ;form action= echo $PHP_SELF; >
匿名:< td>
|
話す: |
|
|
プログラムはまず入力文字列があるかどうかを確認し、匿名や発言内容の文字列が無い場合は発言の形式(Form)を表示し、データがある場合にはその文字列と現在時刻を格納します。ファイル (UNIX ステアリング命令を使用)。もちろん、エラーを防ぐために、まずアーカイブできるファイルがあるかどうかを確認してください。ない場合は、最初にファイルをタッチします。この例では、ファイルは /tmp/abc です。
text/html; charset=gb2312" http-equiv=Content-Type>
// ファイル名: list .php
require("env.inc");
if (!file_exists($chatfile)) {
echo "まだ開かれていません";
}
$uniqfile=$tempdir.uniqid(rand());
$shellcmd="/usr/bin/tail -50 ".$chatfile. " > ".$uniqfile; $shellcmd);
$chatfilearray=file($uniqfile);
for ($i
echo $ Chatfilearray [$ j-$ i];
}
& gt; /body & gt; 5秒ごとに更新されます。同様に、共有の env.inc ファイルも必要であり、その中の変数を変更する場合は、すべての Web プログラムで使用できる非常に重要な方法です。場所。たとえば、新しい年に「Copyright (C) 1996-2000」という文字列がファイルに配置されると、1 つのファイルが変更されるだけでサイト全体が変更されます。
if (!file_exists($chatfile)) {
echo "まだ開かれていません
exit;
$uniqfile=$tempdir.uniqid (rand());
$shellcmd="/usr/bin/tail -50 ".$chatfile. " > ".$uniqfile;
ユーザーがチャット コンテンツを送信するファイル /tmp/abc が存在します。ファイルが存在しない場合は、未オープンとして表示され、ユーザーがチャット コンテンツを送信するのを待ちます。すでにチャット データがある場合は、最後の 50 件を取得し、別のファイルに表示する準備をします。
$chatfilearray=file($uniqfile);
$j=count($chatfilearray);
for ($i=1; $i<=$j; $i++) {
echo $chatfilearray[ $j-$i]."
n"
}
リンク解除($uniqfile);ファイルを配列変数 $chatfilearray に読み込み、最後のデータを最初に表示してブラウザに送信します。もちろん、配列を並べ替える方法を使用することもできますが、最後に格納されたデータが最後にあることを確認してください。これは本当に CPU 時間の無駄なので、データは最後から先頭にエコーされます。使用後は、unlink() コマンドを使用して一時ファイルを強制終了する必要もあります。
声明:この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。