トップページ⇒php
982コメント390KB

スクリプト改造工房 Part3

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/02(水) 21:59ID:nr93n3do
「こういうふうにスクリプトを改造したいけどやりかたわかんないよー」
という人がいましたらここで聞いてください。
ひょっとしたらアドバイス出来るかもしれません。

前スレ
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=958370869
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=986986227
#板移動に伴い「CGI改造工房」→「スクリプト改造工房」に改名

なお、質問するときは
1)そのスクリプトのある場所(URL必須、拡張子".txt"でアップすればなお良し)
2)どんな風に改造して欲しいのか? (完成イメージHTMLを用意すればなお良し)
を必ず明記しよう。
0428名無しさん@お腹いっぱい。01/10/17 16:08ID:eEGCYKUq
The Room で公開されている Link Ring というスクリプトのアクセスランキング機能部分で、
.docomo.ne.jp .ezweb.ne.jp .ido.ne.jpなどのモバイルのアクセスしか
カウントしない(PCからの投票制限機能)ように改造をお願いいたします。
The Room Link Ring:http://dream.lib.net/room/cgi/e_linkring.html

The RoomのRanking Linkは携帯/PCからの投票制限機能があります。
The Room Ranking Link:http://dream.lib.net/room/cgi/e_ranklink.html

Link Ringのスクリプトをアップロードしましたのでご覧下さい。
http://waiwaiwai_00.tripod.com/linkring.txt
http://waiwaiwai_00.tripod.com/lr_admin.txt
http://waiwaiwai_00.tripod.com/lr_mail.txt
http://waiwaiwai_00.tripod.com/lr_prf.txt
http://waiwaiwai_00.tripod.com/lr_user.txt

お手すきの時にでもよろしくお願いいたしますm(_ _)m
0429名無しさん@お腹いっぱい。01/10/18 18:11ID:???
http://isweb37.infoseek.co.jp/diary/kentapyu/cgi-bin/bbs.cgi
この掲示板の
引用色は半角の>しか対応してなので
全角にも対応させたいのです
http://isweb37.infoseek.co.jp/diary/kentapyu/plug/all.pl.txt
これの
# 引用部分強調
if ($quotation_color) {
$in{'comment'} =~ s/([\>]|^)(>[^<]*)/$1<b style=color:$quotation_color>$2<\/b>/g;
$in{'r_comment'} =~ s/([\>]|^)(>[^<]*)/$1<b style=color:$quotation_color>$2<\/b>/g;
ここをどーかえたらいいのでしょうか?
よろしくお願いします。
0430名無しさん@お腹いっぱい。01/10/18 19:33ID:???
答えは30行後に(誰かの真似)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
$in{'comment'} =~ s/([\>]|^)((?:&gt;|>)[^<]*)/$1<b style=color:$quotation_color>$2<\/b>/g;
$in{'r_comment'} =~ s/([\>]|^)((?:&gt;|>)[^<]*)/$1<b style=color:$quotation_color>$2<\/b>/g;
043143001/10/18 19:34ID:???
>答えは30行後に(誰かの真似)
「正解は30行後に。」

だった。鬱だ死のう。
043242901/10/18 22:25ID:???
>>430
うまくできました、
ありがとうございました。
0433名無しさん@お腹いっぱい。 01/10/19 01:30ID:???
>>428
まだそんなに見てないけど、具体的にどれ位アクセスさせたく無いです?
(PCは一切駄目とか、投票のみ不可とか)、一応しょぼいサブルーチンが有ったので

#端末に含まれるHOST名をならべます
@allowhost = (
'.docomo.ne.jp',
'.ezweb.ne.jp',
'.ido.ne.jp',
);

以下をソースの一番下にでも追加します
sub Host_check{
    my ($stat,$pack);
    if (!$ENV{'REMOTE_HOST'}||$ENV{'REMOTE_HOST'} eq $ENV{'REMOTE_ADDR'}){
        $pack = pack('C4',split(/\./,$ENV{'REMOTE_ADDR'}));
        $ENV{'REMOTE_HOST'} = gethostbyaddr($pack,2)||&error('携帯以外からのアクセスは出来ません<br>');
    }
    foreach (@allowhost){
        if ($ENV{'REMOTE_HOST'} =~ /$_/){
            $stat = 1;
            last;
        }
    }
    unless($stat){&error('携帯以外からのアクセスは出来ません<br>');}
}

後は、制限したい処理の手前でHost_check;で呼び出せば、エラールーチン(既存)に飛ばされます
照合部分が泥臭いですが10件位なら問題無いと思います(突っ込み歓迎です)
043442801/10/19 21:21ID:???
>433さん
レスありがとうございますm(_ _)m

>まだそんなに見てないけど、具体的にどれ位アクセスさせたく無いです?
>(PCは一切駄目とか、投票のみ不可とか)、一応しょぼいサブルーチンが有ったので

PCはアクセスは自由で、ランキング投票のみ不可(↓のサンプルの「<Previous」などをクリックしてもカウントせず、ランキングに反映しない)といった感じになれば、と思います。
http://dream.lib.net/room/cgi/s_linkring.html
#Link Ringは「<<Previous5」「<Previous」「Random」「Next>」「Next5>>」をクリックするとクリック数がカウントされ、ランキングに反映されるという仕様みたいです。

そして、以下のホストのクリックのみをランキングに反映する、といった感じです。
.ezweb.ne.jp .ido.ne.jp .docomo.ne.jp .cmchuo.uttpnet.ne.jp .em.nttpnet.ne.jp .mnx.ne.jp .mopera.ne.jp
.jp-c.ne.jp .jp-d.ne.jp .jp-k.ne.jp .jp-q.ne.jp .jp-n.ne.jp .jp-h.ne.jp .jp-t.ne.jp .jp-s.ne.jp .jp-r.ne.jp
0435名無しさん@お腹いっぱい。01/10/21 00:03ID:O7up0kSg
sub Host_check{
  # カウントするホスト
  my @allowhost = (
  '.docomo.ne.jp',
  '.ezweb.ne.jp',
  '.ido.ne.jp',
  以下略
  );
  my ($stat,$pack);
  if (!$ENV{'REMOTE_HOST'}||$ENV{'REMOTE_HOST'} eq $ENV{'REMOTE_ADDR'}){
    $pack = pack('C4',split(/\./,$ENV{'REMOTE_ADDR'}));
    $ENV{'REMOTE_HOST'} = gethostbyaddr($pack,2)||return(0);
  }
  foreach (@allowhost){
     if ($ENV{'REMOTE_HOST'} =~ /$_/){
      $stat = 1;
       last;
    }
   }
   if (!$stat){return(0);}
  else{return(1);}
}

56行目に my $countstatus = &Host_check(); ←これを入れる
後76、77、81、82、114行目をそれぞれ下の様に書き換え

76 $access[$num{$act}]++  if $countstatus;
77 $access[0]++          if $countstatus;
81 $y2[7]++              if $countstatus;
82 $y2[7+$siteaccess]++  if $countstatus;
114 $access[1]++  if $countstatus;

こんな感じでどうでしょう、後は細かい所でインクリしたくなければ
if $countstatus; を足していけばokです。

# この人、インデントが変で凄く読みにくい (-_-...
0436名無しさん@お腹いっぱい。01/10/21 00:06ID:???
上げてしまった..>>434です
総カウントとかは増やした方が良いんじゃないかな....
043742801/10/21 18:27ID:???
何度もすみません、、、
エラーが出てしまって動かなくなってしまいました。
添削お願いできませんでしょうか…。
http://waiwaiwai_00.tripod.com/x_linkring.txt

>総カウントとかは増やした方が良いんじゃないかな....
ですね。すっかり忘れておりました(汗
043842801/10/23 19:15ID:uIcZ1pAz
435さんには感謝です。

なのですが、、、HELPです。どなたか437の添削お願いします…
とりあえず、あげさせていただきます。
0439名無しさん@お腹いっぱい。01/10/23 19:38ID:???
>>438
空白は正しくは &nbsp; なのに、 >>435氏は &nbsp として
いる為そのまま表示されるブラウザがあります。(IEは空白になるけど。)

ソース内の &nbsp を スペースに置き換えましょう。
0440名無しさん@お腹いっぱい。01/10/23 23:55ID:???
>>437
エラーメッセージはわかる?
2行目あたりに
use CGI::Carp qw(fatalsToBrowser);
を入れればブラウザに出るはず。
044139501/10/24 11:05ID:RlInA2Z+
以前、掲示板から日本語機能(?)を取り除く方法でお世話になった395です。
http://ebi.2ch.net/test/read.cgi/php/988808396/392-395n
これは本当に助かりました。無事に掲示板を設置できました。
で、またわからないことがあります。
今度は、フォームメールとゲストブックの両方の機能のあるcgiを使いたいので
ですが、これの日本語機能を除く方法がまたわかりません。
(前回教えていただいたことを参考に少しいじったりしたのですが、ちょっと
違うみたいで。)
ここ↓にテキストでアップしてみました。
ttp://k_napper.tripod.co.jp/kakimacho_cgi.txt
(設定画面の日本語はそのままで問題ないです。)
御教授いただけるとありがたいです。
0442しっぽなし01/10/24 17:44ID:???
>>437、同じく編集した部分の" "は全て不用。
元が動いてたなら追加分は文法的に正しいっすよ。。


>>438、えっとリンク先のポインタが誤爆っててイマイチ
理解出来ねっす ;;
取り合えず日本語絡みを全部外すだけなら、
42,197,932,938,941,955行目の読み込みと置換部分を、削除又はコメントアウト

次に、HTTPヘッダとHTMLヘッダからもコード指定部分を外す。
(方法はリンク先に書いてるのと同じ)
477 print "Content-type: text/html\n\n"; #修正
479 削除かコメントアウト
これで、取り合えずBBSはプリミティブな状態になります(lang特定はブラウザ任せ)

メールの方は、漏れは良く分かりません、Content-Transfer-Encoding:を
UTFにすれば良さそうだけど、、、(UTFってしょぼいメーラで読めるのかな??)
詳しい方、お願いしまする
取り合えず上でjcodeを外したら、日本語のメールを出すと良くないので注意!
(us-asciiは勿論OK)

※もしかして全言語、全UA対応とかの壮大なプロジェクトだったら
このレスは全く役立たねッス  w
0443しっぽなし01/10/24 17:45ID:???
う、失敗
同じく編集した部分の" "は全て不用。
      ↓
同じく編集した部分の"&nbsp"は全て不用。
0444名無しさん@お腹いっぱい。01/10/25 22:22ID:nmTEnId3
すみません改造の方法教えて下さい。

私はThe Room のRanking Lingでi-mode用ランキングサイトを
やっています。不正行為が多いので投票ページを付けようとし
たのですが、The Roomの掲示板を見るとi-mode用ではリファラ
ーが取れないので投票ページは使用は出来ないと書いてありました。
でも、以下のサイトのように使用出来るよう改造している所もあり
ました。
http://homepage1.nifty.com/nttdocomo/pink/
上のようにするにはどこを改造すればいいのでしょう?

ranklink.cgiと関連のcgiは以下のURLにUPしました。
どなたかよろしくお願いしますm(_ _)m

http://203.174.72.111/hiro-1977/
044542801/10/26 15:17ID:???
Link Ringの件ではお世話になっております。

439さんとしっぽなしさんのおっしゃる通り、
 をスペースに置き換えることによって解決しました。

とてもわかりやすかったです、ありがとうございました。
0446名無しさん@お腹いっぱい。01/10/26 22:12ID:???
>>444
>不正行為が多いので投票ページを付けようとしたのですが、

この文が理解できない。「上のように」の意味も判らない。
そのCGIをまたーく知らない俺に判るよう説明すれ。
044744401/10/26 23:53ID:isB2gMjh
>>446
Ranking Linkでは投票ページを使用しない場合、リンクタグをクリック
しただけでカウントされてしまいます。だからサムネイル画像にリンクタグ
を入れるなどの不正行為があるわけです。

でも投票ページを使用した場合は例えば、
http://hpcgi1.nifty.com/nttdocomo/pink/02/ranklink.cgi?id=aibou
のようにリンクをクリックすると投票ページに飛ばされ、そこでENTERを
クリックすることにより初めてカウントされるので不正が防げるのです。

だから投票ページを付けたいのですが、Ranking Linkは携帯用のバージョン
では投票ページが使用出来ないのです。PCでアクセスすれば何も問題ないの
ですが、i-modeでアクセスすると投票ページでENTERをクリックすると投票
ページにバックしてしまいます。

しかし上のURLや、以下のようなサイトは投票ページが使用出来るよう
改造しています。
http://www.zukozuko.com/rank/01/ranklink.cgi?id=jyky

どなたか改造の方法わからないでしょうか?
0448名無しさん@お腹いっぱい。01/10/26 23:58ID:???
説明しても>>446には出来ないと思われ・・・
0449名無しさん@お腹いっぱい。01/10/27 11:44ID:oMov98wT
はじめまして。改造方法を教えて頂きたく書かせてもらいます。

http://www.linkclub.or.jp/~k-tamura/aputt/
こちらの「たむたむ日記帳」を改造して同じ日に複数投稿と
記事No.をつけたくと考えています。

自分でいろいろ考えてやってはみたものの編集すると
その日の日記がすべて同じになってしまいます。
詳しい方改造のアドバイスをいただけると幸いです。

よろしくお願いします。
0450名無しさん@お腹いっぱい。01/10/28 00:14ID:YNxVfWza
ちきい
045145001/10/28 00:15ID:???
うあ,キー戻し忘れた・・・
0452名無しさん@お腹いっぱい。01/10/28 01:30ID:???
>>450
みちついみにのちみちみんななすんらのな・ゅてちすち
0453名無しさん@お腹いっぱい。 01/10/28 01:33ID:???
改造してもらいたい人は、配布サイトへのリンクじゃなくて、
ソースをテキストで上げてリンクした方が良いよ。
答えを貰っているのは殆どこのパターン。
0454名無しさん@お腹いっぱい。01/10/28 03:45ID:OOZtNYYb
>>444と>>447です。
自分なりにあれこれ考えてますがどうしてもわかりません(T_T)
誰かアドバイス下さいm(_ _)m
0455名無しさん@お腹いっぱい。01/10/28 18:12ID:???
>>454
「i-modeでリファラが取れない」から無理なら、
$ENV{REMOTE_HOST} =~ m/docomo|jp-q|skyweb|ezweb/i;
で、リモートホストに携帯特有の情報があったらリファラチェックせずにカウント、
とすればいいんじゃないかなぁ〜と思い、
448で煽られたので改造しようと思ったけどソース見て面倒になって挫折。悪いね。
0456名無しさん@お腹いっぱい。01/11/01 16:25ID:2j9P7UBD
投稿者が書き込みを修正できないプログラムを
修正できるように改造するのって難しいでしょうか?

ちなみに俺がやりたいのはtackyさんの「書きま帳」の改造なんだが・・。
0457名無しさん@お腹いっぱい。01/11/01 17:22ID:???
1:ログに投稿毎のユニークな値が埋まっている(レス番とか,通算秒数とか)
2:同じくログにパスワードが埋まっている
なら適当にコピペすれば出来ると思う
無ければ機能を足す手間が掛かる
書きマ帳は知らない
0458つーか・・・01/11/01 17:29ID:???
initializeってついてるやん w
045945601/11/02 11:28ID:???
>>458
管理人しか修正できないんですよ。
それを投稿者本人が修正できるようにしたいんです。

>>457
1:に該当するみたいなので、ちょっとがんばってやってみます。
ありがとうございました。

ここ、sage進行なんですか?
一応sageます。
046045601/11/02 14:13ID:???
>>459に補足、というか訂正。
>>458
initializeって、質問の項目のinitializeで、
書き込みの修正は出来ないんでした。(管理人も)
やっぱりダメかなー。
0461名無しさん@お腹いっぱい。01/11/05 02:04ID:HWi+Nt0A
http://www.apc.7777.net/file/bbs2ch/ にあります16.ZIP
を使用しているんですけど、スレッド一覧を飛びにくくするには
どのように改造すればよろしいのでしょうか?
連続投稿規制等、色々やってみましたが駄目でした。もうウンコ投げまくり
0462名無しさん@お腹いっぱい。01/11/05 02:16ID:???
まともなServerに移動する
0463名無しさん@お腹いっぱい。01/11/05 02:28ID:???
niftyはサポート外です(w
0464名無しさん@お腹いっぱい。01/11/05 02:44ID:???
はは、確かに
flock空振りしてるんなら他の関数使って
ロック組むとか
ロックが甘いなら他の関数に変えてみるとか
open (FH,">hogehoge");
flock FH,2;
とかなってるんだったら
open (FH,"+<hogehoge");
flock;
seek FH,0,0;
print FH "hugahuga";
$foo = tell FH;
truncate FH,$foo; とか。。
飛びまくってるって事は前者だと思うけど。
これ以上はワカラソ
046546101/11/05 05:06ID:???
>>462
レンタルサーバーでも、当りハズレがあるん?

>>464
bbs.cgi内を検索してみました
この個所がロック?でどうすれば良いんだろう・・・

eval{flock(SUBW,8);};
close(SUBW);
046646101/11/05 20:39ID:HWi+Nt0A
ためしに、8を16に変更して放り込んだら、今まで以上に�dだ
0467仕様書無しさん01/11/05 22:58ID:D9DffOEh
16って何だよ (´д`;)
> レンタルサーバーでも、当りハズレがあるん?   >勿論
他のプログラム(カウンタとか)は置いてないの?
もしそっちが�dで無いなら、それのソース見てロック用のサブルーチンを
使ってみなよ、大体 lock、unlock って言う対になってるか
lock(1)みたいにパラメータ渡すかのどっちかだから。。。
それとflock,8 はロック解除だから全然関係無いよ。
バンガレ(・∀・)
046846101/11/06 00:56ID:Ud61Q7HA
>>467
なるほど、数字は時間かと思った
取り合えず $| = 1; を追加してみた
0469名無しさん@お腹いっぱい。01/11/06 06:19ID:AMScTkU5
ランキングCGIなんですが、下のままだとi-modeでアクセス
するとエラーが出ます。
i-modeはリファラーがとれないのでHTTP_REFERERが怪しい
と思うのですが、どう改造すればいいのでしょう?

# ◇サブルーチン12:「IN処理」
sub link_in {
if ($in{'act'} eq 'vote' || $vote_key == 0) {
if ($in{'act'} eq 'vote') {
$ref = $ENV{'HTTP_REFERER'};
$ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if ($ref !~ /$script_pass/i) { &error("不正なアクセスです"); }
}
0470名無しさん@お腹いっぱい。01/11/06 06:40ID:???
# ◇サブルーチン12:「IN処理」
sub link_in {
if ($in{'act'} eq 'vote' || $vote_key == 0) {
if ($in{'act'} eq 'vote') {
$ref = $ENV{'HTTP_REFERER'};
$ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if ($ref !~ /$script_pass/i) { &error("i-modeはいやづら。。。"); }
}
0471名無しさん@お腹いっぱい。 01/11/06 07:03ID:???
>>469
エラーを消すだけ?
$refを他で使ってないなら#でコメントに。

# $ref = $ENV{'HTTP_REFERER'};
# $ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# if ($ref !~ /$script_pass/i) { &error("不正なアクセスです"); }
0472名無しさん@お腹いっぱい。01/11/06 07:24ID:???
>469
はじく効果なくなるが
$ref = $ENV{'HTTP_REFERER'} || $script_pass;

use of undefined valueでエラー出てるなら
$ref = $ENV{'HTTP_REFERER'} || '';
0473名無しさん@お腹いっぱい。01/11/06 18:46ID:???
FROGWORKさんのFROGBBSプレイに
本文中のURLを自動リンクさせるという機能を追加しようと思って
タグ禁止処理の場所に
$comment =~ s/(https?|ftp|news):\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]
+)/<a href=\"$1:\/\/$2\">$1:\/\/$2<\/a>/g;
を追加したら、抹殺とかの機能がでなくなった・・・。鬱。
未熟者が改造するとどこかにボロが出る。
047446901/11/06 23:34ID:GKzEAczp
>>472
$ref = $ENV{'HTTP_REFERER'} || $script_pass;
でとりあえずi-modeでもアクセス可能になりましたが、困ったことに
PCの重複投票がチェック出来なくなりました。
「はじく効果なくなる」とはそういう意味だったのですか?

ちなみにPCで連続アクセスすると重複投票のチェックは出来るのですが、
一旦i-modeでアクセスしてから再びPCでアクセスすると、チェックされ
ずにカウントされるようです。
i-modeでアクセスすることによりログの一部が消えるとか・・なんかわ
かりませんが、解決方法ありませんか?
047546101/11/07 00:27ID:1ns3B3ND
$| = 1; 程度じゃ効果無かったみたい
今日も元気よく投げまくり、感動した。人数が多すぎなのかな
0476名無しさん@お腹いっぱい。01/11/07 01:59ID:w4jQYe5D
>>474
>>471氏のは当然検討済みだよね?

$ref = $ENV{'HTTP_REFERER'} || $script_pass;
は,リンク元のアドレス(リファラ)が取得できなかった時に,
「正規のリンク元から来た」ということにしているだけ。
$refは$script_pass以外からのアクセスをはじくのに使う。

下段の重複投票は,多分直前のアクセスしか記録してないため。
もっと知りたいなら,そのソースもどっかに上げよう。
0477名無しさん@お腹いっぱい。01/11/07 02:07ID:???
>>465
eval{flock(SUBW,8);};
は消してもかまわない。
closeで自動的にflock解除してくれる。
047846101/11/07 06:50ID:1ns3B3ND
>>477
変更前
open(WIP,">$file");
eval{flock(WIP,2);};
foreach(@IP){
print WIP "$_\n";
}
eval{flock(WIP,8);};
close(WIP);
chmod(0600,$file);

↓変更後
open(WIP,">$file");
eval{flock(WIP,2);};
foreach(@IP){
print WIP "$_\n";
}
close(WIP);
chmod(0600,$file);

でイイの?
0479>>46101/11/07 07:10ID:???
sub lockF { # 使い方:排他宣言 lockF('FH',2) 解除 lockF('FH',8)
    my $lockFile = '../'.$FORM{'bbs'}.'/'.lc($_[0]).'.lock';
    my $lockMode = $_[1];
    my $cntAndFlag = 0;

    if ($lockMode == 2) {
        while ($cntAndFlag < 3) {
            if (-e $lockFile) {sleep (3);}
            else {
                open (LOCK,">$lockFile")||&DispError('','ロック不能!ヒィー(((゚Д゚)))ガタガタ');
                $cntAndFlag = 0;
                close LOCK;
                last;
            }
            $cntAndFlag++;
        }
    } elsif ($lockMode == 8) {
        unlink($lockFile)||&DispError('','ちゃんと計算されてる、角度とか');
    } else {
        &DispError('','(´-`).。oO(なんでこんなに説明してるのにここに飛ぶんだろ?');
    }

    if ($cntAndFlag && $lockMode == 2) {
        &DispError('',"オイ、お前等!!ファイルが詰まっています。$lockFile");
    }
    return;
}
0480名無しさん@お腹いっぱい。 01/11/07 07:14ID:???
ああ、、タイミング良いな 藁
まず、今までやった事全部的外れだから忘れる -> 全部元に戻す。

eval{flock(SUBW,2);};  -> lockF('SUBW',2);
eval{flock(SUBW,8);};  -> lockF('SUBW',8);

SUBW を囲んでる ' が無いとシボン
 
0481名無しさん@お腹いっぱい。01/11/07 07:20ID:???
途中で押しちゃった、、、
他にも使えるからね、例えば上のWIPだったらlockF('WIP',2);ね
ただし、絶対lockF('〜〜',8); と対にする事
これは消してかまわなくない、かなり適当だからあんまり参考にするな w
がんばってね
048246101/11/07 07:38ID:1ns3B3ND
>>479
??
>>480-481
早速やってみます
048346101/11/07 08:04ID:1ns3B3ND
500エラーが出ちゃった 間違ってる?

open(WIP,">$file");
lockF('WIP',2);
foreach(@IP){
print WIP "$_\n";
}
lockF('WIP',8);
close(WIP);
0484お〜〜い!!01/11/07 08:09ID:???
479をソースに貼り付けるんだよー (´д`;)
その貼り付けた部分を呼び出してるんだよ。
呼び方はそれで良いから、subjectが飛ぶならSUBWでやらないとダメ
エラーメッセージは直しちゃだめ! ^^
048546101/11/07 09:02ID:1ns3B3ND
479のソースをbbs.cgiとsubbbs.cgiの 最初付近に貼りつけて
SUBWの部分だけ書き換えて、やってみたけど

またしても憎き500エラーが出てしまった、何でだろ
048647401/11/07 17:33ID:cvRZ74aw
>>476
>重複投票は,多分直前のアクセスしか記録してないため。

そのようです。
0487デフォルトの名無しさん01/11/07 17:45ID:???
あれ、おかしいなあ。。
ここに来る前の状態にしてbbs.cgiの一番下にペーストするんだよ。ちゃんと最後の
 }までだよ。その後動作確認、動かなければ貼り方がおかしいよ。
それで、動いたら今度は上に書いてたCALL部分を書きかえてみて、lockF('SUBW',〜); とかにね。

家のPCのは動いてたから大丈夫だよ、今見れないけど。。
048846101/11/08 00:50ID:y3o9Bsij
>>487
ワーイ 指示どうり一番下に貼りつけたら、動きました
良い感じなんですけど、今日も微妙に飛びました
なんか後少しの予感。
0489>46101/11/08 01:45ID:???
sub lockF { # 使い方:排他宣言 lockF('FH',2) 解除 lockF('FH',8)
    my $lockDir = '../'.$FORM{'bbs'}.'/'.$_[0].'_LOCK';
    my $lockMode = $_[1];
    my $cntAndFlag = 0;
    if ($lockMode == 2) {
        while ($cntAndFlag < 5) {
            if (mkdir($lockDir,0777)){
                   $cntAndFlag = 0;
                   last;
            } else {
                sleep (1);
            }
            $cntAndFlag++;
        }
    } elsif ($lockMode == 8) {
        rmdir($lockDir)||&DispError('','ちゃんと計算されてる、角度とか');
    } else {
        &DispError('','(´-`).。oO(なんでこんなに説明してるのにここに飛ぶんだろ?');
    }
    if ($cntAndFlag && $lockMode == 2) {
        &DispError('',"オイ、お前等!!ロックディレクトリが詰まっています。$lockDir");
    }
    return;
}
0490>461 01/11/08 01:50ID:???
すまんすまん、何か一番しょぼいやり方してたみたい、、普段flockしか使わないから・・・
上のやつと差し替えてみて。呼び方は同じだからそのままで良いよ
眠いから一回しかテストしてないけど多分大丈夫  w

// しかし、いくらアトミックじゃないって言っても1ステップで
// そうそう割り込まれるもんじゃ無いけどな・・・
// 本家並にアクセスあんの??
0491名無しさん@お腹いっぱい。01/11/08 20:09ID:???
ゆいちゃっと2000におみくじ機能を追加する事ができません・・
恐らく、スクリプト1の改造方法で会っているけど、
チャットウインドウでの「おみくじ」発言に「<b>おみくじ<b/>」みたいな形で
chat.cgiに入っているから駄目なのだと思います。
初心者で申し訳ないです・・何卒、宜しくお願いします。

設置場所 http://cgi.office.interq.or.jp/virgo/izumino/cgi-bin/yunichat/lobby/sun/
CGIスクリプト1(恐らく間違った改造をしたもの) http://www.yuniqlo.com/chat_cgi.txt
CGIスクリプト2(未改造) http://www.yuniqlo.com/chat.cgi_2.txt
049249101/11/08 23:38ID:D/5tN8xA
技術のある方、どうかお願いします。。。
0493名無しさん@お腹いっぱい。01/11/09 01:55ID:???
>>492
技術無いんだけど、ちょっとやってみた。

CGIスクリプト1(恐らく間違った改造をしたもの)の168行目に
$value = "$name\t$color\t…略 ってのがあるから、その下に追加。

#####おみくじ 2/2#####
if ($chat2 eq 'おみくじ') { # $emoji追加時の半角スペース2つ
  $kuji_file = './kuji.dat';#おみくじファイル
  open R, "$kuji_file" or &ended("$kuji_file open error");
  rand($.) < 1 and chomp($msg = $_) while <R>;
  close R;
  $value = "巫女たん\thotpink\t\t$msg>$nameたん $emoji\t\t$date\tyuichat.com\t\t\t\t\n$value";
}
#####おみくじ 2/2ここまで#####

今までの、おみくじ 2/2は削除。不具合でたら自分で解決して。
049446101/11/09 03:05ID:xPL7a9xw
>490
プログラムがぽんぽん書けるなんて凄いです
差し替えて、様子を見てみました 半分ほど飛んでました
ユーザー権限で動作するサーバーだからかな??
if (mkdir($lockDir,0777))→if (mkdir($lockDir,0705))
かな?

>// 本家並にアクセスあんの??
とりあえず、リロードすれば何処か書き込まれています
テレホタイムには、そこらへんでチャット状態;;
0495初心者01/11/09 13:34ID:???
stlfbbsでリモートホストを取得して管理者用のページで表示する方法ってありませんか?

stlfbbsはここにあります。
www.blk.mmtr.or.jp/~stlf/softwares/
049649101/11/09 18:27ID:7iXE60XR
>>493さん
そのように改変し、以下の場所に全部アップロードしたのですが・・・
どうもダメみたいです。本当に申し訳ないです・・・
私自身改造出来れば良いのですが、現在勉強中です。
他力本願で、本当に申し訳ないですが・・・どなたか、よろしくお願いします・・・。

設置場所 http://cgi.office.interq.or.jp/virgo/izumino/cgi-bin/yunichat/lobby/sun/
CGIスクリプト1(多分間違った改造をしたもの) http://www.yuniqlo.com/chat_cgi.txt
CGIスクリプト2(未改造) http://www.yuniqlo.com/chat.cgi_2.txt
0497>>46101/11/09 19:36ID:???
ちょっと真面目に見てみたよ、16.zipでいいんだよね??

bbs.cgiの789行目付近をこんな感じにしてみて。

open(SUBW,">$subject");
eval{flock(SUBW,2);};
#一括書き込み
↓
open(SUBW,"+<$subject");
lockF('SUBW',2);
seek SUBW,0,0;  # この行と
truncate SUBW,0;# この行が増えた
#一括書き込み

※ 因みに少し下でSUBWがまた出てくるけど、これはimode用の
  indexだからね、これは関係無い。

>if (mkdir($lockDir,0777))→if (mkdir($lockDir,0705)) 
ユーザ権限で動くなら何でも良いよ、ダミーだからね。
もしロックディレクトリが残った時は
板のindex2と同じディレクトリに 〜〜_LOCK みたいなお化け
が残ってる筈だから、それを消せばOK。(・∀・)

// subbbs.cgiって謎の実行ファイルは何だろう?? 
0498名無しさん@お腹いっぱい。01/11/09 20:40ID:???
>>496
貼り付けてる場所が違うよ。
$value = "$name\t$color\t$email\t$chat\t\t$date\t$host\t\t\t\t\n";
の下です…。
049946101/11/10 00:20ID:tDSKehxj
>>497
i-mode利用者がかなり居る場合 i-modeにも貼った方がイイ?
0500 01/11/10 00:24ID:snsG9aFx

●★☆●別れさせ屋●☆★●

=その他のトラブル、諸々解決します!!=

http://www.blacklist.jp
(全角を半角に直して下さい)

女性スタッフ募集中!急募!高額支給!!
0501>46101/11/10 02:56ID:???
おこんばんわー (ワラ
>i-mode利用者がかなり居る場合・・・・
うん、もし飛ぶならね、つーか使い方を説明するね。
open (〜〜,">〜〜"); って言うので > とか >> とか < とか 何にも無しとか有るでしょ?
その中でヤバイのは > だけ(書き込みモード)だから、まずそれを探す。
逆に、< とか何にも無い所で使っても、処理が増えるだけで意味が無い、っと。

例えば 821行目辺りなら・・・

open(SUBW,">$imodeindex");
eval{flock(SUBW,2);};
# 一括書き込み

を・・・

open(SUBW,"+<$imodeindex"); # > が +< に変わる
lockF('SUBW',2); lockF を呼び出す、呼んだら必ずcloseの時にlockF ('〜〜',8);する事
seek SUBW,0,0; # これと・・
truncate SUBW,0; # これを加える
# 一括書き込み

こんな感じ、5箇所位あるのかな、でも実際の所htmlはアクセス多ければ適当で良い
つのも有る(2chでhtmlが飛んでるの見た事有るかい?)
つー事でこのやり方だとsubjectが一番弱いんすよ、2ch同様。

# そろそろ仕事がテンパって来たんでもう見れないかも (´д`;)
050246101/11/10 08:13ID:tDSKehxj
>>501
今日も飛んでました、動作が遅くなったような気がしますが
ロックが効いてる証拠? 色々ありがとうでした。

(´-`).。oO(何でこんなに飛ぶんだろ、やっぱ鯖が腐ってるのかな〜
0503名無しさん@お腹いっぱい。01/11/10 14:34ID:???
串を弾くためのポートスキャンしてるだけだろ
050449101/11/11 07:28ID:Z/2ZVokB
こんにちわ、おかげさまでおみくじが出来るようになりました。
本当にありがとうございました・・
050549101/11/11 07:32ID:Z/2ZVokB
今度は、ゆいチャット向けの各部屋の参加者一覧を出すスクリプトが使えません。
http://www.umicha.com/cgi/chat/ysan100.lzh(ウイルスなんかじゃないです。
詳細としては、私の使用しているサーバーが「exec」コマンドを使用できなくしている為です。
SSI等々、他のは使用できるのですが・・・
execコマンドに代用されるようなコマンド、又は改造方法等ありましたら教えてください。
他力本願で申し訳ございませんが・・よろしくお願いします・・・
0506名無しさん@お腹いっぱい。01/11/11 09:50ID:???
>505
普通はフレームを使うか,sanka.cgiにして全部printするか,だね。
下はフレーム使った時の呼び出し側。
sanka.plでcontent-typeをprintしないと,たぶんエラーになる。

-- sanka.html
<IFRAME src="sanka.pl" width="280" height="120" scrolling="auto" frameborder="1">
知るかゴルア!
</IFRAME>
0507初心者01/11/11 14:25ID:JG2AiF5b
kentの全文検索なんですが、
あるページで1つヒットすると、
それでそのページの検索は終わってしまいます。
そのページのワード全部を検索させるには
どうしたらいいんでしょうか。
foreach $pair (@pairs) {

# ワード検索
$flag=0;
foreach (@data) {
# HTMLのタイトルを記憶
if ($_ =~ /<title>(.*)<\/title>/i) {
$title = $1;
}
# タグを無効化
$_ =~ s/<[^>]*(>|$)//g;

if (index($_,$pair) >= 0) {
$flag=1;
$msg = $_;
}
}
# タイトル名が取得できなかった場合
if ($title eq "") { $title = "無題"; }
if (!$flag) { last; }
}
if ($flag) {
# 検索結果を表示
$hit++;
print "<LI><a href=\"$path\"><b>$title</b></a>\n";
print "<DL><DT>$msg</DL><br><br>\n";
0508名無しさん@お腹いっぱい。01/11/11 15:52ID:???
if($flag){ last; }
この行を削れ。
0509初心者01/11/12 13:48ID:50PufLyA
>>508
遅いレスですみません。
めっちゃ簡単ですね。
やってみます。
ありがとうございました。
0510初心者01/11/12 15:02ID:PES/SXwW
やってみましたが、同じでした。
初心者のアタマで考えたのですが、
ヒットした箇所からあとを、
新たなデータとして再度読むような処理が必要なんでしょうか?
0511名無しさん@お腹いっぱい。01/11/12 22:37ID:???
さらに
$flag=0;
を削るか,
foreach $pair (@pairs) {
の前行にもってくるかするとどう?
0512初心者01/11/14 12:23ID:G5Oc4uFI
↑ダメ。あきらめた。
あと、indexってので検索してるので、
大文字小文字の両方に対応しません。
これって、なんとかならないのでしょうか。
0513名無しさん@お腹いっぱい。01/11/14 12:28ID:???
インデントの無いブロックだらけのソースなんて誰もまじめに読まないと思われ。

とりあえずこれで大文字小文字関係なく検索出来るはず。
index(lc($str), lc($word));
0514アップローダーの項目01/11/14 14:45ID:GCYrvbVt
すみません。
http://zurubon.strange-x.com/uploader/
のずるぼんあぷろだ
http://zurubon.strange-x.com/upload.txt(ソース)
なのですが、いくつか項目(テキスト)の追加をしたいのですが、
どこをどういじっていいのか、さっぱりわかりません。

http://www33.tok2.com/home/art/remix/upload.cgi
↑が稼動中のものです。
これに、投稿者の名前、曲のテンポ、曲のキーを
投稿できるようにしたいのです。
HTMLはわかりますが、ログ保存部分と読み出し表示部分の改造の、
両方がわかりません。

よろしければ、お願いいたします。
お時間がなければヒントだけでもいただければ、嬉しいです。
0515名無しさん@お腹いっぱい。01/11/14 18:59ID:???
いつ見てもアレなコードだ (゜∀゜)!
取り合えずマルチパートだから、
HTMLが<textarea name=comment....><type=text name=musictempo size..><type=text name=musickey size..>
だとして、750行目辺りの $comment = &post_decode; の下辺りに
$musictempo = &post_decode;
$musickey = &post_decode;
って書けば値が入るから、後は煮るなり焼くなりして下さい
って感じじゃ駄目?
051651401/11/14 20:32ID:GCYrvbVt
>>515
ありがとうございます。

まだ設置していませんが、
教えていただいた通りにして、
あとは、コメント欄と同じような感じにしてできました。
適切なアドバイスに感謝します。
0517初心者01/11/15 12:28ID:pHkP4Sth
>>513
ありがとうございます。
if (index(lc($_), lc($pair)) >= 0) {
$flag=1;
$msg = $_;
にしてみました。
ただ、もうひとつ問題点がありました。
検索結果のところで $msg を表示するようになっています。
日本語ページの場合は、短文が表示されるのですが、
英文ページの場合、なぜかページの全文が表示されてしまいます。
(むっちゃ長いので使いもんにならん。これはKENTさんの元のやつでもそうなる)
初心者のアタマで考えると、
なんで日本語の場合、短文表示されるのかも不思議なんですが・・・。
0518名無しさん@お腹いっぱい。01/11/15 13:16ID:???
>>501
subject読み込みの段階からロックしないと、
書き込んでる最中に次のプロセスが読み出そうとしたとき飛ぶ。
それかrenameを使うか。
0519名無しさん@お腹いっぱい。01/11/15 23:35ID:???
↑ ハァ(゚Д゚)??
0520名無しさん@お腹いっぱい。01/11/16 00:09ID:???
>>519
なんか間違ったこと言ってる?
http://www2.kiwi-us.com/~j_n/perl/flock.html#01
0521!=51901/11/16 15:55ID:???
飛ぶってのは0バイトになる事でしょ?
だったら読み込みなんてロックしなくても飛ぶ訳ないじゃん
renameってのも謎だし・・・
0522!=51901/11/16 15:56ID:???
あ、同期取れなくなる可能性はあるよ、そりゃ当然
スピードとのトレードオフでしょ?
0523名無しさん@お腹いっぱい。01/11/16 18:07ID:???
プロセスAがsubjectを書き込みopen
↓
プロセスAがsubjectをtruncate(サイズ0バイトになる)
↓
プロセスBがsubjectを読み込みopen
↓
プロセスBがsubjectから読み込み(0バイト)
↓
プロセスAがsubjectの更新終了
↓
プロセスBがsubjectを更新(0バイトになる)
↓
(+д+)マズー

なんか間違ってる? つーか>>520のリンク先見てもここまで
説明しないと分からない馬鹿ぞろい?
rename使ったやり方はtako時代のperl板のどっかにあったから探して。
0524名無しさん@お腹いっぱい。01/11/17 01:38ID:???
Perlメモにもあるね。
0525名無しさん@お腹いっぱい。01/11/17 04:21ID:???
ああ〜 ちょっとデンパってる? (・∀・)
>subject読み込みの段階からロックしないと、
これに対して発言したんですが?
あなたのOSはroでファイル開けても0バイトになるんですか?
いや、私の勉強不足かも知れませんが (笑
書き込みにロックしなくて何処にロックするんでしょう??
symlinkでもmkdirでもrenameでもAtmicなシステムコールなら
問題無いと思いますが?
つーか上の方のレス読まずに血管ピクピクさせて書いてそうですねあなた。
発言する前に話の流れを理解しましょ
0526名無しさん@お腹いっぱい。01/11/17 04:29ID:???
ああ、ちょっと解ったよ
昨日Perlメモ読んで誰かに教えたかったんだね、うんうん解るよ
そうかロックすればいいのか凄いね、ダブルファイルだねシパカウンタだね
ゴメン、消えるわそう言うのはちょっと勘弁。 
0527521 01/11/17 10:03ID:sdhFUdA2
うわ、思いっきり煽ってるし>>525は僕じゃ無いよ。
えっとどうでも良いんだけど、523は>>501には当てはまらないよ
どこで0バイトになるのか得意のフローチャートで良く考えてみよう。
それとリンク貼るのは良いけど、こんな簡単なこと位自分で考えて
書いて欲しいと思った
0528名無しさん@お腹いっぱい。01/11/17 14:38ID:???
誰でも知ってる様な事わざわざ間違えた挙句人を馬鹿扱いしてるってのも微笑ましいね
http://pc.2ch.net/pcqa/
■ このスレッドは過去ログ倉庫に格納されています