PDA

View Full Version : レッツPHP!のフレーム式チャット


koeta
2002/06/17, 06:30 AM
http://php.s3.to/chat/
↑ここで配布されているフレーム式チャットを設置したのですが、
使用中にメンバーの発言や新たなメンバーの参加があった時に、他のメンバーがかってに退出させられるという状況があり、いろいろ考えたんですが、
MEMBERファイルを更新しているときにファイルロック処理が抜けてるのが原因かなぁと思っています。
何分PHPには不慣れなもので、自信がありません。
どなたか、PHPに詳しい方、教えてくださ〜い。
(配布元のサイトにも同様の質問が何件かあったのですが、回答がないようなので・・・)

PHP4サンプル集という本を1冊買ったんだけど、これがどこから読んでもわからないの・・・。つまり最初から読んでもわからない・・・

MEMBER更新時にファイルロック処理を追加したもの
http://koeta.s1.xrea.com:8080/chat/chat.php
修正ファイル
function.phpの
function MemUpdate($name,$color,$id,$icon){
$mem_arr = file(MEMBER);
$now = time();
$addr = getenv("REMOTE_ADDR");
$host = @gethostbyaddr($addr);

$fp = fopen(MEMBER, "w");
flock($fp, LOCK_EX);        ←ここを追加
foreach($mem_arr as $mem_data){
list($m_name,$m_co,$m_ip,$m_id,$m_time,$m_ic) = explode("\t", $mem_data);
if(($now-$m_time) < 60){
if($m_id != $id){
fputs($fp, $mem_data);
}
}
}
fputs($fp, "$name\t$color\t$host\t$id\t$now\t$icon\t\n");
fclose($fp);
}

ara
2002/06/17, 08:00 AM
メンバー情報を記録しているデータに空白(TAB)が入ってしまうのが原因、ということは無いですか?

はずしてたらごめんなさいm(_ _)m

koeta
2002/06/17, 11:04 AM
大変に怪しいものですが、他にも同様のトラブル報告があったので、
また別件だと思います。

使ってしばらくすると、突然参加者のところから名前が消えてしまいました。
参加者のカウントから除外され、ROMのほうに数えられます。
その後も書き込みはできますが、入室し直すまで、名前は表示されないままです。
↑こんな書き込みなんですが、状況はまったく同じなんです


普通にチャットを続けていて、人数が増えるにつれて頻度が高まり、
一人だけ残してみな落ちるあたりが、ファイルロックがないせいかなぁと思ったのですが・・・。

あそこにファイルロックの処理は不要なのでしょうか?

ara
2002/06/17, 12:02 PM
自分ではマトモにperlもphpも書けないので
ファイルロックの方法・タイミングに関しては他の方におまかせします:rolleyes:

で、データの内容がズレる(消える)という件に関しては
http://sb.xrea.com/showthread.php?s=&threadid=1974
 ↑
ここで出てきた現象と似ているような気がします。

fputs($fp, "$name\t$color\t$host\t$id\t$now\t$icon\t\n");

(アイコン選択の追加はこの際置いといて)
例えば、ホスト名が引けなかった場合にも空白(TAB3連続)になって、データが壊れる(読み込みがズレる)ような気がします。
(逆引き出来なくてもIPアドレスが入るのかな…)

不具合が生じる際、特定の条件とかは無いですか?
(特定の人が入場した後とか)

koeta
2002/06/17, 12:18 PM
Originally posted by ara
例えば、ホスト名が引けなかった場合にも空白(TAB3連続)になって、データが壊れる(読み込みがズレる)ような気がします。
(逆引き出来なくてもIPアドレスが入るのかな…)

不具合が生じる際、特定の条件とかは無いですか?
(特定の人が入場した後とか)


今のところ特定の条件は見当たりません。
この前このスクリプトを使ってチャットしてて、
最初二人でときどきぼそぼそやってた頃は全然そんな不具合はなく、
4人目あたりが入って来たときに最初にこの現象が起き、
その後は誰かが入室したときとか、
誰かが書き込みしたタイミングでごっそり強制退去処分にあいます。
固定メンバーでお話していても、ときどきごっそり強制退去処分にあうので、メンバーに依存しているということもないような気がします。

ara
2002/06/17, 12:45 PM
協力者を募って…
異常を察知した瞬間に全員がブラウザを閉じる
   ↓
すかさずFTPでメンバー情報ファイルをダウンロード
   ↓
TABが連続している部分が無いかチェックして原因究明

・・・とかダメですか?
ダメですね、ごめんなさい。。。

詳しい方にお任せします。
お役に立てませんでm(_ _)m

koeta
2002/07/11, 01:12 PM
結局はっきりとは原因はつかめませんでした。
状況としては、session関数を使っているんですが
session_registerでページ間で保持している変数の内容が
なにかのタイミング(見た感じでは法則性がありません・・・)で、
クリアされてしまっているようです。

私の手には負えないと思い、session関数を使わないものに改造しました。
でも、このお客様追い出し機能つきのチャットは案外楽しいので
XREA Woman's ringのチャットはこの付加機能つきのチャットのままにしてます。
XREAサーバの女性の皆さんなら、楽しんでいただけるのではないかと・・・

session_registerで定義している変数の内容が消えてしまうことについて
何か情報をお持ちの方がいらっしゃいましたら、教えていただけるとうれしいです。(でも理解できないかもしれません・・・)

ご解答くださったaraさん、ありがとうございました