【Perl】掲示板を使ろう!
>>100
その代わり実は効いていないのに気がつかない可能性がある #!/usr/local/bin/perl
use CGI $a=new CGI;print"Content-type: text/html\n\n<form action=n.cgi>";
print"<input name=n><input name=t>\n";$n=$a->param('n'),$t=$a->param('t');
if($t){$t=~s/,|<|>|:/*/g;if(!$n){$n="名無しさん@お腹いっぱい";}open(I,">>y"),print I"$n,$t\n";}
open(I,"y"),@I=<I>;for($i=$#i;$i>$#i-10;$i--){($j,$k)=split(/\,/,$I[$i]),print"<hr>$j: $k";}
5行 一時間で書いたから最低なソースだ。
素人丸出し。
でも一応動く。
動けばいいよね。
だめ? #!/usr/local/bin/perl
use CGI $a=new CGI;print$a->header,"<form action=n.cgi><input
name=b><br><input name=c>";($b,$c)=($a->param('b'),$a->param('c'));
if($c){$c=~s/<|>|:/*/g;if(!$b){$b="名無しさん";}open(A,">>d");
print A"<hr>$b:$c\n";}open(A,"d");@e=<A>;@f=reverse(@e);print @f;
少しだけ短くなったかな? なんかアドバイスきぼーん。
もっと短くしたいです。 CGI.pmをつかって「もっと短く」と言われてもなぁ…と思ってしまう。 #!/usr/local/bin/perl
use CGI $a=new CGI;print$a->header,"<form><input name=b><br><input name=c>";
($b,$c)=($a->param('b'),$a->param('c'));if($c){$c=~s/<|>|:/*/g;if(!$b){$b="名無し";}
open(A,">>d");print A"<hr>$b:$c\n";}open(A,"d");@e=<A>;@f=reverse(@e);print @f;
<form action=n.cgi> => <form> #actionはデフォルトで自分自身らしい。
名無しさん => 名無し #これはどうでもいいか・・・。
これで横に長いが何とか4行 どうでもよい話かもしれないが、actionは#REQUIREDです。 >>112
DOCTYPE宣言がない以上ほんとにどうでもよい話ですね。 #!/usr/local/bin/perl
use CGI $a=new CGI;print$a->header,"<form><input name=b>";$b=$a->param('b');
if($b){$b=~s/</</g;open(A,">>c");print A"$b";}open(A,"c");print<A>;
これ以上はむりかな。
だんだん飽きてきた。
つーかこんなのは掲示板じゃない。 >>113
一応補足しておくと、action が #REQUIRED である限りクライアントによってはうまく動作しないことがあるかも知れないという意味を含めていました。 沈みすぎなのでアゲ。
IndexFile.pm改め、IxFile.pmを作りました。
ハッシュだけでなく配列やスカラなどにも対応。
データ構造が変わったので、IndexedFile.pm とはデータ互換性なしです。
詳しくは、
http://www.panton.f2s.com/bbs/lib/IxFile.html
http://www.panton.f2s.com/bbs/IxFile.tar.gz (ブツ)
http://www.panton.f2s.com/bbs/sbbs.cgi (テスト用掲示板) あ、ホントだ (^^
開発に疲れちゃったんだろーなー >>ほういち氏
八月半ばに他のQ&A-BBSでも見かけたよ。
でも2chにはこない…。 タイトルのtypo発見した、ちょっとトクした気分だ。。。 use base 'IxFile';で継承すると
殆どのフィールドを継承できない(フィールド名が_で始まっている為)のですが、
それは仕様ですか? お、意外にも使おうとしている方が・・・
仕様と言えば仕様ですね。
お好みで適当に変えちゃってください。
ただ、今全面的に仕様変更考えてるので微妙です。
特に、インデックスの内部保持方法とその保存形式、
ハッシュや配列へのTieインターフェイスとかいろいろ。
仕事忙しいのでいつになるかわからないけど・・・
なんか意見あったら言ってください。 ナルホド。
弄り始めたばかりですし、特に今のところ意見は無いです。
応援してますんで頑張ってください。 「〜を作ろう」っていうスレで何かが完成した験しは全然無いな。 # IxFile拡張
# IxFIle::clear - IxFileデータベースをクリアする
# $status = clear $ixf;
sub IxFile::clear{
my IxFile $self = shift;
$self->_initialize(2);
$self->{_pointer} = 0;
$self->{_stat} = 0;
$self->{_idxlist} = [];
$self->{_idxhash} = {};
my $idx_ok = truncate $self->_idxhandle, 0;
my $dat_ok = truncate $self->_dathandle, 0;
return $idx_ok && $dat_ok;
} >>135さん
ありがとうございます。clear メソッドはあったほうが良いですね。
マージさせていただいて良いですか?
関係ない話ですけど、
Apache::AntiSpam::HTMLEncodeを見てて、
メールアドレスの一部分だけでもHTML Entitiesに変換すれば、
ロボットのアドレス収集対策にかなり有効なんじゃないかと思いました。
たとえば、?anton@f2s.com とかみたいに。
もっとも、HTML Entitiesを解釈するロボットがあると元も子も無いけど。 あれ、&#112;anton って書いたつもりだったのに・・
bbs.cgiの仕様変わったのかな?
てすと: & > < > マージ
そのつもりで書いたので遠慮なくどーぞ。
> アドレス収集ロボ対策
JAPUさんが会社でやってますね。
ってあまり宣伝しすぎると効果が無くなるんでしょうけど。 s/&#[\d;]*/?/g って感じかな。
>>138
ありがとうございます。
ロボット対策> あら、ほんとですね。さすが。<- JAPUさん このスレ終わっちゃったのカー (゚д゚lll)
テキストに飽きてきたから、使ってみるう おれはいますよ。すんません。
仕事に殺されています。<-言い訳。 IxFileの配列版File::Arrayを構想中。 >>45
> * IO::File
> IO::Fileはかなり大きいので使わずに済ませてもいいのでは?
根拠は?たかだか3889バイトですが?
# と、Google検索でここにきたのでついでに書き込むテスト >>144
IO::Fileは
Carp、Symbol、SelectSaver、IO::Seekable、File::Spec
といろんなモジュールを呼んでますし、呼ばれたモジュールも
色々モジュールを呼んでるので全部あわせると結構な量です。 slashdot型掲示板作られた方は
いませんか? slashdotってひたすら流れがつかみにくいと感じるのは俺だけ? YaBBで似たようなことできるね。
ニュース系サイトなら更新するのに
わざわざ、エディタ&FTP使わなくても
ブラウザだけで更新できるから便利だと思うんです。 >>147
slashdotならslashcode持ってくればいいのでは? ふと思いついて>>143をFileIxって名前で作ってみました。
速度は(Perlということを踏まえた上で)まずまず高速です。
ビルトイン配列とほぼ同じインターフェイスで扱えるのが楽です。
アップしましょうか? 私がたまたまこのスレを見たのも何かの縁でしょうからよろしければアプしてください。
ttp://isweb36.infoseek.co.jp/computer/perldev/cgi-bin/upload/upload.cgi >>154 1.5ちゃんねるも遺物になったりして。。(笑 Perl超初心者なんですけど、
ログの処理を一気に配列化して読み込むと負荷が高いと聞いたので、
1件1件処理するようにしたいのですが、
それはどうやればできるのですか?
kentさんはforeach関数で重いらしいんですけど、やっぱりwhileなんですかね? >>163
while使えるところだったらみんな使った方がいいよ。 foreachだとファイルの中身を全部配列に展開するからメモリを食う。 これ日本語かできないよ〜。
read(STDIN, $str, $ENV{"CONTENT_LENGTH"});
@parts = split('&',$str);
foreach(@parts) {
($variable, $value) = split("=");
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-0a-fA-F])/pack("C",hex($1))/eg;
&jcode'convert(*value, 'euc');
$cgi{$variable} = $value; >>168
ハァ?
無理だと思うなら素直にCGI/CGI::Lite/CGI:Minimal/cgi-lib.pl使えよヴォケ >>168
それは日本語化するルーチンじゃなくてハッシュ化するルーチンなわけだが。
それは置いといて間違ってるところは
5:split(/=/, $_);#splitの使い方間違ってます
7:$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#[0-0a-fA-F]←0-0では1-9だった場合に変換されません。
9:$CGI{variable} = $value;
ハッシュは大文字にしたほうがわかりやすいです。強制はしませんが。以上。 ハッシュ化じゃなくよーするにデコードだろ。
単純ミスでギャーギャーわめくよりはモジュール使った方がよほどいいと思うがね。
ついでに、splitの第一引数は単なる文字列でも問題なく動くぞ。
まぁ/pattern/の形のほうが良いとは思うが。 >>172
たかがデコードするのにモジュールなんて使っちゃダメだよ。
どうしてもめんどいor出来ないときだけモジュールを使う。
これ処理を早くするための鉄則。 >>173
デコードルーチンが頭に入ってるなら、もちろんそれでも構わないが。
(まぁそこまで解ってるなら普通は自作モジュールだろうが)
だが「ミスを犯すくらいなら」処理を隠してくれるモジュールが得策だと思わないか? 掲示板で、KENT-WEB(http://www.kent-web.com/)の掲示板は書き込んだあとに
ブラウザの更新ボタンを押すと、エラーで帰ってくるのですが、
tacky(http://tackysroom.com/)の掲示板だと、書き込み後リロードボタンを押しても、
エラーにならず二重登録もされていません。どの辺が違うのでしょうか?教えてください。
Locationですか? &errorでエラーサブルーチンの飛ばすんじゃなくて。
Locationにして掲示板に飛ばしてるんじゃないかな?
あっごめん
>>175に書いた。
あと
エラーサブルーチンの×
エラーサブルーチンに○
間違えた。
でPetitの場合は&html_logでそのまま掲示板に飛ばしてましたよ。
動作確認しました。 http://www.imjnews.com/bcp/cgireqbbs2/wwwforum.cgi?id=14&az=thread&number=575
つーかマルチポストうざい。
2/23からの間お前何やってた?少しは努力したか?少しは調べようとしたか?
ひょっとして他の掲示板にマルチポストして回ってたのか?
全然変わってねーじゃねーか。
ふざけんなボケ。
>>176-178
ありがとうございました。
>>179
マルチポストは別に悪いことじゃないと思うよ(藁)。 >マルチポストは別に悪いことじゃないと思うよ(藁)。
何が(藁)だよ。氏ねカス。 モノを教えてもらうのにこんな態度をでかくしていられるのか、人として不思議に思う。 よくわからんが怖くてやさしい人なのね。
マルチポストがいけないのではなく、
恩返しがないことがいけないことなのかも。
サポート受けたらあなたのリンクをクリック必須とかどう?(藁)。 perlで出来た掲示板の表示を早くする方法ってないですか?
ほとんどの掲示板はtableタグでレイアウトを整えてるじゃないですか。
でも、tableタグは<table>から</table>までが読み込まれたときに、画面に表示されるようなことを聞きました。
どうやったら、早くなりますか。 掲示板の検索機能ってありますよね?
あれをトップページから検索できるようにしたいのですが
どのようにすればいいのでしょうか?(スレ違いなら違うところで質問します >186
テーブルを外してみるのがてっとりばやいね。
最近のデザイン主義のBBSじゃ難しいだろうけど。
>188
トップページからCGIを起動すればできるよ。
トップページのフォームから掲示板の検索機能へ直接値を渡してやるの。
CGI側がRefererを規制してるならそのURLだけは加えてやるのことも必要。 >>189
その詳しいやり方が今一わからなくて..。
どこかに参考になるサイトってありますか? HTMLタグとか分かる?
分かるんだったらBBSの過去ログ検索ページのソースを貼り付けるだけでいけるよ。 >>192
それやっても無理でした。エラーが出ました。 KENTWEBじゃないけど、まぁ同じ様なもんです。
なんしか、トップページに掲示板と同じ(掲示板のログを検索できる)
検索窓をつけたいのですが、うまくできませんです。。 >195
だから教えてくれないと何行目をいじるとか教えられへん。
エラーってどんなエラー?
「refererリファラが違います」とか「いたづらはやめてください」とかだろ?
>>196
一度、KENT WEBでやってみたのでその時の話を。
(ちなみにシンプル掲示板です。)
ワード検索のソースを見て
トップページに貼り付けたのですが、検索結果は出なかったんです。
検索のボタンを教えてもトップページに変わるだけで。 >197
トップページに戻る?
<FORM>が間違ってんだろ。 cgiがeucで表示してるhtmlがS-JISなんておちじゃないだろうね? まさか。