トップページ⇒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を用意すればなお良し)
を必ず明記しよう。
0396名無しさん01/10/09 17:03ID:zp21xSuI
ゆいちゃっとProで
[リロード] 参加者(0): ROM:(1)
を参加者とROMを逆に置き換えたいんですが、改造の仕方がわかりません
分かる方いますか?
それと、管理人 >あいうえお(10/9(火)16:49 ) ←のように
発言の最後の所に発言するたびに、時間が表示されるんですが
されないようにするにはどこを消せばいいんですか?
分かる方教えて下さい。お願いします。
0397名無しさん@お腹いっぱい。01/10/09 17:07ID:???
>>396
スクリプト見せれ。
できたら拡張子を".txt"にしてアップしたやつのURL出してね。
0398たまひめでん01/10/09 22:26ID:485Lm8iI
KENT WEBのJoyful Note V1.03を親スレッドの
返信レスを20迄等、返信レスを制限したいのです。
改造、お願いします。
0399名無しさん@お腹いっぱい。01/10/09 22:29ID:???
>>398
スクリプト見せれ。
できたら拡張子を".txt"にしてアップしたやつのURL出してね。
0400お役所仕事01/10/09 22:31ID:???
ああ、書類足りないわそれ、
ハイ次の人
0401たまひめでん01/10/09 23:06ID:???
>>399,400
さんへ
ガーン、忘れてました。。
CGIの勉強もしたいので、暫くは自分でやってみようと思います
どーしても、判らない時、アドバイス等頂けましたら幸いです。
0402名無しさん@お腹いっぱい。01/10/10 00:10ID:???
>>401
頑張りな。
0403よいち01/10/10 19:47ID:n8dYHpRc
すみません。改造の仕方を教えて下さい。

KENT WEBのaskaBBSに、訪問者が表示件数変更出来るようにしたいです。
例えばカール板みたいな感じで...。

askaBBS http://www.kent-web.com/bbs/aska.html?
カール板 http://www.zero-web.net/perl/bbs.html

宜しくお願いします。
0404方法を書けば良いの?01/10/11 00:17ID:???
まず表示件数のメニューを付ける
↓
次に何かのアクション(リロードボタンとか新規投稿とか返信とかの)が
あった時にSet-cookieみたいなサブルーチンがある筈だからそこに
上の表示件数($User_p_viewと仮定)の値を足す(ASKA=〜〜〜みたいな形式のクッキーを吐いてる筈)
↓
Get-cookieした時に表示件数($User_p_view)に値が設定されていたら、多分1ページ辺りの
記事表示数($Default_p_viewと仮定)みたいのが設定項目に有る筈だから、それを$User_p_viewで上書きする、
この代入が総ページ数の
算出なんかをした後だと、不整合が起きるから適宜上書きの場所を決める

こんな感じ、漏れは最近Perlのソース見てないからちょっと勘弁  (笑
0405よいち01/10/11 17:35ID:563HBBg.
404さん、レス有難うございます。

HTMLは少し判るので、1番目のプルダウンメニュー付けたりとかは出来ました。
それで、2番目のcookieのサブルーチンの場所も判ったんですけど
どうやって書き換えればいいのかがわかりません。

できればもう少し具体的に教えていただきたいのですが。
他力本願で申し訳ないですけど宜しくお願いしますm(_ _)m
040611101/10/11 17:52ID:8p2Cw8ao
http://210.236.188.140:8080/
0407名無しさん@お腹いっぱい。01/10/11 18:03ID:???
re
0408名無しさん@お腹いっぱい。01/10/11 18:09ID:???
>>406
こういうアホはほんと新でほしいね。
0409名無しさん@お腹いっぱい。01/10/11 18:23ID:???
スレ違いで悪いけど、>>406 のサーバで使ってるpublicfileって
使ってる人いる?公式ページによると、ファイル公開専用で、
Apacheより軽いと書いてあるんだが。いま落としてみた。
041040901/10/11 18:26ID:???
おっと書き忘れ。エロサイトの宣伝屋は氏ね>406
0411JAPU@見知らぬ国のトリッパー ◆180pJAPU 01/10/11 18:32ID:???
djb のやつね。
機能を最小限に絞っているから軽くて安全という話は良く聞く。
でも、イマイチ物足りなそうで私は使ってない。

ちなみに、CGI とかは全く使えないぞ。
0412名無しさん@お腹いっぱい。01/10/11 19:09ID:2.aobSCc
>>411
どもどもJAPUさん。
publicfile少しいじって遊んでみます。

#いいトリップ見つけましたね。180ページ?
0413名無しさん@お腹いっぱい。 01/10/11 19:27ID:???
>>405
見つかったら、User=$user,Email=$email,Url=$url みたいなの
が有るからそこに P_view=$User_p_view みたいな感じで追加する
それでGet-cookieの方も他の変数とかと同じ様に代入すればOK
0414JAPU@見知らぬ国のトリッパー ◆180pJAPU 01/10/11 19:35ID:???
djbだから使わない! ってヤツも多いな。:-)

# トリップの検索ソフト (?) は Windows 用しか無かったのでやむを得ず書き起こしたよ...
0415落したぞ01/10/11 19:44ID:???
343行目
    if ($in{'comment'} eq "") { &error("コメントが入力されていません"); }
の下に
    if ($in{'view_page'} && $in{'view_page'} !~ /^[\d]{2}$/) {
        &error("表\示件数の設定が異常です"); 
    }
    $p_log = $in{'view_page'} if($p_log != $in{'view_page'});
これを追加

781行目
    $cook = "name\:$in{'name'}\,email\:$in{'email'}\,url\:$in{'url'}\,pwd\:$in{'pwd'}";
これを
    $cook = "view_page\:$in{'view_page'},name\:$in{'name'}\,email\:$in{'email'}\,url\:$in{'url'}\,pwd\:$in{'pwd'}";
これに置き換え


805行目
    $c_pwd   = $ck{'pwd'};
の下に
    if ($ck{'view_page'} && $ck{'view_page'} !~ /^[\d]{2}$/) {
        &error("クッキーの値が不正です"); 
    }
    $p_log = $ck{'view_page'} if($ck{'view_page'});
これを追加

807行目
    if ($in{'cook'} eq 'on') {
の下に
        if($in{'view_page'}) { $p_log = $in{'view_page'}}
これを追加
0416落したぞ01/10/11 19:45ID:???

以下フォームの例、255行目辺りから
(view_pageを書き換えると***動かない***)

<tr>
  <td><b>削除キー</b></td>
  <td>
    <input type=password name=pwd size=8 maxlength=8 value="$c_pwd">
    <small>(記事削除用。英数字で8文字以内)</small>
    <input type=checkbox name=cook value="on" checked>
    <small>クッキー情報を保存</small>
  </td>
</tr>
<tr>
    <td>
        <b>記事表\示数</b>
    </td>
    <td>
        <select name="view_page">
        <option value="">
        <option value="10">10件
        <option value="20">20件
        <option value="30">30件
        <option value="40">40件
        </select>
    </td>
</tr>

こんな感じ、たぶん maybe・・・
0417よいち01/10/12 05:30ID:???
413さん、415さん、416さん、レス有難うございます。
# 404さんと同じ方でしょうか(^^;

今教えて頂いたとおりに書き換えて、
表示件数を変えながら何度か投稿テストしてみました。
とくにエラーなどは出ず、問題無く動いております。

フォームの部分で、初訪問の時に表示がカラなのが気になったので
<select name="view_page">
<option value="$p_log">$p_log件
<option value="10">10件
と変えさせて頂きました。 すみません。

本当に有難うございましたm(_ _)m
0418ななしさん01/10/12 16:39ID:OeiSq0oM
ここで教えてくれてる人ってほんとにすごいね。
それにわざわざひとつひとつ教えてくれるなんて、やさしいね。
0419名無しさん@お腹いっぱい。01/10/12 17:15ID:???
「これやるから早くけえってくれ二度とくんな」という真の意図を
相手にさとらせず、しかし相手の潜在意識には強く植え付ける。
そんな技術が回答者には望まれる。
0420名無しさん@お腹いっぱい。01/10/12 19:17ID:???
>>417
あ、そっちの方がいいかも
>>419
何か後輩に似てたからね、俺も普段はこのスレエスケープしてる (笑
042141901/10/13 04:02ID:???
>>420
わはは。おれも回答したことあるから気持ちはわかるよ。
おれは「リハビリ代わりにコードを書いて確認するヤツ」でした。
んーしかし電動氏はナイスだ(スレ違い
042239601/10/13 13:41ID:FFS9a4BY
396です。
>>397
http://isweb35.infoseek.co.jp/diary/his734/chat.txt
http://isweb35.infoseek.co.jp/diary/his734/enter.txt
http://isweb35.infoseek.co.jp/diary/his734/pref.txt
です。お願いします。
0423名無しさん@お腹いっぱい。01/10/16 03:16ID:???
>>396 >422
もう解決してるかもしれんけど,あげついでに。
自信無し。

>参加者表示順変更
chat.txtの39行目あたりのを↓
#参加者表示
open(DBS,"$sanka_file");
@lin = <DBS>;
close(DBS);
$aaa = @lin;
$num = @sanka3;
$bbb = $aaa - $num;
if($aaa < $num){
$bbb = 0;
}
print '<FONT size="2">';
print "ROM:($bbb)\n";
print "参加者($num):";
print "@sanka3\n";
print '</FONT><HR>';
#ログ表示
↑こう置き換える

>時間表示削除
pref.txtの63行目あたりのを↓
sub jikan{#$dateに時刻を代入します。
$date = '';
}#jikan END
↑こう置き換える
0424名無しさん@お腹いっぱい。01/10/16 23:19ID:A3KdiC8A
>>332
プチボードのレス表示させるやつ
消えてるので
もう1回、UPしていただけないでしょうか?
0425名無しさん@お腹いっぱい。01/10/16 23:47ID:???
ここはリク板です、補完依頼は補完板でお願いします  w
0426しっぽなしきつね01/10/17 01:02ID:???
ちょっとワロタ  と。
今の所依頼は無し、  かな?
042739601/10/17 15:41ID:DasRCtmy
>>423
ありがとうございます。
変えてみたんですけど、なんか変になっちゃいます・・・
時間の中の()←枠だけが消えないし、入室したときに、おかしくなってしまいました。
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
■ このスレッドは過去ログ倉庫に格納されています