トップページ⇒php
668コメント250KB

自作CGIを評価するスレ

■ このスレッドは過去ログ倉庫に格納されています
0001Premature end of script headers : /this/thread03/04/05 12:47ID:tIET0nhf
自分の作ったCGIをみんなに評価してもらうスレだよ。言語は問わないよ。
よほどプログラムが短くないかぎりはアプロダにでもアップしてね。
0002nobodyさん03/04/05 12:58ID:???
乙
0003nobodyさん03/04/05 14:40ID:???
ソース貼り用掲示板
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html

あぷろだはどこ使うよ?
0004nobodyさん03/04/05 15:00ID:???
PHPもOKなの?
0005nobodyさん03/04/05 15:02ID:???
>>4
>>1 くらい読め
0006nobodyさん03/04/05 15:32ID:???
CGI版のPHPならOKてことだな>>4
Cで書くCGIスレも統合するか、ゴミだし。
0007nobodyさん03/04/05 15:51ID:???
WebProgならなんでもいいんじゃネーノ?
0008nobodyさん03/04/05 17:41ID:???
CGIならいいんだろ?
0009nobodyさん03/04/05 18:07ID:???
>>5

モジュール版のPHPについて聞いたことぐらい気づけ。
0010nobodyさん03/04/05 18:09ID:???
>>9
あーなるほど、スマン。
っつーかそれもアリに決まってるじゃねーかよーヽ(TДT)ノ
0011マリモーマ ◆r6PDGT6Xd2 03/04/05 18:33ID:4Hc1kYlW
僕の作った CGIは どう? http://777.or.nu/cgi.html
0012nobodyさん03/04/05 18:43ID:???
絵に描いたような一直線ソースだな
0013nobodyさん 03/04/05 18:57ID:???
もうちょいスコープとか意識したほうがいいんじゃない?
殆どグローバル変数・・・
0014nobodyさん03/04/05 18:59ID:???
・どっかからコピーした部分以外で使われる変数が全てグローバル
・関数名から内容が想像できない(re,fot,ur,re2,wr2lok,co.gc等 sub ge {} は結構引いた)
・スタイルに一貫性がない
・$FORMの扱いがキモイ
・symlinkロックしてるが解除はどこでやってんだ?
0015nobodyさん03/04/05 19:05ID:???
>>14
5番目訂正しとく。
・symlinkロックしてないから解除はやらなくてもいいんだけどロックしないってことか。

sub lok{
if($lock == 0){return;}
local($wait) = 4;
while (!symlink(".", $lock)) {
if ($wait-- <= 0) {
&error("$(B%m%C%/%U%!%$%k$,B8:_$7$F$^$9!#(B");
}
sleep 1;
}
}


$ grep '$lock' ch/*
ch/sub.cgi: if($lock == 0){return;}
ch/sub.cgi: while (!symlink(".", $lock)) {

これじゃあ$lockは常に0だよ・・・
まあ$lockに値を入れたところで解除できんから1回しか書き込めんのだけどね。
0016マリモーマ ◆r6PDGT6Xd2 03/04/05 21:18ID:4Hc1kYlW
なるほど いろいろなアドバイス サンクス
0017これ自信作だぜ03/04/05 22:52ID:qMi3a/lA
http://oasis.minidns.net/
0018これ自信作だぜ03/04/05 23:35ID:qMi3a/lA
tail -f /var/log/httpd/accesslog
見たけど誰もアクセスして来ないや。
皆臆病者だね。
0019nobodyさん03/04/05 23:45ID:???
お前がきもいから人気無いだけだろ。とんだ勘違い野郎だな。
0020403/04/06 00:23ID:t3fZoblF
よかったら批判ください。
もうちょいコード直してから、URL晒します。
0021nobodyさん03/04/06 00:26ID:???
元から批判が欲しいとは
0022403/04/06 00:28ID:t3fZoblF
批判以外もらってもどうしようもない..
ほめてもらったら何も意味がないっす。
0023nobodyさん 03/04/06 00:31ID:???
>>17
いったけどエラー起こしとる罠
0024nobodyさん03/04/06 00:39ID:???
>>17
ソース見たらDOCTYPEがXHTMLだったけどぱっと見ても明らかに間違えまくってたのでチェックしてみた。
チェックの結果は以下のとおりです。

http://oasis.minidns.net/ を XHTML1.0 Transitional としてチェックしました。
19個のエラーがありました。このHTMLは 4点です。タグが 9種類 14組使われています。文字コードは Shift JIS のようです。

先頭の数字はエラーのおおまかな重要度を 0〜9 で示しています(減点数ではありません)。少ない数字は軽く、9 になるほど致命的です。0 は減点対象外のごく軽度のエラーで (グレイのかっこつき) でメッセージされています。

9: line 1: このXML宣言は正しくありません。 → 解説 23
6: line 5: <html> には xmlns 属性が必要です。 → 解説 86
2: line 5: <html> には lang 属性を指定するようにしましょう。 → 解説 116
2: line 5: <html> には xml:lang 属性を指定するようにしましょう。 → 解説 116
0025nobodyさん03/04/06 00:39ID:???
0: line 6: (<head>〜</head> 内に <link rev="made" href="mailto:〜" /> が含まれていません。) → 解説 121
0: line 6: (<head>〜</head> 内に <link rel="next" href="〜" /> などのナヴィゲーション用のリンクが含まれていません。) → 解説 122
1: line 6: <p> と </p> の間が空です。 → 解説 51
1: line 6: <body> での色指定が不完全です。text 属性も含めるようにしましょう。 → 解説 149
0: line 7: (<input type="text"> には tabindex 属性を指定するようにしましょう。) → 解説 166
0: line 7: (<input type="file"> には tabindex 属性を指定するようにしましょう。) → 解説 166
1: line 7: <input type="text"> には value 属性で初期値となるテキストを指定しておきましょう。 → 解説 160
0: line 7: (<input type="text"> には tabindex 属性を指定するようにしましょう。) → 解説 166
0: line 7: (<input type="submit"> には tabindex 属性を指定するようにしましょう。) → 解説 166
1: line 7: <input type="text"> には value 属性で初期値となるテキストを指定しておきましょう。 → 解説 160
0: line 7: (<input> には accesskey 属性を指定するようにしましょう。) → 解説 167
0: line 7: (<input> には accesskey 属性を指定するようにしましょう。) → 解説 167
0: line 7: (<input> には accesskey 属性を指定するようにしましょう。) → 解説 167
0: line 7: (<input> には accesskey 属性を指定するようにしましょう。) → 解説 167
9: line 7: </html> の後にまだ何かテキストがあります。 → 解説 231
0026403/04/06 00:40ID:t3fZoblF
なぜか、2重カキコデスカ!?と
0027403/04/06 00:41ID:t3fZoblF
HTMLがDOCTYPE無し、気分によって大文字小文字が混じっている
のはNGですか?
0028nobodyさん03/04/06 00:45ID:???
あ、ゴメン。エラーのせいで最後の方が減点食らってるのね。
本来のドキュメント(最初の</html>まで)でチェックしてみた。

XHTML1.0 Transitional としてチェックしました。
19個のエラーがありました。このHTMLは 8点です。タグが 9種類 14組使われています。

先頭の数字はエラーのおおまかな重要度を 0〜9 で示しています(減点数ではありません)。少ない数字は軽く、9 になるほど致命的です。0 は減点対象外のごく軽度のエラーで (グレイのかっこつき) でメッセージされています。

9: line 1: このXML宣言は正しくありません。 → 解説 23
6: line 5: <html> には xmlns 属性が必要です。 → 解説 86
2: line 5: <html> には lang 属性を指定するようにしましょう。 → 解説 116
(以下略)
0029nobodyさん03/04/06 00:47ID:???
>>27
別にいいんじゃねぇの?>>17は自信作らしいから突っ込まれてるだけで。
0030403/04/06 00:53ID:t3fZoblF
ほう、今自分で見ててすでに数箇所突っ込みどころがあったよ。
もう少し。
0031403/04/06 00:58ID:t3fZoblF
ついでにオレはここの4ではない。
0032nobodyさん03/04/06 00:59ID:???
評価して欲しいやつはトリップつけれや
0033nobodyさん03/04/06 01:04ID:???
>>31
ややこしいぞw
じゃあPHPじゃないのか?
00344 ◆R.zOhOehsw 03/04/06 01:29ID:t3fZoblF
PERLですが、まずいですか?
0035nobodyさん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:t3fZoblF
BBS: http://hex51.darktech.org/cgi-bin/the/bbs.pl
SRC: http://hex51.darktech.org/the.txt

言語: PERL
ネタ元: http://thebbs.jp/

糞ほど批判いただければ幸いです。
書き込みまくっても糞スレたてまくっても結構。
0038nobodyさん03/04/06 02:04ID:???
>>37
Perlの文法的な間違いはないみたいだけど、処理がいまいちな部分が
散見される。
効率を考えればもうちょい工夫したほうがいいだろう。
00394 ◆R.zOhOehsw 03/04/06 02:08ID:t3fZoblF
意見どうも。
もっとアルゴリズムを勉強しれってことですね?
0040nobodyさん03/04/06 02:22ID:???
・myが気になる。
・一行書き出すのにヒアドキュメント使うのは何故?
・かと思えば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:???
myもいいんだけど、実質グローバルと同じだな。
処理毎に{ }で囲んで使わなきゃ意味ないだろ。
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:???
>>43
cperl-mode使ってる?

myは変数のスコープを局所範囲に閉じ込めるためのもので、
mainパッケージでmy使ってもmainパッケージ全体から読み書きできてしまうので
いやーんな感じ
0046nobodyさん03/04/06 02:53ID:???
>>41
2193行目 $error_name = @_[0]; → $error_name = $_[0];でいいだろ
あちこちの変数、もうちょっとスコープを考えてレキシカルに
するとかしたほうがいい。
問題ないけど、読み取りopenに < をつけたりつけなかったりなどしてるのを
書き方統一したら?
他の部分なんかでも統一させる書き方をくせにしたほうが可読性良くなるし。
吐いてるhdmlはすぐにテストできないから見ていない。
00474 ◆R.zOhOehsw 03/04/06 03:00ID:t3fZoblF
>>45サン
Emacsは、普通にそのまま.plとして読んだ感じで使ってます..
mainで、my使うと、別の関数から書きかえれないのでは?
それは意味ないのでしょうか?
00484 ◆R.zOhOehsw 03/04/06 03:03ID:t3fZoblF
もしかして、mainで書いた関数は、mainに含まれますか..汗
勝手に、関数を覗いた部分がmail{}となるのかと思ってました。
0049nobodyさん03/04/06 03:04ID:???
>>47
>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:???
#!/usr/bin/perl

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
となる(安全
0051nobodyさん03/04/06 03:06ID:???
>>48
main関数なんてもんはない。
mainパッケージ。この辺はちゃんと勉強した方が良かれと思われる。
00524 ◆R.zOhOehsw 03/04/06 03:08ID:t3fZoblF
はい、よく分かりました。
ありがとうございます。
00534103/04/06 03:11ID:???
>>46
御意見ありがとう御座います。
こんなに早く返って来るなんて…。感激です。
…と言うより、私の記述が雑なので簡単に変な所が見つかってるだけなのだろうか。複雑な気分…汗

もし、ヒマな方がいらっしゃいましたらまだまだ御意見をたくさんお聞かせ下さい。
0054nobodyさん03/04/06 03:13ID:???
どれどれ。ちょっと見てみるか。
0055nobodyさん03/04/06 03:16ID:???
>>53
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.

0056nobodyさん03/04/06 03:20ID:???
>>55 まあtypoじゃないみたいだけどね。
・2350行目〜sprintfですっきりと
0057nobodyさん 03/04/06 03:31ID:???
他人が書いたソースって見てると面白いもんだねぇ・・・
0058nobodyさん03/04/06 03:31ID:???
つーか、でかっ
10KB超えるCGIなんて作ったこと無い・・・。
0059nobodyさん03/04/06 03:32ID:???
・receive_error ifはいるのか?
・localの意味が分からないならmyを使おう
・クラックを気にするならcryptを使おう
・684行目はどういう意味?
・=はエスケープしなくていいよ
・PCと携帯を同時に扱うなら、途中までは両者に依存しない処理にしておいて
 最後の最後いざ出力するという時に振り分けると綺麗になるよ
0060nobodyさん 03/04/06 03:34ID:???
>>58
儂は300Kのソースがあるぞ(ぉ
0061nobodyさん03/04/06 03:38ID:???
・最初(〜300行目)のqqはなんだ?
まぁあとは4氏にも共通するけど、インデントがおかしいのと
記述に一貫性がないのが気になるね。
サブルーチンがそこそこ見られるのは良いと思う(ただ、もう少しstrictに書こう)

これは個人的な趣味だけど、俺はグローバルなオプションはハッシュにする。
%option =(board_name => "hoge", max_mes => 50 ); みたいに。
00624 ◆R.zOhOehsw 03/04/06 03:45ID:t3fZoblF
>>61
なるほど。
今までファイルから読んだ設定なんかはハッシュにしてましたが、
CGIだと初心者設置者が混乱するかと思って、できるだけ
見た目で分かりそうにしたつもりでしたが、ハッシュのがイカス。
0063nobodyさん 03/04/06 03:49ID:???
あと、自分的趣味をいうと、subの変数はことごとく局所変数にするほうがいいと思うなぁ

sub ayaya{
  my $num = shift;
  $num++;
  return($num);
}

みたいな形でやっとくほうが誤動作しにくい。
00644103/04/06 03:52ID:???
>>54-60
もう早こんなに…!ありがとう御座います。
最初はなんか晒すの恥ずかしいと思ってたけど、晒して良かったなぁ…(嬉

>>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
localは宣言した{}内から読んだ関数内からでも参照できる。かな..

$cry = crypt('passwd', 'sl');
で、DESというので暗号化します。slはsaltで2byteとります。
暗号化されてた文字列(13byte)の先頭2byteに入りますから、
パスワードを検査するときに、同じsaltでもう一度暗号化して、
暗号済みのものと同じになれば同じパスワードです。
ん、いい説明探したほうが早いか..
0066nobodyさん03/04/06 04:18ID:???
ハッシュを普通の変数のように使うのってだめですか?
■ このスレッドは過去ログ倉庫に格納されています