スクリプト改造工房 Part4
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。
02/02/05 01:20ID:CZVDHHphという人がいましたらここで聞いてください。
ひょっとしたらアドバイス出来るかもしれません。
前スレ
Part2 http://pc.2ch.net/test/read.cgi/perl/986986227
Part3 http://pc.2ch.net/test/read.cgi/php/988808396
なお、質問するときは
1)そのスクリプトのある場所(URL必須、拡張子".txt"でアップすればなお良し)
2)どんな風に改造して欲しいのか? (完成イメージHTMLを用意すればなお良し)
を必ず明記しよう。
0877nobodyさん
02/07/12 23:05ID:???2chは文字コードがshift_jisでしか認識してない。
ほかの文字コード(たとえばEUC-jp、UTF-8)がきても文字コードを変換せずに記録する。
jcode.plなどを使わないようにすると別の文字コードが送られてきても変換しないので
おもいっきり文字化けする。(無論2chにshift_jis以外の文字コードを送ると文字化けする)
0878866
02/07/13 02:15ID:yiJCKrBsてことはほとんどみんなshift_jisなんですか?
だったら私のとこもjcode.pl使わずshift_jisだけで行こうかなぁ
0880866
02/07/13 04:22ID:7VZqQeDsどうやったら弾けますか
0883nobodyさん
02/07/13 11:23ID:???0884
02/07/13 15:38ID:wm6r1jvd0885nobodyさん
02/07/14 19:41ID:???format c:
0887nobodyさん
02/07/14 23:28ID:???0889862
02/07/15 04:16ID:???改造をお願いした者です。
またレスをくださるとは思っておりませんでした。
気付いて良かったです。
早速変更しました(どう変わったのか、当分理解できそうにないですが…)
重ね重ねありがとうございました(・∀・)!!
0890nobodyさん
02/07/15 23:32ID:???if ($ENV{'REQUEST_METHOD'} eq "POST") {read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});}
else {$query_string = $ENV{'QUERY_STRING'};}
@a = split(/&/, $query_string);
foreach $a (@a) {
($name, $value) = split(/=/, $a);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
if ($ENV{'REQUEST_METHOD'} eq "POST") {
if ($ENV{'CONTENT_LENGTH'} > 5000) { &error("投稿量が大きすぎます。","no"); }
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# S-JISコード変換
&jcode'convert(*value,'sjis');
$value =~ s/</</g;
$value =~ s/>/>/g;
$FORM{$name} = $value;
}
$mode = $FORM{'mode'};
}
0891890
02/07/15 23:35ID:POFbnTHasub decode {
if ($ENV{'REQUEST_METHOD'} eq "POST") {
if ($ENV{'CONTENT_LENGTH'} > 5000) { &error("投稿量が大きすぎます。","no"); }
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# S-JISコード変換
&jcode'convert(*value,'sjis');
$value =~ s/</</g;
$value =~ s/>/>/g;
$FORM{$name} = $value;
}
$mode = $FORM{'mode'};
}
ですよね?違いは何ですか?
0893nobodyさん
02/07/16 01:09ID:Y35QqyN50894nobodyさん
02/07/16 15:17ID:???<FORM ACTION="test.cgi?aaa=bbb&ccc=ddd" METHOD="POST">
↑こんな場合は?
0896nobodyさん
02/07/17 15:48ID:cIBn6wB5のアクセス解析についてなんですが、ファイル内の
acc.cgi
の書き換えについて教えて欲しいです。
サンプルを見れば分かるけど、当然のことながら、登録していないブラウザは不明となりすよね?
PDA用のページをしているので、登録していないブラウザがたくさん来ます。
カラーブラウザボードが解析の結果に反映されるように改造がしたいです。
お願いします。
ブラウザ情報は
"Mozilla/4.0;CBBstandard-1.0" "-" "-"
です。
0897nobodyさん
02/07/17 15:55ID:???がんがれ。
0898nobodyさん
02/07/17 15:55ID:???何やってんだか・・・・
0899nobodyさん
02/07/17 16:08ID:???read.cgiで見る分にはそのままだけど
0900896
02/07/17 16:12ID:???どこにどんな文字列を挿入すればいいんですかね?
0902896
02/07/17 17:22ID:g9xseeZV0903896
02/07/17 17:25ID:f+M3E6fP"Mozilla/4.0;CBBstandard-1.0" "-" "-"
を識別する方法を教えてください。
0904nobodyさん
02/07/17 18:44ID:lQ93ITRR} elsif($user_agent =~ /OSF1/i) {
$platform = 'OSF1';
if($user_agent =~ /OSF1\s+([a-zA-Z0-9\.]+)/i) {
$platform_v = $1;
} else {
$platform_v = '';
}
} elsif($user_agent =~ /CBBstandard/i) {
$platform = 'CBB';
$platform_v = '1.0';
}
} else {
$platform = '';
$platform_v = '';
}
0905896
02/07/17 20:14ID:QBWIYOvF同様に
"Mozilla/4.0;CBBoard-1.0" "-" "-"
というのもカラブラには存在するんですが、追加の仕方は分かりますか?
>>904と同様に続けていったらエラーになってしまったのですが‥
0907nobodyさん
02/07/17 20:21ID:???0908896
02/07/17 20:30ID:QBWIYOvF} elsif($user_agent =~ /OSF1/i) {
$platform = 'OSF1';
if($user_agent =~ /OSF1\s+([a-zA-Z0-9\.]+)/i) {
$platform_v = $1;
} else {
$platform_v = '';
}
} elsif($user_agent =~ /CBBstandard/i) {
$platform = 'CBB';
$platform_v = '1.0';
}
} elsif($user_agent =~ /CBBoard/i) {
$platform = 'CBB';
$platform_v = '1.0';
}
です。
どこを変更修正すべきですか?
0911896
02/07/17 21:31ID:???0912896
02/07/17 21:38ID:???教えて君で申し訳ないですが、分かる方はソースを教えてください。
0913nobodyさん
02/07/17 21:38ID:???if (条件) {
処理
} elsif (条件) {
処理
} else {
処理
}
{ と } は対になってるの。
} elsif($user_agent =~ /OSF1/i) {
$platform = 'OSF1';
if($user_agent =~ /OSF1\s+([a-zA-Z0-9\.]+)/i) {
$platform_v = $1;
} else {
$platform_v = '';
}
} elsif($user_agent =~ /CBBstandard/i) {
$platform = 'CBB';
$platform_v = '1.0';
}
} elsif($user_agent =~ /CBBoard/i) {
$platform = 'CBB';
$platform_v = '1.0';
}
おかしくないかい?
0915896
02/07/17 21:44ID:???$platform = 'OSF1';
if($user_agent =~ /OSF1\s+([a-zA-Z0-9\.]+)/i) {
$platform_v = $1;
} else {
$platform_v = '';
} elsif($user_agent =~ /CBBstandard/i) {
$platform = 'CBB';
$platform_v = '1.0';
} elsif($user_agent =~ /CBBoard/i) {
$platform = 'CBB';
$platform_v = '1.0';
}
が正解ですか?
0916896
02/07/17 22:07ID:???$platform = 'OSF1';
if($user_agent =~ /OSF1\s+([a-zA-Z0-9\.]+)/i) {
$platform_v = $1;
} else {
$platform_v = '';
} elsif($user_agent =~ /CBBoard/i) {
$platform = 'CBB';
$platform_v = '1.0';
} else {
$platform = '';
$platform_v = '';
} elsif($user_agent =~ /CBBstandard/i) {
$platform = 'CBB';
$platform_v = '1.0';
} else {
$platform = '';
$platform_v = '';
}
{
return ($platform, $platform_v, $browser, $browser_v);
}
このように訂正しました。
まだ、間違ってますかね?
0917nobodyさん
02/07/17 22:17ID:???$platform = 'OSF1';
if($user_agent =~ /OSF1\s+([a-zA-Z0-9\.]+)/i) {
$platform_v = $1;
} else {
$platform_v = '';
}
} elsif($user_agent =~ /CBBstandard/i) {
$platform = 'CBB';
$platform_v = '1.0';
} # この行がおかしい?
} elsif($user_agent =~ /CBBoard/i) {
$platform = 'CBB';
$platform_v = '1.0';
}
0918896
02/07/17 22:54ID:???$platform = 'OSF1';
if($user_agent =~ /OSF1\s+([a-zA-Z0-9\.]+)/i) {
$platform_v = $1;
} else {
$platform_v = '';
}
} elsif($user_agent =~ /CBBoard/i) {
$platform = 'CBB';
$platform_v = '1.0';
}
} else {
$platform = '';
$platform_v = '';
} elsif($user_agent =~ /CBBstandard/i) {
$platform = 'CBB';
$platform_v = '1.1';
}
return ($platform, $platform_v, $browser, $browser_v);
}
にしてみましたが動作確認とれません。。
} #を消しても見ましたけど‥
0919nobodyさん
02/07/17 23:11ID:???(前略)
} elsif($user_agent =~ /OSF1/i) {
$platform = 'OSF1';
if($user_agent =~ /OSF1\s+([a-zA-Z0-9\.]+)/i) {
$platform_v = $1;
} else {
$platform_v = '';
}
} elsif($user_agent =~ /CBBstandard/i) {
$platform = 'CBB';
$platform_v = '1.0';
} elsif($user_agent =~ /CBBoard/i) {
$platform = 'CBB';
$platform_v = '1.0';
} else {
$platform = '';
$platform_v = '';
}
} else {
$platform = '';
$platform_v = '';
$browser = '';
$browser_v = '';
}
return ($platform, $platform_v, $browser, $browser_v);
}
0920896
02/07/18 00:16ID:???今まで、perlなどのCGIはパスを調べて置くだけだったのでさっぱり分かりませんでした。
今度ここに来るときはもう少し勉強してきます(^^;
ありがとうございました
0921便乗
02/07/18 13:41ID:???すれ違いな質問かもしれんが、教えてくだされ。
0922nobodyさん
02/07/18 13:50ID:???の疑問が湧いたことあがる。
0923nobodyさん
02/07/18 14:06ID:???0924nobodyさん
02/07/19 15:50ID:ou++e83o0928nobodyさん
02/07/21 12:03ID:???CGIはナイでしょうか?
昔作っている人に貰ったことがあるのですがクソみたいな改造だったのですぐ捨ててしまいました。
似たようなインターフェースのCGIは有りませんか?
0931nobodyさん
02/07/21 15:45ID:75qq1PAwあとはスタイルシートの使い方と1つ目の予定を書き込んだ時に
自動挿入される半角スペースを無効にする方法がわかれば形にな
るかと思うのですが、行き詰まったのでどなたかアドバイスをお
願いしますです。
スクリプトは
ttp://www.aikis.or.jp/~s-suzuki/cgilabo/webcalender/
にあるものです。
理想は
ttp://www.ag.wakwak.com/~spec/cgi-bin/calender/webcalen.cgi
のような感じです。
0932nobodyさん
02/07/21 16:00ID:???半角スペースはサンプルのソースを見ると
<TR>
<TD ALIGN="right" BGCOLOR="#ffffff" NOWRAP> 10 </TD>
<TD ALIGN="center" BGCOLOR="#ffffff" NOWRAP>水</TD>
<TD BGCOLOR="#ffffff" WIDTH="100%"> テスト<BR><BR><BR><BR>テスト </TD>
</TR>
となっているから
コメントの前と後ろに を挿入しないように削除すればいい
スクリプトは見てないから自分で の場所を探すこと
0934nobodyさん
02/07/21 16:06ID:???コメントの前と後ろの を削除すればオケ
0935931
02/07/21 16:11ID:75qq1PAwありがとうございます。さっそくやってみます。
0936
02/07/22 18:34ID:na3eS/Vvすることは出来たのですが、更にイメージの選択を必須項目にしたいのですが、
どうやってやったらよろしいでしょうか?
ご教授お願いいたします。
0937nobodyさん
02/07/22 19:28ID:8TyOV1qR上から順にスクリプトを見ていったらわかるよ
0939nobodyさん
02/07/22 21:32ID:???アイコンの先頭にダミーをいれる
@icon1の先頭に'shokichi'を@icon2の先頭に'アイコンを選ぶ'
# アイコンを定義(上下は必ずペアで)
@icon1 = ('shokichi','bear.gif',・・・,'usagi.gif');
@icon2 = ('アイコンを選ぶ','くま',・・・,'うさぎ');
こうするとアイコンを選ばずにそのまま送信すると icon の値が shokichi として送られるので
あとは $in{'icon'} が shokichi ならエラーを出せばよい
1423行目以降の「フォーム入力チェック」サブルーチンの末尾に追加
# 管理アイコンのチェック
if ($my_icon && $in{'icon'} eq $my_gif) {
if ($in{'pwd'} ne $pass) { &error("管理用アイコンは管理者専用です"); }
}
# アイコンが選択されているかのチェック
if ($in{'icon'} eq "shokichi") { &error("アイコンを選択してください"); }
}
0940 936
02/07/22 21:48ID:BcsBm5TC完璧です。
ありがとうございました。
0941age
02/07/23 16:48ID:???0942nobodyさん
02/07/23 16:51ID:???のメール送信したとき「limit」の値を1減らしたくていろいろいじって
みたんですができません。どかがまずいんでしょうか?
0945943
02/07/23 17:11ID:8GxTWX5C0947nobodyさん
02/07/23 18:28ID:???0948nobodyさん
02/07/25 22:04ID:RlKaNd0u現在ではアルファベットの大文字小文字は区別されるのですが、
区別無しでヒットするようにしたいのです。
できるものなら半角全角もいっしょくたにしたいのですが、可能でしょうか?
どうか知恵をお貸しください。よろしくお願いします。
0949948
02/07/25 22:05ID:RlKaNd0usub find {
&header;
print <<"EOM";
[<a href="$script?">掲示板にもどる</a>]
<table width="100%">
<tr><th bgcolor="#880000">
<font color="#FFFFFF">ワード検索</font>
</th></tr></table>
<P>
<UL>
<LI>検索したい<b>キーワード</b>を入力し、「条件」「表\示」を選択して「検索」ボタンを押して下さい。
<LI>キーワードは「半角スペース」で区切って複数指定することができます。
<P><form action="$script" method="POST">
<input type=hidden name=mode value="find">
キーワード:<input type=text name=word size=30 value="$in{'word'}">
条件:<select name=cond>
EOM
if (!$in{'cond'}) { $in{'cond'} = "AND"; }
foreach ("AND", "OR") {
if ($in{'cond'} eq "$_") {
print "<option value=\"$_\" selected>$_\n";
} else {
print "<option value=\"$_\">$_\n";
}
}
print "</select>\n";
print "表\示:<select name=view>\n";
if ($in{'view'} eq "") { $in{'view'} = $p_log; }
foreach (5,10,15,20) {
0950948
02/07/25 22:06ID:RlKaNd0uprint "<option value=\"$_\" selected>$_件\n";
} else {
print "<option value=\"$_\">$_件\n";
}
}
print "</select>\n";
print "<input type=submit value='検索'></form>\n</UL>\n";
# ワード検索の実行と結果表示
if ($in{'word'} ne "") {
# 入力内容を整理
$in{'word'} =~ s/ / /g;
@pairs = split(/\s+/, $in{'word'});
# ファイルを読み込み
@new=();
open(IN,"$logfile") || &error("Open Error : $logfile");
$top = <IN>;
while (<IN>) {
$flag=0;
foreach $pair (@pairs) {
if (index($_,$pair) >= 0) {
$flag=1;
if ($in{'cond'} eq 'OR') { last; }
} else {
if ($in{'cond'} eq 'AND') { $flag=0; last; }
}
}
if ($flag) { push(@new,$_); }
}
close(IN);
0951948 txtでアップするべきでした。反省(;´Д`)
02/07/25 22:07ID:RlKaNd0u$count = @new;
print "検索結果:<b>$count</b>件\n";
if ($page eq '') { $page = 0; }
$end_data = @new - 1;
$page_end = $page + $in{'view'} - 1;
if ($page_end >= $end_data) { $page_end = $end_data; }
$next_line = $page_end + 1;
$back_line = $page - $in{'view'};
$enwd = &url_enc($in{'word'});
if ($back_line >= 0) {
print "[<a href=\"$script?mode=find&page=$back_line&word=$enwd&view=$in{'view'}&cond=$in{'cond'}\">前の$in{'view'}件</a>]\n";
}
if ($page_end ne "$end_data") {
print "[<a href=\"$script?mode=find&page=$next_line&word=$enwd&view=$in{'view'}&cond=$in{'cond'}\">次の$in{'view'}件</a>]\n";
}
print "[<a href=\"$script?mode=find\">検索やり直し</a>]\n";
foreach ($page .. $page_end) {
($no,$reno,$date,$name,$email,$sub,$com,$url)
= split(/<>/, $new[$_]);
if ($email) { $name = "<a href=\"mailto:$email\">$name</a>"; }
if ($url) { $url = "<<a href=\"http://$url\" target='_top'>HOME</a>>"; }
if ($reno) { $no = "$renoへのレス"; }
# 結果を表示
print "<hr>[<b>$no</b>] <font color=\"$sub_color\"><b>$sub</b></font>";
print " 投稿者:<b>$name</b> <small>投稿日:$date</small> $url<br>\n";
print "<blockquote>$com</blockquote>\n";
}
print "<hr>\n";
}
print "</body></html>\n";
exit;
}
長くなってすみませんが、ワード検索のサブルーチン一通りです。
0952nobodyさん
02/07/25 22:26ID:???# 入力内容を整理
$in{'word'} =~ s/ / /ig;
とかきいたことがあるよママ
0953nobodyさん
02/07/25 22:32ID:bgz0ge4n所詮、ガキはそのレベルだ。
0954 そうだね <丶`∀´> ニダーリ
02/07/25 22:57ID:???な ぜ あ げ る?
0955nobodyさん
02/07/26 01:49ID:0BDmH9hb0957nobodyさん
02/07/26 19:45ID:kVw69kF2#大文字小文字区別無し
if (index($_,$pair) >= 0) {
↓
if($pair =~ /$_/i){
半角全角区別無しは一旦 &jcode'h2z_sjis(*value)とかで両文字列を
統一してから照合すりゃ良いんじゃないかな。重そうだけど。
0958948
02/07/26 23:30ID:???ありがとうございます。
それは上の文を下の文に書き換えればよいのでしょうか。
書き換えてみたのですが上手く動かないのです…
(何も検出されなくなってしまいました)
とにかく辞書や勉強スレなども見て、自分でもいろいろやってみます。
大きく前進できたと思います。
ありがとうございました。
0959957
02/07/27 00:03ID:pvFK+xGBああごめん、逆だ。
if($pair =~ /$_/i){
じゃなくて
if($_ =~ /$pair/i){
だ。つーかそんなら
if(/$pair/i){
か。
0962nobodyさん
02/07/27 09:01ID:???プログラムが欲しいわけだが。
0964nobodyさん
02/07/27 23:40ID:DH9H4W07あちらではスレ違いになりますので・・・
ヒントを頂けないでしょうか?
0965nobodyさん
02/07/27 23:46ID:6EI34UHG宜しくお願いします。
自サイトでffwatchというcigの解析を使っているのですが、丸見え状態
なのでこのcgiにパスワードをつけたいと思っています。
どうすればいいでしょうか?
本体cgi
http://www.geocities.co.jp/AnimalPark-Pochi/9232/ffwatch.txt
ログcgi
http://www.geocities.co.jp/AnimalPark-Pochi/9232/fflog.txt
0966nobodyさん
02/07/28 01:16ID:???ログファイル名を変えられるなら、
例えば"ffwatch.cgi"、"fflog.cgi"にするのが吉。
これなら.htaccess触らないで済む。
0967nobodyさん
02/07/28 04:02ID:W8D+zAzJttp://www.gt.sakura.ne.jp/~ocosama/garakuta/soft/paintbbs/pbbs.html
どうも文字サイズが小さくならないんです。
http://maebari.net/oekei/bbsnote.cgi
この程度まで全ての文字を小さくしたいのですが、
どうすればできるんでしょうか?
CGIの設定ページには文字サイズの設定がないし、試しに「oekaki.cgi」の中の
FONT SIZEをすべて1にしてみましたが、全く変化がありませんでした。
どなたか教えてください。お願いします。
0968nobodyさん
02/07/28 04:19ID:???0970nobodyさん
02/07/28 04:32ID:???font sizeいじっても変わらないなら
すでにCSSで固定されてんじゃないの?
見てないから知らんが。
つーかtxtでUPされてないもんは見る気もせんが。
Web製作板から来たって話だけど向こうで合ってるよ。
プログラムの部分じゃない以上、ここは板違い。
0971nobodyさん
02/07/28 10:12ID:???@enc = ('euc', 'sjis'); # 日本語コード
# --------------------------------------
# パスワード認証
$pass = '';#好きなパスワードを入れる
if ($pass ne "") {
&decode;
if ($in{'pass'} ne "" && $pass ne "$in{'pass'}") {
&error("パスワードが違います");
}
elsif ($in{'pass'} eq "") {
&header;
print "<center><h4>パスワードを入力して下さい</h4>\n";
print "<form action=\"$script\" method=\"POST\">\n";
print "<input type=password name=pass size=6>";
print "<input type=submit value=' 認証 '></form>\n";
print "</center>\n</body></html>\n";
exit;
}
}
# ======================================
# 手続き
# --------------------------------------
こんな感じに付け加える。
ログを書き込むファイルの拡張子もcgiにするといいかも
0972965
02/07/28 14:52ID:J7Vy5sYdありがとうございます。ソース見るとファイル名で判ってしまうので…。
>971
ありがとうございます。お手数おかけしてすみません。。
リプトを追加したところffwatchの方に500エラーがでました。
エラーチェックスクリプトでチェックしたところ以下の部分が
エラーと表示されました。
syntax error at (eval 1) line 37, near "?
if ($in{'pass'} ne "" && $pass ne "$in{'pass'}") {
&error("パスワードが違います");
}
elsif ($in{'pass'} eq "") {
?
print"
Unmatched right bracket at (eval 1) line 44, at end of line
syntax error at (eval 1) line 44, near "}
}"
どうしたらいいでしょうか…?
宜しくお願いします。
0973971
02/07/28 20:15ID:Di7q+S2Lよけいなトコを消したんじゃないの?
@enc = ('euc', 'sjis'); # 日本語コード
# --------------------------------------
から
# ======================================
# 手続き
の間をコピペすればいいんだけど、
もう1回確かめてみ
0974971
02/07/28 20:20ID:???UPしてみた
0975nobodyさん
02/07/28 21:21ID:???メールの一斉配信CGIなのですが、送信元(ここでは[email protected]です)から
登録されたユーザー(例:[email protected])に配信したときにヘッダーを見ると
Return-Path: <[email protected]>
Delivered-To: [email protected]
となっていて、送信エラー(宛名不明)のメールが自分のもとに戻ってきません
これを自分のところに戻るように改良していただけないでしょうか?
UP先は以下です。
http://isweb36.infoseek.co.jp/computer/perldev/cgi-bin/upload/source/036.zip
配信先リストがusr.datです。
なお、オリジナルは下記のものですが、今は閉鎖(移転?)されていて、
サポートを受けれないのでこちらでお願いしいています。
SQUZA MAIL MAGAZINE Ver1.2 http://www.squza.com/
0976965
02/07/28 22:17ID:???度々すみません。
うーん…貼り付けて貰ったものをコピペして使ったのですが、
何がいけなかったのか…。見比べてみてもどうも判りません…。
アップして頂いたものを使わせて貰ったところ、正常に稼動しました。
どこがいけなかったのか、もう一度ちゃんと見直してみます。
本当にどうもありがとうとざいました!
レス数が950を超えています。1000を超えると書き込みができなくなります。