【CGI】合同開発室
■ このスレッドは過去ログ倉庫に格納されています
0001当方へたれですが
01/10/02 00:35ID:GsMMcvtMiswebだけどアプロダ置いてみました。
http://isweb36.infoseek.co.jp/computer/perldev/
参加してくれる人キボン
00391
01/10/16 03:42ID:TCS0inSEこのペースだと来年すぎまでかかりそうなので,
今回は自分でフォームデコードはせずに,CGIとFile::Copy使ってます。
content-typeだけでファイルタイプを判定してるので,
plやpmはtxtになっちゃいます。
CGI.pm使ってHTMLを書いたけど,使いづらいしソースも見づらいので
こういうのに便利らしいHTML::Templateを調べてきます。
0040名無しさん@お腹いっぱい。
01/10/16 07:33ID:???0041ちんげん
01/10/16 19:55ID:5A+7lSiO「CGI」の「テキスト」カウンターできたよ〜。
0042名無しさん@お腹いっぱい。
01/10/16 20:32ID:???@file = <IO>;
foreach (@file){ }
より
while(<IO>){ }
の方が良いと思われ。
0043ちんげん
01/10/16 21:11ID:???0044!42
01/10/16 21:44ID:???サーバーにも優しいカウンターになる、という意味だと思われ。
0045!44
01/10/16 21:56ID:???例えばトップが50KBのhtmlとかだと50KBの配列が出来ちゃう
と言うかテキストカウンターっぽい事をしたいなら
読み書きモードでopenして、カウンターの位置までseekしてprint
した方が良いよ。ヘッダなんかを書き換えた時はメンテする必要が
有るけどね。
0046名無しさん@お腹いっぱい。
01/10/16 21:57ID:/3a8HFEeうん、Perl5に標準添付されているライブラリ assert.pl があるよ。
# Usage:
#
# &assert('@x > @y');
# &assert('$var > 10', $var, $othervar, @various_info);
#
# That is, if the first expression evals false, we blow up. The
# rest of the args, if any, are nice to know because they will
# be printed out by &panic, which is just the stack-backtrace
# routine shamelessly borrowed from the perl debugger.
0047名無しさん@お腹いっぱい。
01/10/17 00:23ID:???ロックのところは open or die "Error:$!" みたいに
if ! 使わずに or 使ったり $! も表示したりしたほうがいいと思う。
0048名無しさん@お腹いっぱい。
01/10/17 04:46ID:???>41 参戦感謝。
>46 情報感謝。
CPAN繋がらなかったんで検索しなかったんですが,標準で付いてましたか。
標準添付のを見てみたら,以外とライブラリもあるんですね。初めて知りました。
--
HTML::Template調べたところ,以外と簡単そうです。
今日は試しにアプロダの,テンプレだけを書いてみました。
0049名無しさん@お腹いっぱい。
01/10/17 08:37ID:???> foreach (@source){
> if ($source[$i] =~ /<!--count-->([\d]+)<!--\/count-->/ig) {
> $count = $1;
> $count++;
> $source[$i] =~ s/<!--count-->[\d]+<!--\/count-->/<!--count-->$count<!--\/count-->/ig;
> }
> $i++;
> }
こんなわけのわからない処理は止めなさい。
foreachの使い方がわかってない。
あと、変換はs///eg一発で出来るよ。
もっと言うと、テンポラリファイルに書き出してからrenameしたほうがいい。
openの戻り値はきちんとチェックしようね。
&lock_file;
open SRC "$source" or die;
open TMP "> $tmp" or die;
while (<SRC>) { s///eg; print TMP $_; }
close SRC;
close TMP;
rename($tmp, $source);
&unlock_file;
こんな流れで。
0050ちんげん
01/10/17 09:12ID:???どうも、ありがとうです。
一回の読み書きOPENで書き換えするのに、seekでカウンター値の先頭への
ポインタを得る方法を考えていたら頭から煙が出てきました。
# なんか見当はずれなことしてんのかなぁ。
>>49
> こんなわけのわからない処理は止めなさい。
厨スクリプトでお目汚しスマソ。
> あと、変換はs///eg一発で出来るよ。
s///egってのがあるんで?勉強してきます。
> もっと言うと、テンポラリファイルに書き出してからrenameしたほうがいい。
そか、一旦、テンポラリに書き出してそれからリネームすればいいのか。
それで昨晩ずーっと悩んでました。
> openの戻り値はきちんとチェックしようね。
Σ(;´Д`)
あっ、ホントだ。してなかった。鬱だ。
大変参考になりました。ありがとうございました。勉強になります。
出直して参ります。
0051名無しさん@お腹いっぱい。
01/10/18 02:40ID:???my $cl = new Caller;
print $cl->line;
use Caller qw(caller) でオーバーライドも。
00521
01/10/18 04:29ID:???勉強用にいただきました。じっくり読めばなんとか理解できそうです。
39:*pkg = \&pakcage;
typoぽいです。
--
すごいなー私も頑張ろう!とあぷろだ上げました。
変更点は,昨日のテンプレ修正と,ファイル名変更,表示部にテンプレ導入,他に少しです。
0053名無しさん@お腹いっぱい。
01/10/18 22:27ID:???こうすればメンテ不用になるぞ、っと。
while (<HTM>){
    if (/<!--count-->(\d+)<!--\/count-->/){
        seek HTM,-length,1;
     #書き換え
        last;
    }
}
でも�dだ時HTMLごと逝っちゃうのはイヤな感じかも (w
0054名無しさん@お腹いっぱい。
01/10/18 22:55ID:???これなに?
0055名無しさん@お腹いっぱい。
01/10/18 23:02ID:???s///eg のeオプションはいらないだろう。
0056名無しさん@お腹いっぱい。
01/10/18 23:07ID:???たとえば、
s/(\d+)(?=<!--\/count-->)/$1+1/eg
とか。
0057名無しさん@お腹いっぱい。
01/10/18 23:27ID:???いやだから、上記の例では必要ないだろうと言っているの。
005845
01/10/18 23:30ID:???そっかバックすれば良いんだネ、うちはカウンターまで4行しかないから
イイ(・∀・)感じになったヨ
:でも�dだ時HTMLごと逝っちゃうのはイヤな感じかも (w
うちは閑古Webだからネ、一応ロックバリバリにしてるけど今の所大丈夫みたい
200hit/DAYって感じだからかナ
>54
seek HTM,-length($_),1だヨ
0059名無しさん@お腹いっぱい。
01/10/18 23:32ID:???s/// だけでカウンタインクリメント出来ると?
0060名無しさん@お腹いっぱい。
01/10/19 06:41ID:???00611
01/10/19 06:46ID:UfCiRs0I投稿削除ができるようになりました。
変更点は,ログフォーマット,delete.pl・delsetup.tmpl導入,他少し。
ログフォーマットも大体固まったので明日あたりにiswebにサンプル置きます。
--
>45 >>58
HTML書き出し式カウンタを使ってるんですか?
実際に使うには,普通の,カウントを別ファイルに持つ形式より
危険な感じがするんですが,利点とかてありますか?
煽りとかじゃなくて,純粋に気になったので。
006261
01/10/19 07:04ID:???SSI使えないサーバでも使える。ってのがたぶん利点。
それ以外では使う理由ない。
あ、あとはカウンタ表示自体ではCGI起動しないってのもかな。
006362
01/10/19 07:15ID:???0064名無しさん@お腹いっぱい。
01/10/19 07:34ID:???このカウンタって
・htmlにアクセス・表示
・IMG経由でCGI呼び出し
・htmlを解析してカウンタ部分を加算
・html書き出し
という方法ですよね?
これだと以下みたいなのと比べると,
毎回htmlを書き出すんで負荷やあぼーん率が高くなりそうと思って。
・cgiにアクセス
・index.tmpl読み込み
・count.dat読み込み
・カウント
・index.tmplの特種タグ(0<!-- __%%COUT%%__ -->とか)置き換え
・count.dat書き出し
うー,ちょっと混乱してます・・・
0065名無しさん@お腹いっぱい。
01/10/19 10:54ID:???index.htmlのimgタグ(ボクはiframe)でcount.cgiをキック
index.htmlをopen (+<モード)
特種タグ(0<!-- __%%COUT%%__ -->とか)までseekでジャンプ
特種タグ(0<!-- __%%COUT%%__ -->とか)だけ書き換え
close; exit;
ですヨ
理由はSSI出来ないからデス、後UAとかHOSTとか要らないので
外部ファイルは無いデス、(一応重複防止にクッキー吐いてるケド。。。)
だからファイルを一つだけ、一回だけ開いてexitデス。
:あぼーん率が高くなりそうと思って。
うー、これはボクがwriteシステムコールの
アトミック性を理解出来て無い(どれ位で分割されるのカ)のでアレですケド、
実は多分0バイトにはなりようが無いデス、truncateして無いので0バイト
になる瞬間が無いのデス、VMWARE使って、ファイルロック無し、
forkで50プロセス×3ホストから同時アクセスを何十セットかしてモ、ミスカウントは
したけど飛ばなかったですから。。(この辺は突っ込み歓迎デス)
これはflockが信頼出来なくて0になると鬱な時とかちょっと(・∀・)イイかも
知れませン、例えばカウントファイル(カウントだけ)を、、、
open (DAT,"+<foo");
flock (DAT,2);
truncate DAT,0;
seek DAT,0,0;
print DAT "$count";
じゃ無くテ
open (DAT,"+<foo");
flock (DAT,2);
seek DAT,0,0;
print DAT "$count";
truncate DAT,length($count);
とか。。(これも突っ込み歓迎デス)
取り合えず今のところ50000くらいだけど�dでないのデス。
0066名無しさん@お腹いっぱい。
01/10/19 16:37ID:???>truncate DAT,length($count);
ここで小さくなったりしないのか、、しないよな、うーん。
0067ちんげん
01/10/19 19:25ID:???これを作ったのは、某所で、CGIのテキストカウンターってないの?
という話があったからなんです。で、んじゃ作るかと思って作ってみた
ものなのですが、いやぁ、おのれのあまりの未熟さを痛感しました。
なんか場違いでスマソ。 >1,ALL
0068名無しさん@お腹いっぱい。
01/10/19 19:56ID:???カウントファイル的には桁数が前より小さくなることは無いので、
truncate DAT,length($count);では小さくならないね。
ってことは truncate かける意味も無いけど。
0069名無しさん@お腹いっぱい。
01/10/19 20:46ID:???CGIのテキストカウンター
http://www.around.ne.jp/software/fastky/library/index.html#counter
0071名無しさん@お腹いっぱい。
01/10/19 22:14ID:???0072名無しさん@お腹いっぱい。
01/10/19 22:30ID:???それ、なってない。
0073名無しさん@お腹いっぱい。
01/10/19 22:35ID:???<counter></counter>なんてワケのわからないタグを使用している時点でアウト。
仕組みは同一だし。
0074名無しさん@お腹いっぱい。
01/10/19 22:41ID:???しかもこの場合意味無いどころか、いったんtruncateされるので
タイミングによってはindex.htmlが正常に見られない。
0075名無しさん@お腹いっぱい。
01/10/19 23:34ID:???良く考えたらアプ板なんでボクもあげましたヨ >>71
>>53さんのが入ってるでス
flockコメントアウトしたりしていぢめてみてくださイ
調子にのるとカーネルらー に突っ込まれそうなのでこの辺で退散 ササッ(((・∀・;)
http://isweb36.infoseek.co.jp/computer/perldev/cgi-bin/upload/source/017.txt
0076名無しさん@お腹いっぱい。
01/10/19 23:47ID:???アプロダの
A:hover {color: red; font-weight: bold;}
このドキュソスタイル指定を消してくれ。マジウザイ。
0077名無しさん@お腹いっぱい。
01/10/20 00:22ID:???0078名無しさん@お腹いっぱい。
01/10/20 00:23ID:???--
あぷろだ,テスト設置してみました。
iswebなので,コピペで飛んでください。
ttp://isweb36.infoseek.co.jp/computer/perldev/cgi-bin/tiny_upbrd/upload.cgi
まだ拡張子の判定がイマイチです。
00791
01/10/20 03:38ID:???拡張子指定できるようにしました。
http://isweb36.infoseek.co.jp/computer/perldev/
からもいけます。
008071
01/10/20 15:57ID:DdyXBwQgこれ良いな、ちょっとflock外して5万回位叩いてみたけどHTMは勿論カウンタデータも飛ばないよ
良く考えたらとびようが無いんだな。syswrite使っとけばより安心って所かな?
俺の使ってる所時々ファイルが飛ぶから、上のKY何とかみたいなのは怖くて使えないんだよ
俺もアクセス解析とか要らない派だから外部ファイル無いのも気に入った
ちょっと弄って使わせてもらうよ THANKS!!
0081名無しさん@お腹いっぱい。
01/10/20 16:21ID:???flockしなかった場合に本当に常に1ずつインクリメントされるかどうかは疑問。
0082名無しさん@お腹いっぱい。
01/10/20 16:27ID:???0083名無しさん@お腹いっぱい。
01/10/20 16:58ID:WoA8FLwb5万回つーても、同時アクセス数いくつに設定?
0084ちんげん
01/10/20 17:13ID:???また見てやってくださいませ。
http://isweb36.infoseek.co.jp/computer/perldev/cgi-bin/upload/source/018.lzh
008571
01/10/20 17:32ID:???>>81 やってみれば?
>>83 5万回÷俺の環境で許されるほぼ最大のプロセス数だけど?、
つーか君はディスクアクセスなんてオーバーヘッドの馬鹿デカイ処理に対して
単にローカルでforすりゃ十分って事が分からないのかい?
まー良いや取り合えず>>75 有難う!
008771
01/10/20 18:52ID:???これ以上はNTだとヤバイから、ローカルはIISだからabコマンドは解らないよ
HTMをパースしてそこだけ書き換えるってのが、本物SSIっぽくて
ちょっと良いなと思っただけ、別に飛ばない方法なら幾らでもあるし
と言う事で外野は去る事にする。
008881
01/10/20 22:05ID:???0089名無しさん@お腹いっぱい。
01/10/20 22:14ID:lWm0+PHj早く死になさい
0090名無しさん@お腹いっぱい。
01/10/20 22:20ID:???0091名無しさん@お腹いっぱい。
01/10/20 22:25ID:???0092名無しさん@お腹いっぱい。
01/10/21 00:17ID:???取り合えずCGIならdieは辞めとけ、エラールーチン書いてそこに飛ばせ
ただ例えばファイルが100kbだとして、書き換えたいのは20バイト足らずなのに
毎回全部書き直すってのは効率はよろしくないってこった、
その程度の効率は俺は気にしないけどな、それが嫌なら75のをパクれ
0093名無しさん@お腹いっぱい。
01/10/21 02:34ID:???00941
01/10/23 02:28ID:RBVSiDON<IMG src="xbm.cgi?100">で100と表示します。
サンプルは
http://isweb36.infoseek.co.jp/computer/perldev/cgi-bin/print_xbm/view.cgi
です。
□と■の文字列から画像データを生成するようにしてみしたが,
変換処理,ごちゃごちゃして少し読みづらくなっちゃいました。
0095仕様書無しさん
01/10/27 23:41ID:YdPss8Pv00961
01/10/28 00:59ID:???ありがとです。
今ちまちまとネタCGI(物語自動作成)作ろうとしてるんですが,
いきなりデータ形式でつまってます。
作ってみたいのいくつかあるんで,浮気しながらちょこちょこ書いてこうかと思います。
0097デフォルトの名無しさん
01/10/31 21:41ID:???00981
01/11/02 04:59ID:/ySb/MGF--
改造工房用にアプロダ置いたら,どのくらい利用されると思いますか?>ool
0099名無しさん@お腹いっぱい。
01/11/02 07:44ID:???ログ設定を大きくしていると利用されやすいかも。
すぐに流れると、投稿する方も閲覧する方もツマンナイし。
(ぁゃιぃ風味は止めた方が良いですよ)
01001
01/11/03 04:40ID:???>>1 からいける,「あぷろだテスト」のほうです。
CONFIGとテンプレまわりいじって,CSS使ってみました。
01011
01/11/03 23:46ID:kIdT+u23最適化とバグとりです。
複数ページ化をどうやるか考えてます。
0102名無しさん@お腹いっぱい。
01/11/05 17:00ID:LgoarrLrv0.1.2とv0.1.2.1を展開するとupload.cgi.binのようなファイル名になって
各ファイルにバイナリっぽいヘッダが付いてるんだけど、
もっかいアップしなおしてもらえませんか?
01031
01/11/05 17:27ID:???0.1.2.1あげなおしました。
多分これでおけだと思います。
01041
01/11/07 07:22ID:p5r/Tumr>>1 からいける,「あぷろだテスト」です。
0105名無しさん@お腹いっぱい。
01/11/08 03:07ID:LQlTaHHVvars.pmいじってglobal.pm作ってみました。
グローバルな変数とかをシミュレートします。
0106名無しさん@お腹いっぱい。
01/11/10 00:18ID:???今一盛り上らないのはCGIの悲しい所かな、、、
Cと違ってperlは関数に千切りすぎると極悪に遅くなるからねー
今Socketで遊んでるから、LWP::Simpleもどきでも出展してみようかしら w
01071
01/11/15 14:16ID:ra8XDH7Xオブジェクト指向のを調べてましたが,なかなか難しいです。
DBやTieのやり方が関係あるのかな。
>>106
分割してくと遅くなるんですか。今まで千切りまくってました(^^;
Socketとかさっぱりわからないので,ばりばり使ってる人を見ると
すごいなぁと思います。
01081
01/11/19 11:59ID:???ロックがかかってるようで全然かかってません。
修正は少し手間取りそうです。
0109名無しさん@お腹いっぱい。
01/12/19 13:44ID:???0110名無しさん@お腹いっぱい。
01/12/19 20:17ID:???パーミッション設定して,upload.cgiの1行目のパスを変えて,
2〜16行を削れば動くはずですが,自信無いです。
Perl勉強中の素人が書いたのでバグ入り低機能・高負荷です。
今フォームデコードも単体でできるようにと いろいろ書き換えてますが,手間取ってます。
0111
02/01/01 12:05ID:+ymJLOJv0112名無しさん@お腹いっぱい。
02/01/01 12:17ID:???0113名無しさん@お腹いっぱい。
02/01/01 13:23ID:???0114
02/01/03 03:44ID:yfnaT3pDhttp://choco.2ch.net/test/read.cgi/news7/1009233792/
0115よしだみつお
02/01/03 09:08ID:???クソガキが運営している最低なHPスペースです。
ユーザーの事など全く考えずに、こづかい稼ぎだけが目的で営利主義に走ってやがります。
天罰を与えてやりましょう!!
イタズラ登録をしまくって下さい。悪用しちゃってもいいですよ!!
鯖に負荷かけまくって責任とらせるってのも面白いかも(プ
http://k-server.org/ http://k-server.org/ http://k-server.org/
http://k-server.org/ http://k-server.org/ http://k-server.org/
http://k-server.org/ http://k-server.org/ http://k-server.org/
http://k-server.org/ http://k-server.org/ http://k-server.org/
この文章のコピー・転載を歓迎いたします。
0116名無しさん@お腹いっぱい。
02/01/03 21:12ID:nWDcFjevよくも飽きずに自作自演してんなぁ。
0117名無しさん@お腹いっぱい。
02/01/04 00:44ID:ZDJ61sb3あとあれです。
openの後のdieは、||ではなく、or dieを使うことが推奨されています。
(らくだ本では。perlfuncにはその記述はありませんね)
いずれにしても、処理に失敗したらエラーメッセージを出す仕組みは
必ず必要になるので、簡単なスクリプトであっても、
用意して置くに越したことはないと思います。
0118名無しさん@お腹いっぱい。
02/01/04 03:40ID:???その根拠は?、優先順位理解する方が大切じゃないかと思うが
是非説明おねがい
0119名無しさん@お腹いっぱい。
02/01/04 08:27ID:???>その根拠は?
当ててみな( ゚Д゚)y-~~~
0120名無しさん@お腹いっぱい。
02/01/04 09:43ID:???0121名無しさん@お腹いっぱい。
02/01/08 02:32ID:???0122名無しさん@お腹いっぱい。
02/01/09 23:53ID:IrymNKBwホントはMLに投稿しようと思ったけど、
急に2週間ほどネットに繋げないことになったんでここで。
全然磨いてないけど着眼点は悪くないと…自分では思う。
0123名無しさん@お腹いっぱい。
02/01/11 15:15ID:???5.6入れてないんで動かなかったけど
これを使うとメソッド名の統一ができるのかな
最近メソッドの命名に悩んでたので参考にさせてもらいます
0124名無しさん@お腹いっぱい。
02/01/11 15:24ID:FU5QMXGq偏差値なんて相対的な物だから自慢したいならまず偏差値80を出した
テストを明らかにしてね。
0125名無しさん@お腹いっぱい。
02/01/11 15:45ID:???0126名無しさん@お腹いっぱい。
02/01/12 15:26ID:Ca0kINDV0128名無しさん@お腹いっぱい。
02/01/17 05:07ID:???HTMLソースの下の方にベンチマークを書き出すようにしました。
Logs.pmを使ってログを管理するようにしました。
まだ中途なのでsage。
0129名無しさん@お腹いっぱい。
02/01/28 07:41ID:U2Qq819d0130名無しさん@お腹いっぱい。
02/01/28 19:00ID:???穴だけど
0131名無しさん@お腹いっぱい。
02/01/28 19:54ID:Vj1E59E1みたいにね。
ここはさ、メソッドとして抽出したほうが見通しよくなるとおもうんだが、、、
0132名無しさん@お腹いっぱい。
02/01/28 20:57ID:U2Qq819dもれじゃできねえから、できたらだれかやってくれ
0133名無しさん@お腹いっぱい。
02/01/28 22:30ID:???コメントをちゃんと書けば不便じゃないさ。
0134名無しさん@お腹いっぱい。
02/01/29 14:14ID:???サーバに保存されるファイル名と、ダウンロードされるファイル名は
一緒である必要はないから、OKと思う。
ただ、ダウンロードのためだけにCGI起動させるのはアレなんで、
mod_rewriteとか通してやれば素敵になりそう。
01351
02/01/29 14:22ID:???ありがとうございます。
あのあたりはごちゃごちゃしてるので なんとかしたいと思ってるんですが,
分けようとしても速度遅くなるわ変数のやり取りが見辛くなるわで
うまく書けなかったのでああなってます。
ああいう切り分けとかをサクっとできればいいんだけど,
時間かけて悩んでる割に大したモノが書けない・・・
0136名無しさん@お腹いっぱい。
02/01/29 16:16ID:7v+0Ir29[main.pl]
> use lib '/home/mas/www/library', '.';
* 環境に依存する部分は下記みたいに分離した方がいい。とくに多くの人に使ってほしいの
なら。
BEGIN { do "setenv.pl" if -e "setenv.pl" }
BEGIN { push(@INC, $ENV{YOUR_PERL_LIB}) if $ENV{YOUR_PERL_LIB} }
* "." は必要ない。
* パフォーマンスにこだわるのなら lib は使わない。内部でConfig.pmをつかっ
ているので以外と重い。
> use CGI;
必要とするCGI.pmのバージョンは?
おれは2.46なんで、CGI::cgi_error、CGI::uploadとかないと怒られた。
01371
02/01/29 16:59ID:???ありがとうございます。
CGI.pmは2.47からupload()や cgi_error()が実装されたようなので,
2.47以上が要ります。 開発では2.78使ってます。
前はバージョン指定してましたが,書き換えた時に消しちゃったみたいです。
0138名無しさん@お腹いっぱい。
02/01/29 17:34ID:7v+0Ir29iswebは5.6.1かぁ。。。5.005_03ってもう古いのかな。
■ このスレッドは過去ログ倉庫に格納されています