bbs.cgi再開発プロジェクト 3

このエントリーをはてなブックマークに追加
929FOX ★
これから質問しまくるんで
優しく教えてください。

つまり Perl を知らないぼんくらなんです
930FOX ★:04/12/02 15:02:26 ID:???
sub bbs_main
{
our$version = "BBS.CGI - 2005 (for SpeedyCGI)";

&DispError2("FOX ★","<font color=green>FOX ★ ふふふっ</font>");
return;
}

とやって $version を DispEooro2 というサブルーチンで参照したいのですが
どうすれば参照できるんですか?

$version は SpeedyCGI に対応した、いわゆるグローバルな変数ではなく
ローカルな変数です。

ちなみにこうやって失敗しています(500 error)

print <<EOF;
version = $version
EOF
931root▲ ★:04/12/02 15:24:44 ID:???
■ bbs.cgi(SpeedyCGI)の巻 part1 (2004/12/01-)
http://dso.2ch.net/test/read.cgi/myanmar/1101890385/48

500エラーになって、書けないっす。
たぶん Premature なんちゃら、って言って、えらーログに残っているはず。
932▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo :04/12/02 15:25:56 ID:WBZMaSLu
>>930
この例だと
-------------------
#! /usr/local/bin/speedy --r1

our $version = "BBS.CGI - 2005 (for SpeedyCGI)";

sub bbs_main
{

&DispError2("FOX ★","<font color=green>FOX ★ ふふふっ</font>",$version, $errnum);
return;
}
-----------
Dispの第2引数にversionを渡すようにしています。
errnumはエラー番号(たとえばapacheのエラーコードとか)
933root▲ ★:04/12/02 15:27:12 ID:???
FOX ★
FOX ★ ふふふっ

ホストHOST
FORM{'subject'}
名前: FORM{'FROM'}
E-mail: FORM{'mail'}
内容:
FORM{'MESSAGE'}

こちらでリロードしてください。 GO!
分からないことがあったら2ちゃんねるガイドへ。。。

アクセス規制・プロキシー制限等規制は、2ちゃんねるビューアを使うと回避できることがあります。BBS.CGI - 2005 (for SpeedyCGI)

が出る時と、出ないで500 Internal Server Errorになる時がありますね。
934▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo :04/12/02 15:30:00 ID:WBZMaSLu
>>930
あ、まちがい、ローカル変数だったですね。スマソorz

# 実は私もperlはあまり詳しくない・・・むしろPHPのほうが強い

printはdisperror内でですかね。
935動け動けウゴウゴ2ちゃんねる:04/12/02 15:31:46 ID:nD7Hw/zx
現時点での全ソース晒せ〜
936FOX ★:04/12/02 15:53:29 ID:???
いやー

まったく

たいへんたいへん
937動け動けウゴウゴ2ちゃんねる:04/12/02 15:53:47 ID:NQYkKTg/
なんかゴソゴソやっとるな
938FOX ★:04/12/02 15:58:54 ID:???
http://dso.2ch.net/test/bbs.txt

現時点での全ソース

今つまずいているところ【2】
$NOWTIME がローカルな変数になっていない
起動されるたびに変わらない

私の言っているローカルと一般的に言うローカルの意味が違うのかも、
別に私が言っているわけじゃないけどサ
939FOX ★:04/12/02 16:10:39 ID:???
でも、たまに変わるなぁ
ちょっと時間を置くと換わるのか?

http://dso.2ch.net/myanmar/

ここでやってます
940root▲ ★:04/12/02 16:13:12 ID:???
>>939
1分以上バックエンドにリクエストがないと、バックエンドをexitするようにしてあるので、
その時には元に戻ります。

やめる場合、bbs.cgiの1行目の-t60をやめればよいです。
941FOX ★:04/12/02 16:14:49 ID:???
なるほど、

-t60 なしでデバッグしたほうがいいっすね、
942FOX ★:04/12/02 16:15:43 ID:???
#!/usr/local/bin/speedy -- -b1048576

にした
ぜんぜんわからんな・・・orz

http://www.google.co.jp/search?q=cache:Fh2W0Hmt6b8J:qtea.bne.jp/2004/+PersistentPerl+OR+SpeedyPerl+OR+SpeedyCGI+%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0&hl=ja&lr=lang_ja
あたりに原因があるようだ。CGIモジュールは、でかいからねえ。なので、SpeedyCGIを使うように変更してみたが、どうやら、グローバル変数の初期化をしてないようなので、reset 'a-z';を先頭行に追加してみた。これで、なんとなく、まともに動作しているようだ。
> グローバル変数の初期化をしてないようなので

my $NOWTIME = time;

   ↓

my $NOWTIME;
$NOWTIME = time;
945FOX ★:04/12/02 16:53:42 ID:???
>>944
それやってみたけど、だめだったぞな
946FOX ★:04/12/02 17:01:01 ID:???
PID=$$ も書くようにした

当然のことながら、いつも同じPID、、、
さてさて〜、どうすればいいやら
947root▲ ★:04/12/02 17:04:34 ID:???
なるほど、、、。

常識的に(というか半ば無意識に)使っていたものが、使えなくなるですね。
代替手段は大体あるに違いないけど、こむずかしそうだ。
948FOX ★:04/12/02 17:08:27 ID:???
Time::time なんてのもあるんですか? < Perl
949動け動けウゴウゴ2ちゃんねる:04/12/02 17:20:37 ID:YeLg7Dw8
こういうノリではいかがでしょうか。

&bbs_main;
exit;

sub bbs_main {
my $GB = {};
$GB->{version} = "BBS.CGI - 2005 (for SpeedyCGI)";
$GB->{NOWTIME} = time;#現在時刻
$ENV{'TZ'} = "JST-9";#日本
#$ENV はそのまま使う
my %FORM;
$GB->{FORM} = {};
&foxReadForm($GB);#$FORM を読み込む

&DispError2($GB, "FOX ★","<font color=green>FOX ★ ふふふっ</font>");
return;
}

sub DispError2
{
my ($GB, $title, $topic) = @_;

print "Content-type: text/html; charset=shift_jis\n\n";
#-----------------------------------------------------------------------
print <<EOF;
<html>
<head>
<title>$GB->{title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body bgcolor="#FFFFFF"><!-- 2ch_X:error -->
<font size=+1 color=#FF0000><b>$GB->{topic}</b></font>
<ul>
<br>ホスト<b>HOST</B><br><b>GB->{FORM}->{'subject'} </b><br>
名前: $GB->{FORM}->{'FROM'}<br>E-mail: $GB->{FORM}->{'mail'}<br>
内容:<br>$GB->{FORM}->{'MESSAGE'}<br><br>
</ul>
<center>こちらでリロードしてください。<a href="../$GB->{FORM}->{'bbs'}/index.html"> GO! </a><br>
分からないことがあったら<a href="http://info.2ch.net/guide/">2ちゃんねるガイド</a>へ。。。<br><br>
アクセス規制・プロキシー制限等規制は、<a href="http://2ch.tora3.net/">2ちゃんねるビューア</a>
を使うと回避できることがあります。
</center>
<p>
time=$GB->{NOWTIME}<br>
$GB->{version}
</body>
</html>
EOF
#-----------------------------------------------------------------------
exit;
}
950FOX ★:04/12/02 17:30:39 ID:???
>>949
おおっ そういうほうが好き好き

$GB は構造体(クラス)と思えばいいのかな?
要素(メンバー)を追加するのは、たんに $GB->なんとか
とやれば追加されるのかな?

んで my で宣言されていても使い方がグローバルなら
結局はグローバルな変数になっちゃうということなのかしら?
951動け動けウゴウゴ2ちゃんねる:04/12/02 17:33:45 ID:WZTWIT/v
sub init_onceを書いて、初期化ルーチンを押し込めましょう。

そして初期化ずみフラグを見てrace condition回避も忘れずに。
952動け動けウゴウゴ2ちゃんねる:04/12/02 17:37:28 ID:YeLg7Dw8
>>949
my %FORM; を消し忘れた……。

>>950
よくは分からないですけど
外側のmy変数はコンパイル時に実体が作られるんでしょうか。
SpeedyCGIインストール完了

なんとなく離してみた
なぜか動いた
なぜだ〜〜〜

my $NOWTIME;#現在時刻
&bbs_main;

exit;

#########################################################
sub bbs_main
{
my $version = "BBS.CGI - 2005 (for SpeedyCGI)";
$NOWTIME = time;#現在時刻
954FOX ★:04/12/02 17:53:42 ID:???
>>952
なんでしょうねぇ
my しても、実際に使い方が悪かったらどっかに(CS?) 実態が
作られちゃうんでしょうねぇ
955動け動けウゴウゴ2ちゃんねる:04/12/02 17:56:29 ID:WC2kwP6B
んもう、書き直すならオブジェクト指向で書き直せばいいのに。
オブジェクト指向ならmod_perlの道が見えるのに。
956FOX ★:04/12/02 17:58:44 ID:???
>>955
それは大変すぎるですよ、私にとっては
次の世代の方々への贈り物ということで、

SpeedyCGI でかなり改善することが知りたいというのが目的なもんで
「かなり改善」が望めないならお蔵入りという話し。
957FOX ★:04/12/02 18:00:25 ID:???
http://dso.2ch.net/test/bbs998.txt

現在の bbs.cgi

こまっているところ【3】
&foxReadForm($GB);#$FORM を読み込む
安易に代入しただけじゃ駄目なの?

$GB->{FORM} = %FORM;  ← この部分

958動け動けウゴウゴ2ちゃんねる:04/12/02 18:11:54 ID:YeLg7Dw8
>>957
foxReadFormの頭で

my $FORM = $GB->{FORM};

として、代入の方は

$FORM->{$name} = "$value";

とするのがよいかと。
959FOX ★:04/12/02 18:12:56 ID:???
やってみるです
960FOX ★:04/12/02 18:16:02 ID:???
sub foxReadForm
{
my ($GB) = @_;

my $query_string = undef;
my (@m_elements, $m_element, $name, $value);
my %FORM = $GB->{FORM};

で駄目だった。 (my $FORM だと 500 error だった)
961動け動けウゴウゴ2ちゃんねる:04/12/02 18:17:51 ID:YeLg7Dw8
うひょ。

sub foxReadForm
{
my ($GB) = @_;

my $query_string = undef;
my (@m_elements, $m_element, $name, $value);
my $FORM = $GB->{FORM};

#環境変数からPOSTのでーたをもらう〜
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
@m_elements = split(/&/, $query_string);
foreach $m_element (@m_elements) {
($name, $value) = split(/=/, $m_element);
$value =~ s/\0//g;
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\r\n|\r|\n/<br>/g;
$value =~ s/<br>/ <br> /g;
$value =~ s/[\0\x00-\x1f]//g;

$FORM->{$name} = "$value";
}
}


#1行データからは改行を削ってタグを閉じます
$FORM->{'subject'} =~ s/\#//g;
$FORM->{'subject'} =~ s/ <br> //g;
$FORM->{'subject'} =~ s/&//g;

$FORM->{'FROM'} =~ s/"/"/g;
$FORM->{'FROM'} =~ s/ <br> //g;
$FORM->{'mail'} =~ s/"/"/g;
$FORM->{'mail'} =~ s/ <br> //g;

$FORM->{'bbs'} =~ s/\|//g;
$FORM->{'bbs'} =~ s/\\//g;
$FORM->{'key'} =~ s/\|//g;
$FORM->{'bbs'} =~ s/\.//g;
$FORM->{'key'} =~ s/\.//g;
$FORM->{'bbs'} =~ s/&//g;
$FORM->{'key'} =~ s/&//g;
$FORM->{'time'} =~ s/\D//g;
$FORM->{'bbs'} =~ s#/##g;
$FORM->{'key'} =~ s#/##g;


$FORM->{'subject'} =~ s/&r//g;
$FORM->{'FROM'} =~ s/&r//g;
$FORM->{'mail'} =~ s/&r//g;
}
962FOX ★:04/12/02 18:18:47 ID:???
勘違いしているかな?

もう一回挑戦
963FOX ★:04/12/02 18:19:32 ID:???
>>961
どもども
コピペさせてもらいます、
964FOX ★:04/12/02 18:21:55 ID:???
わーい
うまくいった。

次へ行こう。
965▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo :04/12/02 18:22:08 ID:WBZMaSLu
>>955
さすがにつらすぎるでしょう。

でも最終手段としての書き直しは軽く心に留め置いておいたほうがいいかもしれないと振ってみる
966FOX ★:04/12/02 18:31:09 ID:???
sub bbs_main
{
use CGI::SpeedyCGI;
my $sp = CGI::SpeedyCGI->new;
my $spv = $sp->i_am_speedy ? 'yes' : 'no' ;

$ENV{'TZ'} = "JST-9";#日本
#$ENV はそのまま使う
my $GBX = {};
$GBX->{version} = "BBS.CGI - 2005 (SpeedyCGI = $spv)";
$GBX->{NOWTIME} = time;#現在時刻
$GBX->{PID} = $$;#pid
$GBX->{FORM} = {};#
&foxReadForm($GBX);#$FORM を読み込む

require "./bbs-main.cgi";

&DispError2($GBX,"FOX ★","<font color=green>FOX ★ ふふふっ</font><br><br>これが表\示されるということは・・・<br>本体requireしたのにそっちへ行かないと、、、");
print "Content-type: text/html; charset=shift_jis\n\nWOWOWOWOWOW-----\n";
return;
}
967FOX ★:04/12/02 18:32:14 ID:???
require "./bbs-main.cgi";
で本体に処理を移そうとしたら・・・

最初の起動時は本体へ行った
しかーし、二回目以降はだめだった、、、

どうする?
968動け動けウゴウゴ2ちゃんねる:04/12/02 18:44:47 ID:WZTWIT/v
>967
>951
969動け動けウゴウゴ2ちゃんねる:04/12/02 18:46:08 ID:YeLg7Dw8
bbs-main.cgiの処理を関数に括りだしておいて
その関数を陽に呼び出せばいいような。
970FOX ★:04/12/02 18:49:18 ID:???
>>968
わたし・・・
理解不能なんです

>>969
そんなふうにしてみた

sub bbs_honati
{
my ($GB) = @_;

&DispError2($GBX,"FOX ★","<font color=green>FOX ★</font> いよいよ本体");
}

1;

んで &bbs_honati ; で呼び出してみた。
971風俗王:04/12/02 18:55:14 ID:lxr8SelU
今栃木県の宇都宮でトップのでりは???
972 [―{}@{}@{}-] j101097.ppp.asahi-net.or.jp:04/12/02 19:02:21 ID:yl4eb3hK
ホストが違う・・・

ERROR:ユーザー設定が消失しています!

ホストU178***.ppp.dion.ne.jp

名前:
E-mail:
内容:



こちらでリロードしてください。 GO!
分からないことがあったら2ちゃんねるガイドへ。。。

アクセス規制・プロキシー制限等規制は、2ちゃんねるビューアを使うと回避できることがあります。
973U178142.ppp.dion.ne.jp:04/12/02 19:04:06 ID:YeLg7Dw8
あ、オレオレ。
974 [―{}@{}@{}-] j101097.ppp.asahi-net.or.jp:04/12/02 19:06:38 ID:yl4eb3hK
どうも前にエラーを出した人のを出してるような・・・
まあゴニョゴニョしてる途中だからかな
975桃太郎 ★:04/12/02 19:12:04 ID:???
僕ちんは
ERROR:サブジェクトが存在しません!だた。
976動け動けウゴウゴ2ちゃんねる:04/12/02 19:14:45 ID:XEy4KVeD
普通に書き込み画面からPOSTしてやる
結果:>>975

http://dso.2ch.net/test/bbs.cgiを直接開く
結果:>>972
977動け動けウゴウゴ2ちゃんねる:04/12/02 19:15:50 ID:XEy4KVeD
hostでなくなった(−−;
978FOX ★:04/12/02 19:15:53 ID:???
いろいろやっているだす

sub bbs_hontai
{
my ($GB) = @_;
my $FORM = $GB->{FORM};
my $NOWTIME = $GB->{NOWTIME};

&DispError2($GB,"FOX ★","<font color=green>FOX ★</font> いよいよ本体($GB->{FORM}->{bbs} , $FORM{'bbs'})");

$FORM{なんたら} ってのが沢山あるんで
my $FORM = $GB->{FORM};
と関数に入ったところで宣言してそのまま使おうと思ったんだが・・・
うまくいかんのだ

どすればいいのだろう
979動け動けウゴウゴ2ちゃんねる:04/12/02 19:29:49 ID:X6CTMNgw
my %FORM = $GB->{FORM};
とか?

といい加減に答えてみる
980動け動けウゴウゴ2ちゃんねる:04/12/02 19:30:03 ID:YeLg7Dw8
$GB->{FORM} は「ハッシュ」じゃなくて「ハッシュへの参照」なので
$FORM{なんたら} を $FORM->{なんたら} に変えないとダメっす。
981FOX ★:04/12/02 19:31:37 ID:???
>>979
やったけどだめだったっす、、

>>980
やっぱそうなんすか・・・
死ぬほどあるんだよなぁ
一気に置き換えるのは恐いしなぁ
982動け動けウゴウゴ2ちゃんねる:04/12/02 19:36:35 ID:X6CTMNgw
>>981 50%乙

FOX★氏はiijか・・・

ERROR:ユーザー設定が消失しています!

ホストh***.p***.iij4u.or.jp

名前: FOX ★
E-mail:
内容:
ffffcce
ffffcsvxxxxx
fffff
gggg
hhhh
983FOX ★:04/12/02 19:37:21 ID:???
ぐおっ
こわっ
984動け動けウゴウゴ2ちゃんねる:04/12/02 19:39:23 ID:WC2kwP6B
my %FORM = %{$GB->{FORM}}; # として
# ここで$FORM{hoge}に対してごにょぎょんして
%{$GB->{FORM}} = %FORM; # として返すとか?
985動け動けウゴウゴ2ちゃんねる:04/12/02 19:39:26 ID:YeLg7Dw8
難産ですねー……。
986FOX ★:04/12/02 19:40:12 ID:???
あなたはリロードスレッドが大好きです
http://dso.2ch.net/test/read.cgi/myanmar/1101913871/

かけたぞっ
987FOX ★:04/12/02 19:40:50 ID:???
>>984
一気に置換しちまったです
988動け動けウゴウゴ2ちゃんねる:04/12/02 19:42:22 ID:X6CTMNgw
かけた〜〜
乙乙
989FOX ★:04/12/02 19:44:58 ID:???
しかーし

結局 ホスト情報やらhtml名やらは元々グローバルだったから
ちゃんと $GB に入れてやら無いとまずいという話しかな、

結構大変そうだ、

まずは HOST 関係だけやってみよう。
990動け動けウゴウゴ2ちゃんねる:04/12/02 19:45:39 ID:aKb2TILl
次スレ!次スレ!
991桃太郎 ★:04/12/02 19:49:18 ID:???
>990
じゃああたすが代表して立てましょ
992桃太郎 ★:04/12/02 19:54:01 ID:???
993動け動けウゴウゴ2ちゃんねる:04/12/02 19:55:03 ID:X6CTMNgw
>>992
モツカレー
994動け動けウゴウゴ2ちゃんねる:04/12/02 19:59:41 ID:NQYkKTg/
おお、なんか面白い状況
995FOX ★:04/12/02 20:00:41 ID:???
たたけ たたけ たたけ〜♪
996ヾ(゚パ)ノ ◆f0.zuburi6 :04/12/02 20:02:37 ID:bBxy901j
おいらにゃー 狐のー 血がー さわーぐー
997動け動けウゴウゴ2ちゃんねる:04/12/02 20:03:16 ID:X6CTMNgw
・●はまだかな
・本文梨でも書き込める
・IDが???
がんばれ〜〜
998動け動けウゴウゴ2ちゃんねる:04/12/02 20:03:57 ID:NQYkKTg/
るーるるーるるるる
999ヾ(゚パ)ノ ◆f0.zuburi6 :04/12/02 20:04:34 ID:bBxy901j
1000(^_^;)
1000動け動けウゴウゴ2ちゃんねる:04/12/02 20:05:16 ID:X6CTMNgw
ワロタ




どのような形の削除依頼であれ公開させていただきます


2ちゃんねる(+Samba)       
アニメ | CM | ゲーム | 映画 | 音楽 | テレビ | 日記(+Samba)
       アニメ | CM | ゲーム | 映画 | 音楽 | テレビ |
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。