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);
}
↑ここで配布されているフレーム式チャットを設置したのですが、
使用中にメンバーの発言や新たなメンバーの参加があった時に、他のメンバーがかってに退出させられるという状況があり、いろいろ考えたんですが、
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);
}