トップページphp
1001コメント413KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん02/08/01 18:19ID:???

#================================
# スレッドの説明
#================================

「スクリプトを改造したいけどやりかたわかんないよー」という人がいましたら
ここで聞いてください。ひょっとしたらアドバイス出来るかもしれません。

質問するときは以下の点に注意して書いて下さい

(1) そのスクリプトの内容と置いてある場所を明記する (txtファイルでUPすればなお良い)
(2) どんな風に改造して欲しいのか? (完成イメージHTMLを用意すればなお良し)
(3) 出来るだけ詳しく書くこと。少しは自分で考えること。できれば御礼も言ったほうが良い

※答えてくれないからといって逆ギレする厨はお断り

#================================
# 過去のスレッド
#================================

【PART1】行方不明
【PART2】http://pc.2ch.net/test/read.cgi/perl/986986227/
【PART3】http://pc.2ch.net/php/kako/988/988808396.html (HTML化済み)
0948nobodyさん03/03/10 16:53ID:+NULa64Y
>>947
テーブルで画像と本文分かれてるからそれだと無理じゃない?
それ以上のことは俺にはわかんないけど
0949nobodyさん03/03/10 16:53ID:???
# ロック処理 #
sub lock {
local($retry,$mtime);
# 1分以上古いロックは削除する
if (-e $lockfile) {
($mtime) = (stat($lockfile))[9];
if ($mtime < time - 60) { &unlock; }
}
# symlink関数式ロック
if ($lockkey == 1) {
$retry = 5;
while (!symlink(".", $lockfile)) {
if (--$retry <= 0) { &error('LOCK is BUSY'); }
sleep(1);
}
# mkdir関数式ロック
} elsif ($lockkey == 2) {
$retry = 5;
while (!mkdir($lockfile, 0755)) {
if (--$retry <= 0) { &error('LOCK is BUSY'); }
sleep(1);
}
}
$lockflag=1;
}
# ロック解除 #
sub unlock {
if ($lockkey == 1) { unlink($lockfile); }
elsif ($lockkey == 2) { rmdir($lockfile); }
$lockflag=0;
}
KENTさんのファイルロックのルーチンなのですが、これにflock関数のファイルロックをつけるにはどうすればいいのですか?
0950nobodyさん03/03/10 17:24ID:???
>>948
HTMLを勉強汁!
095193103/03/10 20:32ID:wfQN1r0d
>>931ですが、その改造の仕方教えてください。
0952nobodyさん03/03/10 20:49ID:???
                    /:|.             /:|
                   / .:::|            /  ::|
                  |  ...:::|_          /   :::|
                 i       ̄ ̄⌒゙゙^――/   ::::::|
                /                  :::::::::\
                /|・\           ./・>    :::::::::\
               /ミ\ \         / /彡 i し./:::::::\
               /  ミ\.\ヽ|||liiiii||/ /./彡   ノ (::::::::::::::::::\
              /    ミ\\|||iii||l//彡     '~ヽ  :::::::::::::::\
             /        ̄    ̄,,、          /:::::::::::::::::.\
ファビョ━━━━━/  \ /  ,,____ _,/ ̄ \ \    /::::::::::::::::::::::::::::\━━━━━ソ!!!!!
           \    |.. | /└└└└\../\    /:::::::::::::::::::::::::::::::::/
             \    ∨.|lllllllllllllllllllllllllllllllllllllllll|  /::::::::::::::::::::::::::::::::::/
              \   |.|llllllllllllllll;/⌒/⌒  |    ::::::::::::::::::::::::/
                \ |.|llllllllll;   ./ .   . |    :::::::::::::::::::/
                /  |.|llllll|′  /    . |    | ::::::::/|
                /  |.|llll|    |     .∧〔   / ::::::::::::::::\
              / }.∧lll    |    ../ /  /   :::::::::::::::::\
             /   /| \┌┌┌┌┌/./ /:::      :::::::::::::::::\
           /    ( ゙゙^^¨^¨゙゙¨  ̄ ̄ ̄ /:::::::::::         ::::::::::\
          /     ヽー─¬ー〜ー――― :::::::::::::
095393103/03/11 17:24ID:faQewhAO
>>931よろしくおねがいします。
comchatのソース⇒http://csx.jp/~lgyec/ichat.data
0954nobodyさん03/03/11 17:59ID:???
>>953
いくらおねがいしても誰もやる気ないようだ
自分でできるところまでやってみてそれを元にアドバイス求めれ
0955nobodyさん03/03/11 18:32ID:???
>>949
既に解決しているだろうと思うけれど、念のためにカキコすると
flock関数はopen関数で指定されたファイルハンドルで使用するため
指定のルーチンをそのまま置き換えるには無理があるYO
実際はもっと簡単にできる
flock関数を使用している他のソースを調べましょう
095687203/03/11 18:47ID: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;
}
095787203/03/11 19:18ID:k4GIfrjV
>>955
すいませんでした。。
0958nobodyさん03/03/11 20:23ID:???
>>957
ん? なんで謝るのYO
ファイルハンドルとサブルーチンを呼び出す位置を間違っていなければ
sleepする必要はない気がするけれど・・・構わないんじゃないの
095994903/03/11 20:41ID:???
皆さんレスありがとうございます。
>>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);

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




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

flock( OUT, 8 ); #ロック解除
はいらない
0961nobodyさん03/03/11 21:06ID:???
flock( OUT, 2 ) || &error("失敗");
??
0962nobodyさん03/03/11 21:57ID:???
>>959
あってるYO
ファイルロックのテストは、適当にfork関数で多数の子プロセス上で排他処理させるか
指定時刻にファイルの読み書きのループを一斉に開始するスクリプトなどで
気の済むまでやるしか無いでしょう
もちろん、後からでも正常に処理できたかは分るように、読み書きする内容はキチンとプログラムしましょう
0963nobodyさん03/03/11 21:58ID:???
あ・・・テストは自分のPC上でローカルでどうぞ
0964nobodyさん03/03/11 21:59ID:???
>>959
危なっかしいけど、まあいいだろ
ロック解除は不要
0965nobodyさん03/03/11 22:46ID:???
>>964
あなたは、随分と、偉そう、ですね?
096694903/03/12 18:36ID:???
皆様ご親切にありがとうございました。
>>964さん
この記述は危ないんですかね?
0967nobodyさん03/03/12 22:27ID:???
>>966
この部分だけじゃ$logfileがどの程度重要なものか
わからないけど、十分な安全性があるとは言えないな
0968nobodyさん03/03/13 01:28ID:???
>>967
$logfileが重要かどうかではなくて、その内容によるYO
>>966
ファイルロックトも兼ねてテストすれば、問題点はすぐに気が付くハズ・・・
0969nobodyさん03/03/13 01:29ID:???
>>968
なんだ・・・ファイルロックトって(w
ファイルロックだYO
0970nobodyさん03/03/13 01:54ID:???
open(OUT,">$logfile") ←この時点でファイルはクリアされる
              ←ここで別プロセスがファイルを操作する危険も
flock( OUT, 2 );
print OUT @lines;   ←この前までにプロセスが死んだらファイルは破損
flock( OUT, 8 );
              ←ここで別プロセスがファイルを操作する危険も
close(IN);        ←実際の書き込みが行われるのはここ(オートフラッシュなしの場合)
0971nobodyさん03/03/13 10:07ID:???
>>970
なるほど、open(FH, ">filename") でファイルを開いただけでは
ファイルは変更されていない状態だと思っていましたが・・・確かに危険ですね
">>filename"などでオープンして、turncateで0指定する方法をとるべきか・・・
良い事を教えてもらいました。ありがとうございます
失礼しました
0972山崎渉03/03/13 17:00ID:???
(^^)
097393103/03/15 11:29ID:???
>>954さんが言われたとうり自分でできるところまでやってみました。
改造した部分だけのソース⇒http://csx.jp/~lgyec/ichats.data
ichatのソース⇒http://csx.jp/~lgyec/ichat.data
こういう風にやっても、自分の発言を削除をクリックしても”クリアメッセージ”と自動的に発動しません。
援助お願い致します。
0974ひよこ名無しさん03/03/15 12:43ID:???

(,,゚Д゚)http://www.geocities.co.jp/HeartLand-Yurinoki/3749/dustbox.html
0975名無し03/03/15 16:35ID:55qzOCkc
KENTさんの掲示板
http://www.kent-web.com/bbs/fantasy.html?
に、”タイトル”を入力する項目を追加したいのですが
いざやってみたら、上手くいきませんでした。
この場合、どこをどういじればいいのでしょうか?
0976ウマー(゚Д゚)@Apw5yill☆2ch03/03/15 16:39ID:abzlUrYY
質問です。CGIで例えば、****.cgi?1111
みたいな、?1111を付け加えて表示させる物があります。そこで、
URL転送を使って、***.com/1111を入力すると、****.cgi?1111が表示
されるように、転送先を****.cgi?にしましたが無理でした。
なにかいい方法はありませんか?
097700703/03/15 16:48ID:???
タイトル入力するところあるぞぃ
# タイトル名
$title = "Fantasy Board";
ってやつが
0978nobodyさん03/03/15 16:53ID:???
>>973
while (<IO>){
 if ($_ =~ /<>$ip/){
  @y2=split(/<>/,$_);
  if ($y2[6] ne $ip){
   push(@log,$_);
  }else{
   push(@log,'All Clear (^-^)v');
  }
 }else{
  push(@log,$_);
 }
}
0979nobodyさん03/03/15 16:54ID:???
>>976
転送先を****.cgi?1111
0980ウマー(゚Д゚)@Apw5yill☆2ch03/03/15 16:58ID:abzlUrYY
は、できたんですが、その他にも2222や3333とも指定したいのです。。
0981nobodyさん03/03/15 17:07ID:???
>>980
ドキュメントルートに***.com/以降を受け取れるcgiでも作って置けばいい

尚、ここは改造スレにつきスレ違い
0982nobodyさん03/03/15 18:20ID:???
>>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がでました。
援助お願いします。
0983nobodyさん03/03/15 19:23ID:???
>>982
あのままコピペしたんじゃないだろうな?
全角スペースを半角かタブに置き換えたか?
0984nobodyさん03/03/15 21:59ID:6KH7Xn0j
>>976
>URL転送を使って
多分/以降のデータは中継されないから無理
0985nobodyさん03/03/15 22:06ID:???
   ,.´ / Vヽヽ
    ! i iノノリ)) 〉
    i l l.´ヮ`ノリ <先生!こんなのがありました!
    l く/_只ヽ    
  | ̄ ̄ ̄ ̄ ̄|
http://saitama.gasuki.com/aomori/
098697503/03/15 23:45ID:MaN1zNKv
>>977
いや、掲示板のタイトルじゃなくて
ここのスレッドにタイトルをつけたいのです。
0987nobodyさん03/03/16 13:58ID:???
ここのスレッドとはどこのスレッドですかぁー?w
0988nobodyさん03/03/16 13:59ID:t8L+n8I+
>>983全角スペースを半角かタブに置き換えたか? ってどういう意味ですか?
0989nobodyさん03/03/16 14:08ID:???
>>988
意味も何も、そうしたかと聞いてる
0990nobodyさん03/03/16 15:29ID:vOOsWTxU
そのまま貼り付けたんですけど。
0991nobodyさん03/03/16 16:21ID:???
>>990
アホか
コピペした部分の全角スペースを置き換しれ
0992nobodyさん03/03/16 17:44ID:KSrtergb
新すれはどこですか?
0993nobodyさん03/03/16 17:47ID:WBb98oow
http://www.pink-angel.jp/betu/linkvp2/linkvp.html
★その目で確認すべし!!★超おすすめ★
0994nobodyさん03/03/16 17:51ID:???
>>992
ないから、いるなら立てて
0995nobodyさん03/03/16 18:08ID:vOOsWTxU
>>991さん無事できたのですが。
All Clear (^-^)v > () と名前のところにそのALL Clearとでて文字のところに()とでます。
援助お願いします。
0996nobodyさん03/03/16 18:15ID:vOOsWTxU
↑の続きで
その自分の発言を削除を押した後発言をするとAll Clear (^-^)v > () が消えてしまいます。
0997nobodyさん03/03/16 18:16ID:x5aWnNPV
いきなり乱入1000
0998nobodyさん03/03/16 18:24ID:MtdvS7v9
1000!
0999nobodyさん03/03/16 18:24ID:MtdvS7v9
とう!
1000nobodyさん03/03/16 18:24ID:MtdvS7v9
1000げっとーーーーーーーーーーーーーーーズザァアア
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。