自作CGIを評価するスレ
■ このスレッドは過去ログ倉庫に格納されています
0001Premature end of script headers : /this/thread
03/04/05 12:47ID:tIET0nhfよほどプログラムが短くないかぎりはアプロダにでもアップしてね。
00304
03/04/06 00:53ID:t3fZoblFもう少し。
00314
03/04/06 00:58ID:t3fZoblF0032nobodyさん
03/04/06 00:59ID:???00344 ◆R.zOhOehsw
03/04/06 01:29ID:t3fZoblF0035nobodyさん
03/04/06 01:34ID:???0036あぼーん
03/04/06 01:41ID:???/:\.____\
|: ̄\(∩´∀`) \ <先生!こんなのがありました!
|:在 |: ̄ ̄ U ̄:|
http://saitama.gasuki.com/aomori/
00374 ◆R.zOhOehsw
03/04/06 01:56ID:t3fZoblFSRC: http://hex51.darktech.org/the.txt
言語: PERL
ネタ元: http://thebbs.jp/
糞ほど批判いただければ幸いです。
書き込みまくっても糞スレたてまくっても結構。
0038nobodyさん
03/04/06 02:04ID:???Perlの文法的な間違いはないみたいだけど、処理がいまいちな部分が
散見される。
効率を考えればもうちょい工夫したほうがいいだろう。
00394 ◆R.zOhOehsw
03/04/06 02:08ID:t3fZoblFもっとアルゴリズムを勉強しれってことですね?
0040nobodyさん
03/04/06 02:22ID:???・一行書き出すのにヒアドキュメント使うのは何故?
・かと思えばqq連発で使ってたり…
・1.入力 2.処理 3.出力 という風に処理を分けよう
・自作自演防止はハッシュとかじゃ駄目なのかい?
・FORMの処理が2回書いてあったりして無駄
・HEADリクエストは面白いね。
0041nobodyさん
03/04/06 02:32ID:???http://kabocha.org/jelfe/
↑のサイトの
http://kabocha.org/jelfe/cgi/ybbs.html
↑のページに
山口_BBS2.00b1
↑って言う私のCGIがあるのですが、いかがな物でしょうか。
ただし「携帯のEZ専用」なので皆様の中には意味を理解しかねる出力があるかもしれません。
ああ、ついに2ちゃんねるに晒してしまったよ…
冷静に考えると恥ずかしいけど…、プロの方(?)に見てもらいたい気持ちが上のようだ…。
変なところあったらけなしてくれてもけっこうです、むしろけなして下さい。
0042nobodyさん
03/04/06 02:35ID:???処理毎に{ }で囲んで使わなきゃ意味ないだろ。
00434 ◆R.zOhOehsw
03/04/06 02:47ID:t3fZoblF>・一行書き出すのにヒアドキュメント使うのは何故?
エディタで折り返すのが気になるので..
>・かと思えばqq連発で使ってたり…
Emacsなので、ヒアドキュメントだと表示する特殊によって
自動のタブがおかしくなるのです..
全部個人的なことですね..修正します。
myに関しては、ちょっと調べてみます。
その他の意見に関しても、もう一度よく考え直してみます。
00444 ◆R.zOhOehsw
03/04/06 02:49ID:t3fZoblF特殊文字、記号です。
0045nobodyさん
03/04/06 02:50ID:???cperl-mode使ってる?
myは変数のスコープを局所範囲に閉じ込めるためのもので、
mainパッケージでmy使ってもmainパッケージ全体から読み書きできてしまうので
いやーんな感じ
0046nobodyさん
03/04/06 02:53ID:???2193行目 $error_name = @_[0]; → $error_name = $_[0];でいいだろ
あちこちの変数、もうちょっとスコープを考えてレキシカルに
するとかしたほうがいい。
問題ないけど、読み取りopenに < をつけたりつけなかったりなどしてるのを
書き方統一したら?
他の部分なんかでも統一させる書き方をくせにしたほうが可読性良くなるし。
吐いてるhdmlはすぐにテストできないから見ていない。
00474 ◆R.zOhOehsw
03/04/06 03:00ID:t3fZoblFEmacsは、普通にそのまま.plとして読んだ感じで使ってます..
mainで、my使うと、別の関数から書きかえれないのでは?
それは意味ないのでしょうか?
00484 ◆R.zOhOehsw
03/04/06 03:03ID:t3fZoblF勝手に、関数を覗いた部分がmail{}となるのかと思ってました。
0049nobodyさん
03/04/06 03:04ID:???>mainで、my使うと、別の関数から書きかえれないのでは?
「別の関数」が良く分からんが、mainパッケージに属している関数では
my $a = 1;
print $a,"\n";
&routine;
print $a,"\n";
sub routine {$a = 3;}
$ perl hoge.pl
1
3
となる。
0050nobodyさん
03/04/06 03:05ID:???require "hage.pl";
my $a = 1;
print $a,"\n";
&hage::routine;
print $a,"\n";
# ↓はhage.pl
#!/usr/bin/perl
package hage;
sub routine {$a = 3;}
1;
では、
$ perl hoge.pl
1
1
となる(安全
00524 ◆R.zOhOehsw
03/04/06 03:08ID:t3fZoblFありがとうございます。
005341
03/04/06 03:11ID:???御意見ありがとう御座います。
こんなに早く返って来るなんて…。感激です。
…と言うより、私の記述が雑なので簡単に変な所が見つかってるだけなのだろうか。複雑な気分…汗
もし、ヒマな方がいらっしゃいましたらまだまだ御意見をたくさんお聞かせ下さい。
0054nobodyさん
03/04/06 03:13ID:???0055nobodyさん
03/04/06 03:16ID:???Name "main::get_time_yday_2" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2336.
Name "main::get_time_isdst_3" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2339.
Name "main::get_time_isdst_2" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2336.
Name "main::get_time_wday_3" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2339.
Name "main::mail_jcph" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2071.
Name "main::get_time_yday" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2333.
Name "main::get_time_sec_3" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2338.
Name "main::get_time_wday_2" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2336.
Name "main::get_time_sec" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2332.
Name "main::get_time_wday" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2333.
Name "main::get_time_isdst" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2333.
Name "main::get_time_sec_2" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2335.
Name "main::main_user_agent" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 434.
Name "main::get_time_yday_3" used only once: possible typo at H:\Work\山口BBS200b1\ybbs.cgi line 2339.
0057nobodyさん
03/04/06 03:31ID:???0058nobodyさん
03/04/06 03:31ID:???10KB超えるCGIなんて作ったこと無い・・・。
0059nobodyさん
03/04/06 03:32ID:???・localの意味が分からないならmyを使おう
・クラックを気にするならcryptを使おう
・684行目はどういう意味?
・=はエスケープしなくていいよ
・PCと携帯を同時に扱うなら、途中までは両者に依存しない処理にしておいて
最後の最後いざ出力するという時に振り分けると綺麗になるよ
0061nobodyさん
03/04/06 03:38ID:???まぁあとは4氏にも共通するけど、インデントがおかしいのと
記述に一貫性がないのが気になるね。
サブルーチンがそこそこ見られるのは良いと思う(ただ、もう少しstrictに書こう)
これは個人的な趣味だけど、俺はグローバルなオプションはハッシュにする。
%option =(board_name => "hoge", max_mes => 50 ); みたいに。
00624 ◆R.zOhOehsw
03/04/06 03:45ID:t3fZoblFなるほど。
今までファイルから読んだ設定なんかはハッシュにしてましたが、
CGIだと初心者設置者が混乱するかと思って、できるだけ
見た目で分かりそうにしたつもりでしたが、ハッシュのがイカス。
0063nobodyさん
03/04/06 03:49ID:???sub ayaya{
my $num = shift;
$num++;
return($num);
}
みたいな形でやっとくほうが誤動作しにくい。
006441
03/04/06 03:52ID:???もう早こんなに…!ありがとう御座います。
最初はなんか晒すの恥ずかしいと思ってたけど、晒して良かったなぁ…(嬉
>>55-56
はい、タイムの所めちゃくちゃです。自分でもここは直さねば!と思ってました。
ありがたく直させてもらいます。
>>57
そうですか。私のレベルだと他人の記述は自分と進めかたが違うので見てると疲れてしまいます。
そんな私はperlしかできず、初めて1年くらいになります。面白いと言って頂けて幸いです。
>>58
>・receive_error ifはいるのか?
はい、これは利用者のかたが「0」と設定した場合、
バイト数無制限にするため、判定にかけません。
>・localの意味が分からないならmyを使おう
ごもっともです。言われてみると私もlocalの意味が分かりません。汗
>・クラックを気にするならcryptを使おう
cryptって分からないので調べてみますね。今は取り敢えず返事を急いでます。
>・684行目はどういう意味?
これは、携帯用なのでパケ代の節約です。
&nbsp;だと半角20文字で改行と同じになります。(多くの携帯は横が半角20文字)
で、携帯はパケ代(受信料)が深刻なので、
&nbsp;20コ。つまり120バイトを<BR>とし、4バイトに抑えます。
これで受信料は1/30になります。相手が携帯ならではの記述です。
>・=はエスケープしなくていいよ
はい。
>・PCと携帯を同時に扱うなら、途中までは両者に依存しない処理にしておいて
> 最後の最後いざ出力するという時に振り分けると綺麗になるよ
ついつい手抜きでガーッとコピーしてしまいました。汗
00654 ◆R.zOhOehsw
03/04/06 04:01ID:t3fZoblF$cry = crypt('passwd', 'sl');
で、DESというので暗号化します。slはsaltで2byteとります。
暗号化されてた文字列(13byte)の先頭2byteに入りますから、
パスワードを検査するときに、同じsaltでもう一度暗号化して、
暗号済みのものと同じになれば同じパスワードです。
ん、いい説明探したほうが早いか..
0066nobodyさん
03/04/06 04:18ID:???0068nobodyさん
03/04/06 04:23ID:???$def_log_file = q[./log.txt];
これは納得できるが
#○一度に表示されるレスの件数。
#[3〜6]推奨。多く設定すると端末側で読み込めない場合があります。
$def_mess_page = qq[5];
こっちをダブルクオートで囲むのはなぜ?
数値をクオートで囲まれると変な気がする…
0070nobodyさん
03/04/06 04:32ID:???どうしてもその前後で値が必要になったりすることが多いので
サブルーチンなら先頭に全部まとめて書いてる・・・
007241
03/04/06 04:37ID:???>・最初(〜300行目)のqqはなんだ?
qq自体の意味でしょうか…?qならシングルクウォートでqqならダブルです。
入力は、ご使用していただく方に任意で入力してもらいます。量が多くてめんどうな気がしますけど…。
>インデントがおかしいのと
>記述に一貫性がないのが気になるね。
つまり見にくいと…。私の中では今までで1番気をつけた記述だったりしますが…
頑張ります。
サブルーチンがそこそこ見られるのは良いと思う(ただ、もう少しstrictに書こう)
strictってなんだろう、汗。調べてみます。
>これは個人的な趣味だけど、俺はグローバルなオプションはハッシュにする。
>%option =(board_name => "hoge", max_mes => 50 ); みたいに。
そうですか、私はこの記述で
「グローバルな変数の先頭にmain」をつけ、
「ルーチンのみの変数の先頭にルーチン名」を付けたのですが、
名前が長くなりすぎて失敗してしまいました。
>>65
どうもです。
もしかしたら、返事を飛ばしてしまった方が居るかもしれませんがすみません。
明日からでも記述の整理をしたいと思います。
まだまだなにかありましたら、お願いします。ヒマな方は眺めてやって下さい。
当たり前ですが、全部読んで参項にさせてもらってます。
007341 ◆hht1jkpw9E
03/04/06 04:43ID:???はい、これで行きます、トリップ。
>>68
もし、
#○一度に表示されるレスの件数。
#[3〜6]推奨。多く設定すると端末側で読み込めない場合があります。
$def_mess_page = 5;
とした場合、どこに入力したら良いか目で確認しにくいかと思いまして…。
数字なのでシングルではなく、ダブルで囲んでます。
なんて言うのか、入力する場所を
[ここ];
にしたら始めて設置する人でも分かりやすいと考えた結果こうなりました。
0074nobodyさん
03/04/06 04:47ID:???んー基本的なことを言わせてもらうと・・・
コメントでちゃんと書いとけば理解してもらえる範囲じゃないかと思うけどね・・・
それでわからないっていうのは相手する必要が無いような・・・(ぉ
0075nobodyさん
03/04/06 04:48ID:???激しく意味不明なやつになっちまったけど
sub saitama{
my ($value,$saitama,$hoge);
foreach $value (@_){
($saitama,$hoge) = split(/,/,$value);
if($saitama == $hoge){ return 1; }
}
return 0;
}
こんなやつもだめ?ってこと
0076nobodyさん
03/04/06 04:53ID:???普通に紛らわしい。なんとかしてほしい。
0077nobodyさん
03/04/06 04:55ID:???× 自作CGIを評価するスレ
○ 自作CGIを評価してもらえるスレ
○ 自作CGIを評価していただくスレ
じゃない?
007871
03/04/06 04:55ID:???sub saitama{
my $ret = 0;
foreach my $value (@_){
my ($saitama,$hoge) = split(/,/,$value);
if($saitama == $hoge){
$ret = 1;
last;
}
}
return $ret;
}
私ならこう書くかな
007975
03/04/06 05:00ID:???漏れならこう書くんだけど
sub saitama{
foreach my $value (@_){
my ($saitama,$hoge) = split(/,/,$value);
if($saitama == $hoge){ return 1; }
}
return 0;
}
78のコードと比べるとどっちのほうが
好まれるのかい?まぁ下らんと言えば下らないのだが・・・
>>73
use strict 使ってみたら?
008071
03/04/06 05:03ID:???008237 ◆0wPZQfeVoI
03/04/06 05:07ID:t3fZoblF非常にすみません。
Perlの極意スレの4番です。
もう沈んでどこかに行ったスレです。
なんとなくそのまま4でした、改名します、37です。
0083nobodyさん
03/04/06 05:09ID:???漏れは 何回も使う関数的なやつは結構まともに書いてるけど
本体が長くなるからただ分けただけのサブルーチン的なものだと
かなりだらしないわ。
一応strictなコードでmod_perlで動いてる
0084nobodyさん
03/04/06 05:10ID:???エラー処理でも
if (真) {
if (真) {
if (真) {
# 何か処理
} else {
$ret = 0;
}
} else {
$ret = 0;
}
} else {
$ret = 0;
}
より
if (偽) {return 0;}
if (偽) {return 0;}
if (偽) {return 0;}
# 何か処理
の方が圧倒的に見やすいだろう。だから俺は>>79だな。
0085nobodyさん
03/04/06 05:12ID:???それ以上続けるのが無意味と分かっている場合に
だらだらと引きずるのは良くない。すぱっとreturnすべき。
008671
03/04/06 05:13ID:???まぁ、別に好きなように書けばいいんだけど、
グローバル変数の値をサブルーチンから出力することもあるし・・・
それ以前に、どのレベルで言ってるかつーのが気になる所かもなぁ
ちなみにgotoは使わないよ。必要ないから(w
008737 ◆0wPZQfeVoI
03/04/06 05:15ID:t3fZoblFなるほど、私は上のほうの書き方しますね..
やはり、コードが見やすいというのもプログラムの重要な要素に
はいるのでしょうか?
008879
03/04/06 05:16ID:???それ書くなら
if(真 && 真 && 真){何か}else{return 0;}
だろうなぁ…
まぁ趣味でやってるプログラミングなんで
動いたら嬉しいって程度なんだが(w
>>83
関数だと割ときれいに書くな 漏れも
009137 ◆0wPZQfeVoI
03/04/06 05:26ID:t3fZoblFそのためには1度しか使わない処理でも無駄にサブルーチン作って、
見やすくすることも必要でしょうか?
趣味で作るので、自分以外がソース読むことが無かったため
とりあえず、自分が読めれば気にしなかったのですが。
009237 ◆0wPZQfeVoI
03/04/06 05:29ID:t3fZoblFエラー処理ですが、
if () { えらー1}
if () { えらー2}
if () { error }
としたほうがいいですかね?
009371
03/04/06 05:31ID:???慣れてない時は単純な処理にでもサブルーチンは作ってたけど、
今は、機能ごとにサブルーチンを作ってるって感じですね
同じ処理でも規模がおっきくないとそのまま書きなぐりすることがおおいです
009479
03/04/06 05:32ID:???エラーで止める優先度あるの?
unless ($a < 100){&error("$aが100以下じゃありません");}
unless ($b eq 'GET'){&error("$bがgetじゃありません");}
〜〜
でいいと思うが・・・
0096nobodyさん
03/04/06 05:38ID:???あっと、>>84の例ではエラー処理が同一に書いてしまったのでおっしゃるとおりなんですが、
エラー処理が失敗した段階によって異なると考えてくださいませ
0097nobodyさん
03/04/06 05:40ID:???○エラー処理の部分に同一の処理を
プログラム言語の前に日本語勉強してきます。。。
009837 ◆0wPZQfeVoI
03/04/06 05:40ID:t3fZoblFなるほどー。
私は2度以上行う処理で引数と返り値が必要なものをサブルーチンに
するようにしていますが、今回少し考え直そうかと。
010079
03/04/06 05:43ID:???第一引数は数値だよ第二引数になんかメモ
sub error内でエラーログに記録する内容とかを振り分けることができる
perlだけじゃないが でかいやつになると
エラーメッセージ一覧表だけで数KBになる・・
010137 ◆0wPZQfeVoI
03/04/06 05:43ID:t3fZoblF確かにその通りです。
優先順位などありません..
010271
03/04/06 05:48ID:???規定外の値だとデフォルト値になるようにしてるなぁ
010379
03/04/06 05:49ID:???かなり違うことがわかったんで 今日は寝るサラバ
起きたら局所変数を意識したプログラムを書いてみよう。
010437 ◆0wPZQfeVoI
03/04/06 06:08ID:t3fZoblFまだすべて修正できていませんが、一応アド載せときます。
BBS: http://hex51.darktech.org/cgi-bin/the/bbs.pl
SRC: http://hex51.darktech.org/the.txt
余談ですが、部屋がめちゃめちゃ寒いです..
010571
03/04/06 06:17ID:???my $cntfile = './count.dat';
my $log_dir = './logs';
our $lock_name = 'lock';
<中略>
my $t_h_width = 0;
my $t_f_width = 70;
my $name_size = $name_max - 4;
my $title_size = $text_cols;
この部分って全部グローバルだからourになっちゃうよん
my $hoge #グローバルと同意で無意味
{
my $hoge; #○
{
my $hoge; #○
}
}
みたいにブラケットで括られた中(サブルーチンでもなんでもいいけど・・・)で宣言した部分じゃないと無意味
010637 ◆0wPZQfeVoI
03/04/06 06:29ID:t3fZoblFさっさとourにしておきます。
010737 ◆0wPZQfeVoI
03/04/06 06:33ID:t3fZoblF0108nobodyさん
03/04/06 06:34ID:???010937 ◆0wPZQfeVoI
03/04/06 06:52ID:???取り合えず今日は寝てません。
0110nobodyさん
03/04/06 08:06ID:???our にはならない。
別のパッケージから読みこんだりしてるのでなければ、
わざわざ our にする方が意味ないと思うけど?
0111これ自信作だぜ
03/04/06 08:51ID:dTzeXpbT0112あぼーん
03/04/06 08:52ID:???―――┴┴┴┴┴―――――、
. . /  ̄ ̄ ̄//. ̄ ̄| || ̄ ̄ ̄||| ̄ || __________
./ ∧// ∧ ∧| || ||| || /
[/____(゚_//[ ].゚Д゚,,) ||___||| || < こんなのが有りますた
. ||_. * _|_| ̄ ̄ ∪|.|. |ヽ.__|| \__________
. lO|o―o|O゜.|二二 |.| 救済病院 ||
.| ∈口∋ ̄_l__l⌒l_|___|_l⌒l._||
 ̄ ̄`ー' ̄ `ー' `ー' `ー'
http://saitama.gasuki.com/koumuin/
0113これ自信作だぜ
03/04/06 08:52ID:dTzeXpbThttp://oasis.mininddns.net/
0114これ自信作だぜ
03/04/06 08:53ID:dTzeXpbThttp://oasis.minidns.net/
0115あぼーん
03/04/06 09:17ID:???川o・-・)ノ <先生!こんなのがありました!
__/ / /
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/shinagawa/
0116これ自信作だぜ
03/04/06 10:29ID:dTzeXpbT蜜柑性だけどな
0117nobodyさん
03/04/06 10:35ID:???ってでてるよ>116
0118nobodyさん
03/04/06 10:45ID:???>>71はブロックの外で宣言すると、例えばサブルーチンの中からでも参照できてしまうので
変数宣言する時は、スコープを絞って適切なブロック内で宣言しよう…と言っているのだと思う。
修正というか、むしろ改悪されえてるような・・・。
our にしてしまうと、他のファイルからも値を参照出来る様になってしまうので、
# つっこみたかったのは、
# > この部分って全部グローバルだからourになっちゃうよん
# my で宣言してるのに勝手に our にはならないよー。ってこと。
よくある方法だと、main関数(サブルーチン)を作るか、
単にブロックで囲む。(ラベルは別にいらないけど便宜上)
MAIN:{
my $foo = 'bar';
;
}
ちなみに、定数宣言なら変数にはせずに、
use constant LOG_DIR => './logs';
という風にしておくと、代入できないから
グローバルとか関係なく中の値は保証されるよ。
011937 ◆0wPZQfeVoI
03/04/06 14:26ID:???囲ってみます。
012071
03/04/06 15:01ID:???>変数宣言する時は、スコープを絞って適切なブロック内で宣言しよう…と言っているのだと思う。
そいう意味.、言い方まずかったですな・・・
0121nobodyさん
03/04/06 15:42ID:???while{} foreach{} for{} sub{} {}
が?有効なの
if{}はどうなるの?
0122nobodyさん
03/04/06 15:46ID:???012371
03/04/06 15:49ID:???基本的に {}で囲ってる部分は全部スコープになりますよん
if{}でも eval{}でも 一緒
ファイルの重複を避ける処理
{
my %count;
@array = grep(!$count{$_}++, @array);
}
これみたいに、スコープを作るために括る事もありますし
0124nobodyさん
03/04/06 15:57ID:???なんで局所変数とかみんなつかうの????
012771
03/04/06 16:12ID:???グローバルがいいっていうなら、そうすればいいのじゃない?
自分だけでやっとればいいってのなら一向にかまわないけど、
複数の人がからんでくるとなるとそうもいかない
012837 ◆0wPZQfeVoI
03/04/06 16:44ID:???今日はPHPで学校の掲示板を作るので
あまり変更はないかもしれません。
>>71さん
気をつけないと
if ($hoge eq 'hoge') {
my $foo = 'hoge!';
}
print $foo;
この場合マズイですよね?
チョットmyについていろいろと試してみます。
012971
03/04/06 16:49ID:???それはスコープの外に print $fooがあるので動作しない
if ($hoge eq 'hoge') {
my $foo = 'hoge!';
print $foo;
}
コレが正解
■ このスレッドは過去ログ倉庫に格納されています