【 スクリプト改造工房 PART 5 】

このエントリーをはてなブックマークに追加
952nobodyさん:03/03/10 20:49 ID:???
                    /:|.             /:|
                   / .:::|            /  ::|
                  |  ...:::|_          /   :::|
                 i       ̄ ̄⌒゙゙^――/   ::::::|
                /                  :::::::::\
                /|・\           ./・>    :::::::::\
               /ミ\ \         / /彡 i し./:::::::\
               /  ミ\.\ヽ|||liiiii||/ /./彡   ノ (::::::::::::::::::\
              /    ミ\\|||iii||l//彡     '~ヽ  :::::::::::::::\
             /        ̄    ̄,,、          /:::::::::::::::::.\
ファビョ━━━━━/  \ /  ,,____ _,/ ̄ \ \    /::::::::::::::::::::::::::::\━━━━━ソ!!!!!
           \    |.. | /└└└└\../\    /:::::::::::::::::::::::::::::::::/
             \    ∨.|lllllllllllllllllllllllllllllllllllllllll|  /::::::::::::::::::::::::::::::::::/
              \   |.|llllllllllllllll;/⌒/⌒  |    ::::::::::::::::::::::::/
                \ |.|llllllllll;   ./ .   . |    :::::::::::::::::::/
                /  |.|llllll|′  /    . |    | ::::::::/|
                /  |.|llll|    |     .∧〔   / ::::::::::::::::\
              / }.∧lll    |    ../ /  /   :::::::::::::::::\
             /   /| \┌┌┌┌┌/./ /:::      :::::::::::::::::\
           /    ( ゙゙^^¨^¨゙゙¨  ̄ ̄ ̄ /:::::::::::         ::::::::::\
          /     ヽー─¬ー〜ー――― :::::::::::::
953931:03/03/11 17:24 ID:faQewhAO
>>931よろしくおねがいします。
comchatのソース⇒http://csx.jp/~lgyec/ichat.data
954nobodyさん:03/03/11 17:59 ID:???
>>953
いくらおねがいしても誰もやる気ないようだ
自分でできるところまでやってみてそれを元にアドバイス求めれ
955nobodyさん:03/03/11 18:32 ID:???
>>949
既に解決しているだろうと思うけれど、念のためにカキコすると
flock関数はopen関数で指定されたファイルハンドルで使用するため
指定のルーチンをそのまま置き換えるには無理があるYO
実際はもっと簡単にできる
flock関数を使用している他のソースを調べましょう
956872:03/03/11 18:47 ID:k4GIfrjV
>>949
$lockkey = '3';

#&lock内に追加
if ($lockkey == 3) {

for ($i; $i<=5; $i++) {
if (flock (FH, 2)) {
last;
} elsif ($i == 5){ &error('LOCK is BUSY'); }
sleep(1);
}

}

#同じく
sub unlock {
if ($lockkey == 1) { unlink($lockfile); }
elsif ($lockkey == 2) { rmdir($lockfile); }
elsif ($lockkey == 3) { flock(FH, 8);}
$lockflag=0;
}
957872:03/03/11 19:18 ID:k4GIfrjV
>>955
すいませんでした。。
958nobodyさん:03/03/11 20:23 ID:???
>>957
ん? なんで謝るのYO
ファイルハンドルとサブルーチンを呼び出す位置を間違っていなければ
sleepする必要はない気がするけれど・・・構わないんじゃないの
959949:03/03/11 20:41 ID:???
皆さんレスありがとうございます。
>>956さん
試してみたんですが、LOCK is BUSYばかり出て書き込めませんでした。

>>955さん

とりあえず以下のように記述してみました。
open(IN,"$logfile") || &error("ログファイルが開けません");
flock( IN, 1 ); #ファイルを読み出しロック
@lines = <IN>;
flock( IN, 8 ); #ロック解除
close(IN);

open(OUT,">$logfile") || &error("ログファイルに書きこめません");
flock( OUT, 2 ); #ファイルを書き込みロック
print OUT @lines;
flock( OUT, 8 ); #ロック解除
close(OUT);

これで書き込めたんですが、あっているでしょうか? ファイルロックができているかチェックする方法とかありませんか?




960nobodyさん:03/03/11 20:54 ID:???
flock( OUT, 2 ) || &error("失敗");

flock( OUT, 8 ); #ロック解除
はいらない
961nobodyさん:03/03/11 21:06 ID:???
flock( OUT, 2 ) || &error("失敗");
??
962nobodyさん:03/03/11 21:57 ID:???
>>959
あってるYO
ファイルロックのテストは、適当にfork関数で多数の子プロセス上で排他処理させるか
指定時刻にファイルの読み書きのループを一斉に開始するスクリプトなどで
気の済むまでやるしか無いでしょう
もちろん、後からでも正常に処理できたかは分るように、読み書きする内容はキチンとプログラムしましょう
963nobodyさん:03/03/11 21:58 ID:???
あ・・・テストは自分のPC上でローカルでどうぞ
964nobodyさん:03/03/11 21:59 ID:???
>>959
危なっかしいけど、まあいいだろ
ロック解除は不要
965nobodyさん:03/03/11 22:46 ID:???
>>964
あなたは、随分と、偉そう、ですね?
966949:03/03/12 18:36 ID:???
皆様ご親切にありがとうございました。
>>964さん
この記述は危ないんですかね?
967nobodyさん:03/03/12 22:27 ID:???
>>966
この部分だけじゃ$logfileがどの程度重要なものか
わからないけど、十分な安全性があるとは言えないな
968nobodyさん:03/03/13 01:28 ID:???
>>967
$logfileが重要かどうかではなくて、その内容によるYO
>>966
ファイルロックトも兼ねてテストすれば、問題点はすぐに気が付くハズ・・・
969nobodyさん:03/03/13 01:29 ID:???
>>968
なんだ・・・ファイルロックトって(w
ファイルロックだYO
970nobodyさん:03/03/13 01:54 ID:???
open(OUT,">$logfile") ←この時点でファイルはクリアされる
              ←ここで別プロセスがファイルを操作する危険も
flock( OUT, 2 );
print OUT @lines;   ←この前までにプロセスが死んだらファイルは破損
flock( OUT, 8 );
              ←ここで別プロセスがファイルを操作する危険も
close(IN);        ←実際の書き込みが行われるのはここ(オートフラッシュなしの場合)
971nobodyさん:03/03/13 10:07 ID:???
>>970
なるほど、open(FH, ">filename") でファイルを開いただけでは
ファイルは変更されていない状態だと思っていましたが・・・確かに危険ですね
">>filename"などでオープンして、turncateで0指定する方法をとるべきか・・・
良い事を教えてもらいました。ありがとうございます
失礼しました
972山崎渉:03/03/13 17:00 ID:???
(^^)
973931:03/03/15 11:29 ID:???
>>954さんが言われたとうり自分でできるところまでやってみました。
改造した部分だけのソース⇒http://csx.jp/~lgyec/ichats.data
ichatのソース⇒http://csx.jp/~lgyec/ichat.data
こういう風にやっても、自分の発言を削除をクリックしても”クリアメッセージ”と自動的に発動しません。
援助お願い致します。
974ひよこ名無しさん:03/03/15 12:43 ID:???
975名無し:03/03/15 16:35 ID:55qzOCkc
KENTさんの掲示板
http://www.kent-web.com/bbs/fantasy.html?
に、”タイトル”を入力する項目を追加したいのですが
いざやってみたら、上手くいきませんでした。
この場合、どこをどういじればいいのでしょうか?
976ウマー(゚Д゚)@Apw5yill☆2ch:03/03/15 16:39 ID:abzlUrYY
質問です。CGIで例えば、****.cgi?1111
みたいな、?1111を付け加えて表示させる物があります。そこで、
URL転送を使って、***.com/1111を入力すると、****.cgi?1111が表示
されるように、転送先を****.cgi?にしましたが無理でした。
なにかいい方法はありませんか?
977007:03/03/15 16:48 ID:???
タイトル入力するところあるぞぃ
# タイトル名
$title = "Fantasy Board";
ってやつが
978nobodyさん:03/03/15 16:53 ID:???
>>973
while (<IO>){
 if ($_ =~ /<>$ip/){
  @y2=split(/<>/,$_);
  if ($y2[6] ne $ip){
   push(@log,$_);
  }else{
   push(@log,'All Clear (^-^)v');
  }
 }else{
  push(@log,$_);
 }
}
979nobodyさん:03/03/15 16:54 ID:???
>>976
転送先を****.cgi?1111
980ウマー(゚Д゚)@Apw5yill☆2ch:03/03/15 16:58 ID:abzlUrYY
は、できたんですが、その他にも2222や3333とも指定したいのです。。
981nobodyさん:03/03/15 17:07 ID:???
>>980
ドキュメントルートに***.com/以降を受け取れるcgiでも作って置けばいい

尚、ここは改造スレにつきスレ違い
982nobodyさん:03/03/15 18:20 ID:???
>>978さんのとうりにすると
sub deleteme{
#自分の発言消去
open (IO,"+<$logfile");
eval{flock(IO,2)};
while (<IO>){
 if ($_ =~ /<>$ip/){
  @y2=split(/<>/,$_);
  if ($y2[6] ne $ip){
   push(@log,$_);
  }else{
   push(@log,'All Clear (^-^)v');
  }
 }else{
  push(@log,$_);
 }
}
truncate(IO,0);
seek(IO,0,0);
print IO @log;
close (IO);
&reload2;
}
でいいですよね?そうしたらScript Errorがでました。
援助お願いします。
983nobodyさん:03/03/15 19:23 ID:???
>>982
あのままコピペしたんじゃないだろうな?
全角スペースを半角かタブに置き換えたか?
984nobodyさん:03/03/15 21:59 ID:6KH7Xn0j
>>976
>URL転送を使って
多分/以降のデータは中継されないから無理
985nobodyさん:03/03/15 22:06 ID:???
   ,.´ / Vヽヽ
    ! i iノノリ)) 〉
    i l l.´ヮ`ノリ <先生!こんなのがありました!
    l く/_只ヽ    
  | ̄ ̄ ̄ ̄ ̄|
http://saitama.gasuki.com/aomori/
986975:03/03/15 23:45 ID:MaN1zNKv
>>977
いや、掲示板のタイトルじゃなくて
ここのスレッドにタイトルをつけたいのです。
987nobodyさん:03/03/16 13:58 ID:???
ここのスレッドとはどこのスレッドですかぁー?w
988nobodyさん:03/03/16 13:59 ID:t8L+n8I+
>>983全角スペースを半角かタブに置き換えたか? ってどういう意味ですか?
989nobodyさん:03/03/16 14:08 ID:???
>>988
意味も何も、そうしたかと聞いてる
990nobodyさん:03/03/16 15:29 ID:vOOsWTxU
そのまま貼り付けたんですけど。
991nobodyさん:03/03/16 16:21 ID:???
>>990
アホか
コピペした部分の全角スペースを置き換しれ
992nobodyさん:03/03/16 17:44 ID:KSrtergb
新すれはどこですか?
993nobodyさん:03/03/16 17:47 ID:WBb98oow
http://www.pink-angel.jp/betu/linkvp2/linkvp.html
★その目で確認すべし!!★超おすすめ★
994nobodyさん:03/03/16 17:51 ID:???
>>992
ないから、いるなら立てて
995nobodyさん:03/03/16 18:08 ID:vOOsWTxU
>>991さん無事できたのですが。
All Clear (^-^)v > () と名前のところにそのALL Clearとでて文字のところに()とでます。
援助お願いします。
996nobodyさん:03/03/16 18:15 ID:vOOsWTxU
↑の続きで
その自分の発言を削除を押した後発言をするとAll Clear (^-^)v > () が消えてしまいます。
997nobodyさん:03/03/16 18:16 ID:x5aWnNPV
いきなり乱入1000
998nobodyさん:03/03/16 18:24 ID:MtdvS7v9
1000!
999nobodyさん:03/03/16 18:24 ID:MtdvS7v9
とう!
1000nobodyさん:03/03/16 18:24 ID:MtdvS7v9
1000げっとーーーーーーーーーーーーーーーズザァアア
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。