自作CGIを評価するスレ
自分の作ったCGIをみんなに評価してもらうスレだよ。言語は問わないよ。
よほどプログラムが短くないかぎりはアプロダにでもアップしてね。
(⌒V⌒)
│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン 52 名前:nobodyさん :03/08/30 20:46 ID:???
>>50
自作CGIを評価するスレ
http://pc2.2ch.net/test/read.cgi/php/1049514428/ Blogの試作公開
http://ex.1000gex.net/blog.zip
common.phpで初期設定。
排他制御も何も入れてないがとりあえず動いた。
これからトラックバックを盛り込むけど難儀するだろうなぁ ダメ出しきのん。
SAFE_MODEでさっそく引っかかったが こちら素人だが、ざっと読んで気づいた点を。
script書き始めなら上々の滑り出しだと思う。
■L38の $ip のダブルクウォートは意図不明。
■” と ’ が混在してるけど、このスクリプトで使われてる ” は上記をのぞいて ’ に統一可能。
■L41は、$newdata = $newcont . '<>' . $_SERVER['REMOTE_ADDR'] ; と書けば十分なのでは。
■関数名とレフトブラケットの間に半角スペースがあったり無かったりする。これは趣味だから
どう書いてもいいと思うが、普通は入れない。制御語(ifとかforとか)の後には入れる。そうすることで
関数と制御構造を見分けやすくする。カラーリング機能のないエディタではこの方が見やすい気もする。
いずれにせよ、どっちかに統一したほうがよいと思われ。
■切り詰めを忘れている。ので、現データが 13<>127.127.127.127 で上書きデータが、14<>25.25.25.25 だった
場合、14<>25.25.25.257.127 に。書き込んだ後で、ftruncate(); を使ってファイルを切り詰める必要あり。
■L29の rewind(); は意図不明。
ログファイルが壊れる(例えば 8424<>127.0.0.1420<>127.0.0.8420<>127.0.0.842の ように)から
入れたのなら、アイディアとしては◎だが、スマートな処理とはいえないかと。
■あと、排他制御にバグがあるのでは。
ロックがかかっていても、fopen(); も flock(); も、 warning や fatal error (noticeも) を吐かないため、
処理が続行する。排他制御になってもならなくてもこのスクリプトは処理を最後まで実行するので、flock(); は
ちゃんと働いてない。
実際には起こらないかも知れないが、論理上、ロックがかかっているために L32 の fgets(); が失敗して
$buf に false が入ってカウンターが0に戻る可能性がある。L26でロックが取れなかった場合、
つまり前のリクエストを処理中の可能性がある場合、書き込みをスキップするかスクリプトを終了
するかブロックモードで待機させる必要があると思う。http://jp.php.net/flockにあるとおり、flock(); は
失敗すると false を返す。
■同じ理由で、前のロックが邪魔してロックがかかっていないのに書き込みに進行してしまうことがある。
書き込みがいくつも重なると、dat の内容がが妙なことになる予感。ここらあたりを rewind(); が力技で
解消しているように見える。 ちなみにサンプルページ
http://s2.arigato3.net/~hon7/blog/
ハイブリッドP2Pによるトラックバックを考えてます >>452
詳しく指摘していただきありがとうございます。
とりあえず''に統一し、関数名とレフトブラケットの間のスペースを
制御構造のみ入れるようにしました。
また、書き込み処理を行った後に、
// ファイルを切り詰める
ftruncate($fp, ftell($fp));
という処理を加えました。
ロックのバグについてなのですが、Googleで調べたところ、
flockはデフォルトでブロックモードになっているらしいのですが、
http://itbtech.itboost.co.jp/perl/perl_06.php
よろしくお願いします。
>457
ああごめん。Manualみたらおもっくそそう書いてあった、、。
flockでとまるから一般の環境なら多分大丈夫だね。
こっちの検証スクリプトの間違いなのでflockとrewindの話しはなかったことに。
秒間50リクエストくらいでは問題なかったです(php4.3.0 apache1.3.27 RHLinux)。
ftruncate ( $fp , ftell ( $fp ) ) ; は ( $fp , strlen ( $newdata ) ) ; なんちゅう書き方もある。
なるほど、参考になりました。ありがとうございます。
とある会社の部活動のHPを管理している者です。
Web上で部の共有資産の貸し出し申し込み等の管理を行えるといいなぁ、と思いいろいろとCGIを探してはいるのですがなかなか見つかりません。
探しているのは、次のようなCGIです。
1.画面で借りたい物を選択・自分の名前・貸出期間等の入力、申し込み
2.画面上では「貸し出し中」等に表記が変化(それか削除されるなど、申し込みが行えない状態に変化)
3.sendmailが使えないサーバなので、申し込みがあったことをログに吐き出し、管理人が定期的にそれをチェックし貸し出す
こういうものです。
サーバはinfoseekのiswebでPerl、Python、Ruby、PHPが使えます。
ショッピングカートCGIを活用してもいいなと思ったのですが、sendmailを利用する物がほとんどで、上記のようにログにのみはき出す物はあったことはあったのですがシェアウェア(\15K!)でした。
それほど資産の数が多いわけでもなく、貸し出し回数もそんなに多くないので、15000円もかけるわけにはいきません。
出来れば無料、もしくは1〜2千円程度で利用できるCGIがありましたら、教えてください。
よろしくおねがいします。
>464
463です
え〜と。
スレ違いだ、ということですか…?
…すいませんでした。
sageはmail欄でw。
どっかに「こんなCGI探してます」的なスレあったハズだよ。 >>465
>スレ違いだ、ということですか…?
スレ違いじゃないと思うんだったら自作CGIへのリンク貼れよ。
自作CGIを評価するスレなんだからさ。 >>464
>>467
ご迷惑をおかけしました。
>>466
>>468
そこに行ってみます。ありがとうございます perlでRead-Write Lockを実装してみますた。
複数プロセスでの10,000件書き込み耐久試験もクリアしたっぽいです。
ただ、ちょっと遅いように感じるのですがどでしょ?
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html 知識ゼロからがんばってXML化にこぎつけました。
スタイルシートだけでWebデザインが可能です。
PHP4+MySQL
http://arigato3.s36.xrea.com/x/bbs.php
>>473
すごいね。どのくらいすごいのかいまいちわからんけど。
どのくらい時間かかった? >>473
ダメXMLの見本として宣伝してもいいですか?っていうくらいダメなXML。 > 知識ゼロからがんばって XML化にこぎつけました。
___Λ____
|知識ゼロのまま| ●●●マスコミの 「盗聴/盗撮」 は許されるの?その4●●● http://natto.2ch.net/mass/kako/994/994602694.html
62 名前: 文責:名無しさん 投稿日: 2001/07/10(火) 12:21
小型盗聴器、電話盗聴、web(電子メール)盗聴、郵便物の開封、
集合住宅の隣に引っ越してきて壁に聴診器、または集音マイクを向ける。
関係者からの聞き込み、ごみあさり、ストーキングにより行動パーターンの把握、
行動パターンを調べた上での待ち伏せ。全部、人海戦術を使えば十分可能です。
323 名前: 文責:名無しさん 投稿日: 2001/07/30(月) 20:48
集団で盗聴なり、付きまといなり、身辺調査なりした後で、集めた個人情報を利用して、
メディアを通じて本人にしかわからないように「監視してる」とほのめかしたり。
待ち伏せや尾行などしておいて、本人の前で「監視してるぞお〜」と、嫌がらせをしてみたりする。
これを一定期間継続して繰り返す。
一定期間、上記の嫌がらせを繰り返すと、加害者がすでに嫌がらせをしていなくても、
被害者は、ずう〜っと嫌がらせが続けられてると思い込んでしまう。
(痴漢の被害者が、外であった人が全員痴漢だと思い込むのと同じ)
それと同じように、ここのスレッドに書かれている、盗聴した情報を二次利用する嫌がらせを
やっていないときでも、被害者は自分から自分と関わりがある
情報をメディアから探し出して自分に関係があるのではないかとこじつけてしまう(関係妄想)。
関係妄想を引き起こすように嫌がらせを行うそれ自体がマインドコントロールの一過程である。
被害者が関係妄想を引き起こした時点で今度は精神病にかかったと噂を流して、さらにからかう真似をする。
ノイローゼになるように追い込んで、更に自殺するように持っていこうとする。
被害者がこういった心理状態になるのを嫌がらせの関係者は経験的に知っているのだろう。 すいません、午前中探したんですけど、見つかりませんでした。
パソコンと携帯3社兼用の掲示板で、スレッドまたはツリー表示でかつ
パスワードで入る人の管理が出来るCGIご存じありませんか?
スレッド、パスワードどちらかだけだとあったんですが・・・。 箱庭諸島PHP版の改造版、箱庭諸島S.Eを今日公開配布開始しました。 http://erobon.e-un.jp/
これはどうでしょうか?
デザイン以外は自分で作りました。 >>490
CGIです。
サーバーサイドで動いているのでCGIです。
もっと勉強してください。 >>491
titleタグはmetaの後に書いてくらはい >>492
いま検索して調べたら
metaタグの後にtitleタグを書いてました。 >>491
あのね、見た目とかを評価してもらうスレじゃないの
ソースを公開してちょうだい > サーバーサイドで動いているのでCGIです。
CGIは動いたりしない。 >もっと勉強してください。
悪代官が黄門様に無礼者と言ってるのを思い出しちゃったw >>496
CGIとはWEBサーバーがWEBブラウザからの要求に応じてプログラム
を起動するための仕組みです。
”CGIは動いたりしない。”
馬鹿か? CGIはシステムでも仕掛けでもない。
インターフィエスの一仕様。
モジュールからプロセス作ることもできるが、
あれもCGI? >>502
どうせperl=cgiとか
まだ思ってるアフォだろ? unlessはほかの言語と混同するからやめれ
とか書いてある本があった気がする
ほかの言語を使わなければいいだけの話なのに・・・ >>504
マジ?
それって、if ははほかの言語と混同するからやめれというのと同じことだよね 汎用的なプログラミングの作法を身につける為なんじゃないかな?if だと他の言語でも大抵応用が効く。
同じような理由でperlの$_(暗黙の代入)はなるべく使うなとか書いてる本もあったよ。
>>506
なんだそりゃ?(藁
じゃあ混同しやすい elsif は使わないほうがいいってことか? >>508
差別はイクナイ!
何国ってのがどこのことだか知らんが,何国の人に失礼だよ(藁 >>509
ハァ?
あたまのよわいのがなんにんか・・ って書いてあるが、どう読んだら何国の人になるんだ?
502,504,506,508が(ry >>510
「なにじんか」って読んだんだろ。>>511の言うように洒落だろうがつまらん。 表計算ができるランキングCGIを作ってみたので評価お願いします。
http://ssr.xrea.jp
けっこういい出来に仕上がったと思うけど、初めての人は操作にとまどうかも >>513
落としたYo
とりあえず使えそう・面白そうな物だったら、朴らせてもらうわ(w ところで、ちゃんと評価してるのって最初のほうだけだね。 >>521
・ここは見た目じゃなくコードを評価するスレだ。
・use strict; しろ。
・perlstyle 読め。
・デカいの持ってきても面倒だから読まんぞ。
…のどれかに該当していたら、まともなレスは返ってこない。 DirectoryIndexの設定をしているtoktokも問題かと思うが。
Forbiddenにしたみたいだけど、
せめてファイル名変えなよ。 誰も居ない……ケチつけるなら今のうち。
if-elsifの書き方、
if{
..
}elsif{
..
}
より
if{
..
}
elsif{
..
}
の方が俺にとっては読み易いんだコンチクショー。
>>522
perlstyleなんて知らなかった…ありがとう、勉強になったよ。 例えば既成の掲示板のCGIとかから
require 'axlog.pl';
AxLog::getlog('ログファイル名','ログ最大記録数');
の用に呼び出して使うアクセス解析。
何となく作ったんですが評価お願いします。
アクセス解析 http://torihamlog.s55.xrea.com/search/axlog.pl.txt
ログビューワー http://torihamlog.s55.xrea.com/search/axlogv.cgi.txt
ここにログビューワを設置して、それにアクセス解析しこんでます。
リモホとかIPとか晒す事になるので困る人は見ないで下さい。
パスワードは 1234 です。
http://torihamlog.s55.xrea.com/search/axlogv.cgi
念のため…コレ呼び出すとログを削除します。
http://torihamlog.s55.xrea.com/search/dellog.cgi
>>529
とりあえず axlog.pl をザッと見た感じ。
> 39: my $logfile = ($_[0]) ? $_[0] : "log.dat";
my $logfile = $_[0] || "log.dat";
か
my $logfile = defined $_[0] && length $_[0] ? $_[0] : "log.dat";
> 48: $ENV{'TZ'} = "JST-9";
local するか、呼び出し元と条件を揃える (設定しない) 。
> 58 〜 62
my($path) = $ENV{'SCRIPT_NAME'} =~ m|^(.*/)|;
ログに ASCII 以外の文字を吐くのはあまりお勧めしない。
あと axlog.pl.txt や axlog.cgi.txt でも「.pl」や「.cgi」は含まれて
いるので CGI プログラムとして動く。Apache のマニュアル参照。 >>529
axlogv.cgi 。
> 6: use vars qw/$pw $logfile $gzip_send $gzip/;
不要。
> 47 〜 53:
my $gzip = $^O =~ /Win/
? "gzip.exe -1 -c"
: "/bin/gzip -1 -c"
;
> 69: if ($mode eq "css") { Style_Sheets(); }
わざわざ CGI で吐かせる理由は?
> 74: else { print "Status: 403 Forbidden\n\n"; exit; }
エラーメッセージを吐いた方が親切。
> 256: Content-type: text/plain; charset=Shift_JIS
text/css >>530-531
評価ありがとうございます。
色々参考になります。
cssについてはファイルを一つにまとめたかったからです。
やっぱあんまり良くないですか?
>> 74: else { print "Status: 403 Forbidden\n\n"; exit; }
>エラーメッセージを吐いた方が親切。
if ($mode eq "css") { Style_Sheets(); }
elsif ($pass ne $pw) { Error('パスワードが違います。') }
elsif (($pass eq $pw) && ($mode eq "view") && ($ENV{'REQUEST_METHOD'} eq "POST")) { View(); }
else { Pass_form(); }
こうゆう風にしようと思っています。 >>532
・CSS を変更する為にスクリプトを編集する危険を冒す必要がある。
・外部に CSS を持つのに対し、常に二倍の回数実行される。
・CSS を使い回す時に悩む事になる。
これらのデメリットを考慮の上で、なお一つにまとめるメリットの方が
勝ると判断したならいいんじゃないか? >>532
自己レス
すげー馬鹿なこと書いていた
if ($mode eq "css") { Style_Sheets(); }
elsif (($pass) && ($pass ne $pw)) { Error('パスワードが違います。') }
elsif (($pass eq $pw) && ($mode eq "view") && ($ENV{'REQUEST_METHOD'} eq "POST")) { View(); }
else { Pass_form(); }
たぶんコレでいいかな…
作った動機はなんとなくなんだけど、実用性とかどうでせう?
一応CGIの設置とかできて、ほんのちょっとだけいじれる程度人向けのつもりです。 いろいろわからんことだらけで作りましたが
添削して下しさい。
【スクリプト】http://www.tcn.ne.jp/~majima/dog/quiz.txt
【動作例】http://www.tcn.ne.jp/~majima/dog/quiz/quiz.cgi >>535
とりあえず画像のファイル名を変えた方が良いよw
20点頂きました >>535
もじゅーるは使えない鯖なんでつか?
使えるんなら使ったほうがいいでつよ。
Image::Magick、CGI、Jcode等々
何に使うのかは自分で調べてね。
EUCで書いたり表示したりしたほうがいいと思うけど、Shift_JISでやりたいのなら反対しないさ。
所々myを付けているが、どうせなら全部に付けちゃいな。
strictしろってこった。
ついでにHTML的にも4.01strict すれば? タイトル::時刻::内容\n
というようなデータが数行あるような場合
それらを読んできて切り分けるって処理を
してます。
これの評価お願いします。
sub split_data{
my @ref,@tmp,%hush;
@tmp = @_;
for (@tmp){
chomp;
($hush{title},$hush{time},$hush{contents}) = split /::/;
push (@ref,{%hush});
}
return(@ref);
}
@tmp = ("a::b::c\n","d::e::f\n","g::h::i\n");
@ref = split_data(@tmp)
for(0..$#ref){
print "title:".$ref[$_]->{title};
print " time:".$ref[$_]->{time};
print " contents:".$ref[$_]->{contents}."\n";
} >>540
myで複数宣言するときは()がいる
hushじゃなくてたぶんhashね. 連想配列っていみなら
ハッシュのスライスを使うとエレガントかも
@hash{qw/title time contents/} = split /::/;
foreachつかえよ
for(...$#ref) 541>
>ハッシュのスライスを使うとエレガントかも
>@hash{qw/title time contents/} = split /::/;
ありがと、参考になりました。
my は複数でも()いりませんよ。バージョンによるだろうけど
最後に、今更foreach使ってる人いるんですか?w