1 名前:nobodyさん mailto:sage [2007/09/16(日) 19:49:43 ID:???] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >2 以降 前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/ 過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
696 名前:nobodyさん mailto:sage [2008/01/08(火) 08:15:35 ID:???] 俺は一番最初の質問者ではないが、浮動小数点の丸め誤差については、 wikipediaにも載ってたね。 問題の解決には、 use bignum; つかえばいいわけで、それでいい のは分かるけれど、それとは別の話で、小数を100倍して整数で演算をして、 あとで100で割ったりする方法だったらちゃんとでるから use bignum; しなくてもいいんだよね?
697 名前:nobodyさん mailto:sage [2008/01/08(火) 22:01:08 ID:???] >>696 0.29が有効数字2桁だとあらかじめ分かっているなら100倍すればいいけどなあ。 既知でないときにはuse bignum;じゃないか?
698 名前:nobodyさん mailto:sage [2008/01/09(水) 00:10:32 ID:???] >>697 レスサンクス。 いや、意味の無い部分の考えかなと思ったんだけど、 そっちの方がメモリが少なくて済み、処理が早くなったりするのかなとか 思ったのよね。ま、すごく小さな世界をいっているんだろうけれど。
699 名前:nobodyさん mailto:sage [2008/01/09(水) 01:01:57 ID:???] うーん、俺も難しいことはわからんけど、 俺は細かい実行時間を気にしてミスをするより、コードの可読性を優先したいな。と思った。 大量のデータを扱う人から見ればふざけた態度かもしれないけどね。
700 名前:nobodyさん mailto:sage [2008/01/09(水) 02:01:45 ID:???] LL的には人間にとっての最適化(コードの可読性)のほうが重要だからそれでいいと思うな
701 名前:nobodyさん [2008/01/09(水) 03:08:01 ID:480klIK2] リーダビリティ重要。(高橋メソッド風に)
702 名前:nobodyさん mailto:sage [2008/01/10(木) 23:51:33 ID:???] IPを10進数に変換したものと、 サブネットマスク形式のリストをマッチングさせたいんですが、 どんなループさせればいいですかね? #判定ルーチン内 foreach (@list) { my ($min,$max) = subnetMinMax($_); return ($ip >= $min and $ip <= $max) ? 1 : 0; } としてるんですが、grep等を使ったほうが良いんでしょうか? ループ内でサブルーチン呼ぶのがちょっと気になります。
703 名前:nobodyさん mailto:sage [2008/01/11(金) 00:04:09 ID:???] 訂正orz x: return ($ip >= $min and $ip <= $max) ? 1 : 0; o: return 1 if($ip >= $min and $ip <= $max);
704 名前:nobodyさん mailto:sage [2008/01/11(金) 11:44:26 ID:???] @listの中にマッチするものが複数存在する可能性があって 何にマッチしたか全て取りたいならgrepだけど 有るか無いかだけでいいならループ回して見つけ次第結果返していいんじゃない?
705 名前:nobodyさん mailto:sage [2008/01/11(金) 16:30:20 ID:???] return $ip >= $min and $ip <= $max;
706 名前:nobodyさん mailto:sage [2008/01/11(金) 20:31:41 ID:???] >>704 なるほど。このままにしますありがとうございました。 >>705 そっか、そうですよね。 聞いてみて良かったです。
707 名前:nobodyさん mailto:sage [2008/01/12(土) 13:10:11 ID:???] 「うんこ」を含む行の最後に「出る」と追加することってできますか? 「うんこ」の前後は英数字・日本語交じりで文字数は不定です。 $_ =~ s/(うんこ)/$1でる/; だと、うんこ〜出るの間の文字が文末にきてしまいます。 文末指定は$みたいなので $_ =~ s/(うんこ)/$1でる$/; としてperlを実行させると、エラーなのか、プログラムが終わりません。
708 名前:nobodyさん mailto:sage [2008/01/12(土) 13:13:01 ID:???] if ( $うんこ =~ /うんこ/ ) { $うんこ .= ’でる’ }
709 名前:nobodyさん mailto:sage [2008/01/12(土) 13:38:43 ID:???] 「うんこを含む行」「改行」 ⇒ 「うんこを含む行」「でる」「改行」 if (index($_, 'うんこ') >= 0){ $_=~ s/$/でる/; }
710 名前:707 mailto:sage [2008/01/12(土) 13:54:47 ID:???] >>708 全角を半角にしてやってみたりしましたが、エラーでした。 >>709 できました。ありがとうございます。 ただ、>=0の意味が分かりません。 改行は\nじゃないんですか?
711 名前:nobodyさん mailto:sage [2008/01/12(土) 18:35:26 ID:???] なにこのうんこスレ
712 名前:nobodyさん mailto:sage [2008/01/12(土) 19:18:44 ID:???] >>710 index
713 名前:707 mailto:sage [2008/01/12(土) 22:50:20 ID:???] >>712 すみません、わかりました。ありがとうございました。
714 名前:nobodyさん [2008/01/13(日) 13:16:41 ID:rzzkvCmj] 怠惰が美徳だの エロエロ言語だの 言うけどさ 俺が習ってきた主な4つの言語のなかじゃ 間違いなく一番習得が苦しかった ぞ つまり、学習コストは高い Perlより習得が難しい言語ってあるの? 私見では達人レベルを目指すならC++が全言語のなかで一番習得困難 そこそこのプロレベルを目指すならPerlが一番困難(C++はそこそこのプロならまだ簡単)
715 名前:nobodyさん [2008/01/13(日) 13:17:19 ID:rzzkvCmj] スレ間違えた( ゚д゚ )
716 名前:nobodyさん mailto:sage [2008/01/13(日) 21:52:12 ID:???] 配布用のスクリプトを書く予定なんですが、 変数名のつけ方で悩んでいます。 たとえば、 my $title; my $script_content_title; my $ScriptContentTitle; sub param{} sub parse_URL_encoded_string{} sub ParseURLEncodedString{} 等、色々書き方ありますが 短い方が良いのか、わかりやすい名前が良いのか、 又、大文字、小文字を混ぜて使うべきか、覚えやすい名前にするべきか、 意見ください。 賛否両論あると思いますが、極力万人受けするものを選びたいです。 長文すみません
717 名前:nobodyさん mailto:sage [2008/01/13(日) 21:53:50 ID:???] 配布スクリプトの中身の変数名なんて誰も見ねぇよ
718 名前:nobodyさん mailto:sage [2008/01/13(日) 21:56:06 ID:???] >>717 学習、改造用として配布したいんです。
719 名前:nobodyさん mailto:sage [2008/01/13(日) 22:43:42 ID:???] perldoc perlstyle
720 名前:nobodyさん mailto:sage [2008/01/13(日) 23:03:26 ID:???] 変数や関数の名前の付け方は、どんなプログラムを書こうとしている かというところもあるからな。 例えば、関数名で html_ をつけるとそうでないものとの区別がついて 分かりやすくなるけれど、全部の関数に html_ がついてたら 逆に無意味に長いだけとなる。 ここでアドバイスが欲しかったら、その書こうとしているプログラムや ソースをもう少し具体的にだすとかしないと話は進まないと思う。
721 名前:716 mailto:sage [2008/01/13(日) 23:22:17 ID:???] >>719 ありがとうございます。全部読みました。 基本的にはアンダースコアを使うべきだそうです。 スコープによって使い分けるのが良いみたいですね。 $Global_Data #グローバル $tmp #局所 $LOCK_KIND #定数 >>720 プログラムの種類によって書き方が変わる、変えられるのがperlの利点かもしれませんね。 >全部の関数にhtml_ そういうのはパッケージにまとめればOKですかね。 おかげ様で書き方が頭に浮かんできました。ありがとうございました。
722 名前:nobodyさん mailto:sage [2008/01/14(月) 02:09:11 ID:???] Perlプログラマは"不精"なので面倒なタイピングはしません。 でもPerlプログラマは"傲慢"なので他人のコーディングスタイルを気にしません。 こんなイメージ。
723 名前:nobodyさん mailto:あげ [2008/01/14(月) 02:26:48 ID:???] 怠惰と傲慢と短気だっけなラリーの三原則。 ネーミング重要。(高橋メソッド風に) でも職人芸的なところあるよねネーミングセンスって。 なかなかそこは難しい。
724 名前:nobodyさん mailto:sage [2008/01/14(月) 04:10:53 ID:???] 果たして自閉症の描くイメージとは
725 名前:nobodyさん mailto:sage [2008/01/14(月) 04:15:16 ID:???] >>716 もう解決したみたいだけど、Perlベストプラクティスもおすすめ ダミアン先生の盲信はいけないけど、かなりためになるYo
726 名前:nobodyさん mailto:sage [2008/01/14(月) 17:41:01 ID:???] ダミアン先生はPerl界屈指のハッカーだが、著作物での記述にクセが全くないわけではないからね。 一般論としては、上を目指すならいろんなハッカーのコードや文章にたくさん触れることが必要。 これがなかなか大変だし難しい。 そのためにはネット上のコミュニティーやリアルのイベントにこまめに参加したり ブログを定期的にチェックし続けないといけないから。 そういうことをしてない自称Perl使いが結構俺の周りにはいて、 そういう奴らは我流のあまりエレガントじゃないスタイルから抜け出せないでいる。
727 名前:nobodyさん [2008/01/14(月) 18:57:12 ID:4AKnbZN2] ファイルに入っている文字を出力するつもりなのですが、 メタ字が混ざっていることもあり、ちゃんと出力できません。 あらかじめファイルの中のメタ字に\を振って置くとしても、かなりの手間になりそうですし、 何か効率の良いメタ字対策はないでしょうか?
728 名前:727 [2008/01/14(月) 19:02:23 ID:4AKnbZN2] すみません。微妙に文書が狂っていました。 ファイルに入っている文字からの出力の際の 文字化けする文字の対策をお願いします。
729 名前:716 mailto:sage [2008/01/14(月) 20:00:43 ID:???] >>725-726 オライリーファンの俺には最高の本かもです。 >>727-728 余計な事してるからじゃないですかね? quotemetaなんてのはどうですか? 文字コードなんかも書くと返事もらえるかも。
730 名前:nobodyさん mailto:sage [2008/01/14(月) 20:08:53 ID:???] >>727 情報不足です。 「ファイルに入っている文字」…どんな文字? 文字コードは何? 「出力するつもり」…どこに出力するの? 「メタ字」…具体的にどの文字ですか? 「ちゃんと出力できません」…具体的にどのように出力できないのですか? ありがちなのは、ファイルの中と、コンソールの文字コードの設定が異なっていて、文字化けしたように見えるとか。 メタ文字をいったん解釈してしまっているとか。 ヌル文字とかタブとか垂直タブとかグループセパレータとかasciiの制御コードはそもそも「文字」ではないですし。 「文字」をどう「出力」したいのかにもよります。 コードを示してはどうですか。
731 名前:727 [2008/01/14(月) 20:18:57 ID:4AKnbZN2] $i = 0; while($list = <IN>){ (undef,$name[$i],undef) = split(/:/, $list); $i++; } @name = sort(@name); while($line = <@name>){ print "<option value='$line'>$line</option>"; } えーっと、コードはこのような感じです。 ファイルのDBにアクセスして、その中の一部を取り出しソートしてhtmlで出力するという形です。
732 名前:nobodyさん mailto:sage [2008/01/14(月) 20:21:10 ID:???] メタ文字がhtmlの解釈の問題を引き起こしてるんじゃないよね?
733 名前:nobodyさん mailto:sage [2008/01/14(月) 20:23:30 ID:???] metaタグで宣言している文字コードと異なるとか… html中で使われてる文字コードと出力してる変数の文字コードの不一致とか…
734 名前:727 mailto:sage [2008/01/14(月) 20:30:22 ID:???] >>733 タグで宣言しているコードは関係ないのではと思います。 出力するとき、一部の文字がうまく表示出来ていませんから。
735 名前:727 mailto:sage [2008/01/14(月) 20:32:56 ID:???] 現状としてはファイルの中の「ソ」とかに\を付けていけば表示はうまくいくのですが、 ファイルをその後書き換えたりするとそれも出来なくなるのではないかと思っております。
736 名前:nobodyさん mailto:sage [2008/01/14(月) 20:40:00 ID:???] これか?www.kentweb.jp/pubc/jcode/
737 名前:nobodyさん mailto:sage [2008/01/14(月) 20:46:05 ID:???] >>735 use utf8; binmode STDIN, ':encoding(shiftjis)'; binmode STDOUT, ':encoding(shiftjis)'; # windowsなら shiftjis -> cp932 ↑やってみて ソース中に日本語文字列書くならutf8で保存してね。
738 名前:nobodyさん mailto:sage [2008/01/14(月) 20:54:55 ID:???] あw binmode IN, ':encoding(shiftjis)'; かな?
739 名前:nobodyさん mailto:sage [2008/01/14(月) 20:57:33 ID:???] >>731 DBにアクセスしているのにファイルハンドルから@nameに格納しているとはいかに? @nameへの格納の仕方が心許ないです。せめて以下のようにするとか。 my @name = map { (split(/:/))[1] } <IN>; splitの対象が全角のコロンですが、perlソースと取り扱うデータの文字コードが合っていないと 間違いの元ですよ。 で、optionタグで書き出すべき文字列のリストが@nameに入っていて、それをどうしてグロブ 演算子を使っているのかわかりません。私はこんなこと一度もしたことありませんが…。 ここで、@nameの各要素がいったん解釈されてしまっていて、カタカナのソなどSJISの2バイト目の \x5cが取り除かれてしまっています。単に for (sort @name) { print qq{<option value="$_">$_</option>\n}; } でいいと思うのですが。
740 名前:nobodyさん mailto:sage [2008/01/16(水) 00:34:21 ID:???] CGI::Applicationで index.cgi?rm=<デタラメなキー> のように run_modesで定義されなかったrun_modeを指定するとエラーが発生させられてしまうのですが 未定義の場合デフォルトのrunmodeを起動させる方法は無いでしょうか?
741 名前:nobodyさん mailto:sage [2008/01/16(水) 02:08:57 ID:???] $self->run_modes( AUTOLOAD => \&catch_my_exception, );
742 名前:nobodyさん mailto:sage [2008/01/16(水) 02:17:14 ID:???] >>741 ありがとうございます!試してみます。
743 名前:nobodyさん [2008/01/16(水) 04:59:20 ID:FWbaTTLj] 5.005です。 以下のような、引数が省略可能なサブルーチンがあるとします。 sub Func(;$\@\%) { (省略) } このとき、引数が渡されたのか、それとも省略されたのかを Func内で判断する方法を教えてください。 なお、そのままifに入れると偽となるような値(例えばスカラーの値が0)の場合も、 引数が渡されていると判断します。
744 名前:nobodyさん mailto:sage [2008/01/16(水) 05:29:59 ID:???] >>743 引数の数から判定 sub Func(;$\@\%) { print scalar @_ } Func(); # 0 Func(undef); # 1 Func(1, @hoge); # 2
745 名前:nobodyさん mailto:sage [2008/01/16(水) 05:44:10 ID:???] >744 ありがとうございます。 なるほど、サブルーチンを使う時は常に@_を意識しないとダメだってことですね。
746 名前:nobodyさん mailto:sage [2008/01/16(水) 11:29:46 ID:???] @_ ってカタツムリみたいだよね。 @_ii
747 名前:nobodyさん [2008/01/16(水) 14:19:16 ID:Z4nycbhz] かたつむり大作戦
748 名前:nobodyさん [2008/01/16(水) 20:06:54 ID:L/Qn1HzA] 質問です! 入門書を見ながら「URLにパラメータを加える」というのをやりました。 〜〜/test.cgi?list=man とURLにパラメーターをくっつけ、cgiで &ReadParse( *form ); $sex = $form{ 'list' }; と受け取ったつもりだったのですが、結果をprintしてみると manman と2回表示されてしまいます。これは何が悪いのでしょうか?
749 名前:nobodyさん mailto:sage [2008/01/16(水) 20:30:55 ID:???] いるんだよ、自分で勝手に照会用のコードを切り詰める奴
750 名前:748 mailto:sage [2008/01/16(水) 20:51:36 ID:???] 失礼しました。手当たりしだい試してたら解決しました。 なんだか色々と間違ってたようです。
751 名前:nobodyさん [2008/01/16(水) 22:40:40 ID:QOevDgBW] CGIモジュール等を使わない、 一般的なuriデコードのバグってどんな事ですか? 同じkeyに複数のvalがある場合の対処はしてます。
752 名前:nobodyさん mailto:sage [2008/01/17(木) 00:41:41 ID:???] >>751 区切り文字が & でなく ; のときとか、マルチタイプで送られてきたときとか、XSS対策とかかな?
753 名前:nobodyさん mailto:SAGE [2008/01/17(木) 12:39:49 ID:???] ちょっと考えてみてほしい ドラゴンボールというのは、集めれば願いがかなうアイテムだ それに対して、 ウンコは、いくらドッサリ集めてもウンコにしかならない このように両者は一見似ているようで本質的に異なる
754 名前:nobodyさん mailto:sage [2008/01/17(木) 12:41:44 ID:???] >>751 巨大なクエリーとか、lengthがでたらめとかかな? # httpdの仕様にもよるな
755 名前:nobodyさん mailto:sage [2008/01/17(木) 17:15:28 ID:???] uriデコード?とは関係ないけど CGI.pm使うとmod_perl環境(Apache::RegistryやModPerl::Registry)で -ParseHeadersやPerlSendHeader offしてあってもheaderを正しく扱えるので CGIでもmod_perlでも動きます。ってプログラムが作りやすくなる。
756 名前:nobodyさん mailto:sage [2008/01/17(木) 17:17:24 ID:???] >>751 バグってどういうこと? 引数には、ある程度想定されるものしか入らないはずなんだから、 $form{'hoge'} とか、引数として使う値に想定される正しい値が入っているかのチェックを行えばいいんじゃないの?
757 名前:751 mailto:sage [2008/01/17(木) 18:58:22 ID:???] >>752 区切り文字はCGI.pmでも&か:ですよね。 >>754 cgi側では解決できないような感じしますね。 >>755 それは良いコト聞いた。 >>756 オライリーの本読んでたら一般的にバグがあるとの事です。 CGI..pm使えとの一点張りです。 なので、どこにバグがあるのかなと ← いまここ みなさんレスありがとうございます。
758 名前:nobodyさん mailto:sage [2008/01/17(木) 23:23:09 ID:???] とりあえず>>751 がド初心者だということは分かった。
759 名前:nobodyさん mailto:sage [2008/01/18(金) 00:48:01 ID:???] >>758 スレタイ読めカス
760 名前:nobodyさん [2008/01/18(金) 12:04:46 ID:Z4Jr4bli] ファイルをサーバにアップロードしたいCGIがほしいのですが どこかいいサンプルないでしょうか? アップロードしたいファイルはエクセルファイルです
761 名前:nobodyさん mailto:sage [2008/01/18(金) 12:15:45 ID:???] ぐぐれかす
762 名前:nobodyさん mailto:sage [2008/01/18(金) 12:39:13 ID:???] アップロードされたファイルのを受信するCGIなのか、 それともファイルをアップロードするCGIなのか知らんけど search.cpan.org/~gaas/libwww-perl-5.808/lib/HTTP/Request/Common.pm search.cpan.org/~lds/CGI.pm-3.33/CGI.pm#CREATING_A_FILE_UPLOAD_FIELD
763 名前:nobodyさん mailto:sage [2008/01/18(金) 12:51:11 ID:???] >>760 ちゃんとした日本語で
764 名前:nobodyさん mailto:sage [2008/01/18(金) 14:27:48 ID:???] アップロードしたがってるCGIが欲しいんだろ
765 名前:nobodyさん mailto:sage [2008/01/18(金) 15:13:46 ID:???] 意思を持つCGIコワス
766 名前:nobodyさん mailto:sage [2008/01/18(金) 16:38:38 ID:???] >>760 こんな感じですか? #!/usr/bin/perl use strict; use warnings; use utf8; use CGI qw/:standard/; use constant MAX_WAIT => 10; my $q = new CGI; $q->charset('utf8'); my $wait = rand(MAX_WAIT); my @mind = qw(uploadしたい uploadしたくない uploadしてもいい); my $mind = $mind[ int( rand(scalar @mind) ) ]; print start_html( -head => meta({-http_equiv=>'refresh', -content=>"10; URL=$ENV{SCRIPT_NAME}"}), -title => 'CGIの気持ち' ),$mind,end_html;
767 名前:nobodyさん mailto:sage [2008/01/19(土) 01:06:12 ID:???] >>766 $waitは、どこで使ってるの? -head => meta({-http_equiv=>'refresh', -content=>"$wait; URL=$ENV{SCRIPT_NAME}"}), とかやりたかったのか?
768 名前:nobodyさん [2008/01/19(土) 14:38:24 ID:gMv3rNuv] すみません、少し数学の話になるかもしれませんが、 100%の確率のうち30%が当たりという設定をして くじを引かせる場合、 my $rate = 30; my $atari = int((rand(100))) + 1; if($atari <= $rate){ print "あたり\n"; } これで30%ということに理屈ではいえるのでしょうか。 それとも上か下かなので2分の1になるのでしょうか。 ご教示いただけますと幸いです。
769 名前:nobodyさん mailto:sage [2008/01/19(土) 15:04:56 ID:???] 算数のレベルだぞ
770 名前:nobodyさん mailto:sage [2008/01/19(土) 15:25:31 ID:???] すみません
771 名前:nobodyさん mailto:sage [2008/01/19(土) 16:00:15 ID:???] >>768 そういうときは、そのコードを何万回か繰り返してあたりとはずれのカウントを取って、 実際に30%くらいになるかを調べればいいんですよ。
772 名前:nobodyさん mailto:sage [2008/01/19(土) 17:54:09 ID:???] >>768 極東連合乙
773 名前:nobodyさん mailto:sage [2008/01/19(土) 18:03:47 ID:???] >>768 10000回だけ繰り返してみた。 あたり=3031 はずれ=6969
774 名前:nobodyさん mailto:sage [2008/01/19(土) 21:24:36 ID:???] >>771 ありがとうございます。 >>773 実行有難うございます。 私の方でもやってみましたが、平均値が30%になりました。 安心しました。
775 名前:nobodyさん mailto:sage [2008/01/19(土) 23:16:40 ID:???] #!/usr/bin/env perl use strict; use CGI; use CGI::Carp qw(fatalsToBrowser); use POSIX qw(strftime); my $q = new CGI; print $q->header(), $q->start_html(); #print $q->dump; # for debug my $outputdir = "log"; # ファイルを置く先 (ディレクトリ) my $fh = $q->param('uploaded_file'); my ($ex) = ($fh =~ m|(\.[^./\\]+)$|); # 拡張子 if ($fh ne "") { my $timestamp = strftime "%y%m%d%H%M%S", localtime; my $outputfn = "$outputdir/$timestamp$ex"; open(F, "> $outputfn") or die; flock(F, 2); if (defined $fh) { while (<$fh>) { print F $_; } } close F; print qq{saved as <a href="$outputfn">$outputfn</a>}; } print $q->start_multipart_form(-name => 'myform'), $q->filefield(-name => 'uploaded_file'), $q->submit("OK"), $q->endform, $q->end_html(), "\n";
776 名前:760 mailto:sage [2008/01/19(土) 23:18:40 ID:???] ファイルをアップロードするCGIを探してます。 日本語おかしかったですね、すいません。 サンプルを探したんですが >>775 のままだったら ファイルをアップしたときにファイル名が アップロードした日付になってしまいます。 ファイル名を変更することなくアップロードするにはどうすればいいでしょうか?
777 名前:nobodyさん [2008/01/20(日) 00:14:39 ID:1RDcSYMg] my $outputfn = "$outputdir/$timestamp$ex"; のところを、そうじゃなくすれば良い。
778 名前:nobodyさん mailto:sage [2008/01/20(日) 00:15:00 ID:???] >>776 マルチタイプを分割して、そのヘッダ部分に名前あるよ。
779 名前:nobodyさん mailto:sage [2008/01/20(日) 02:12:08 ID:???] ついでにフォルダ名も表示してやれば、閑古鳥鳴くこと間違い無し。
780 名前:nobodyさん mailto:sage [2008/01/20(日) 03:03:09 ID:???] サーバにファイル名を任意に保存出来るって危険じゃね? 同名ファイルの処理が必要になるし、文字化けとかあるし。 文字化けとかしたら、ダウソとか出来なくなる場合もあるし、 削除とかはsshログインして * とか使って消さないといけなく なる場合もある。(解決は出来るから問題なしともいえるのだが) 日本語はファイルと一緒にコメントとして管理すべきだと思うけど、 どうかな?
781 名前:nobodyさん mailto:sage [2008/01/20(日) 10:25:46 ID:???] >>780 間違いなく正しい。
782 名前:nobodyさん [2008/01/20(日) 19:19:48 ID:xw354eHR] 上の人とは別人だけどファイルのアップロードに関して質問 open(OUT, ">$filename"); binmode(OUT); while (read($fh, $buf, 1024)) { print OUT $buf; } close(OUT); close($fh); 上記なソースをよく見かけるんだけど、 三行目で一気に処理するんじゃなくて、 1024バイトずつ取り出して処理する理由って何?
783 名前:nobodyさん mailto:sage [2008/01/20(日) 19:21:07 ID:???] 1000MBのバッファ蓄えろというのか
784 名前:775 mailto:sage [2008/01/20(日) 19:37:21 ID:???] >>777 具体的にどうかえればいいのでしょうか? 教えてくださいとはいいません。 やってください >>780 ご意見ありがとうございます。
785 名前:nobodyさん mailto:sage [2008/01/20(日) 20:21:40 ID:???] 完全に自分専用とかなら別なんだろうけどな。
786 名前:nobodyさん mailto:sage [2008/01/20(日) 22:56:33 ID:???] >782-783 に関連した便乗質問で悪いけど、 レン鯖とかも考えた時の常識的なメモリ使用量ってどのくらい? シュワルツ変換とか使っていいものかいつも悩む。
787 名前:nobodyさん mailto:sage [2008/01/20(日) 23:26:35 ID:???] >>786 「レンタルサーバ メモリ使用量」でぐぐってみたらどうかな? ま、突き詰めるとそのサービスの仕様次第となるだろう。 シュワルツ変換も「やってはいけない処理」ではなく、重たい処理 でしかないからな。それだけの質問では何もいえない。 具体的なソースを出して、この負荷は問題ないか?とかなら分かるが。
788 名前:nobodyさん [2008/01/21(月) 21:15:32 ID:29cYlZ80] input type=file で送るファイルを指定しますが、 この場合のファイル名そのものを取得するようにするには どのようにしたらよいですか?
789 名前:nobodyさん mailto:sage [2008/01/21(月) 21:26:25 ID:???] >>788 HTTP_CONTENT_TYPEを見て、boundaryで区切って分割して、そのヘッダを読む。
790 名前:nobodyさん [2008/01/21(月) 22:20:09 ID:29cYlZ80] >>789 有り難うございます よく分かりませんが、ヒントを元にくぐってみます
791 名前:nobodyさん [2008/01/21(月) 22:33:12 ID:MggCWroJ] toolkitについての質問です。 toolkitのテンプレートを利用ユーザに編集させてたいと思っているのですが、 [% myheader = 'my/index.cgi' %] [% INCLUDE myheader %] などされるとソースが見えてしまいます。 なんとか規制できないでしょうか? phpのsmartyであれば以下のように、テンプレートからのインクルードを規制することができます。 同等の機能はあるのでしょうか? $this->security = true; $this->security_settings["INCCLUDE_ANY"] = false; $this->security_dir = "/path/to/templates"; $this->trustes_dir = "/path/to/php"; または、テンプレート内で使える関数を指定できるとかありますでしょうか? 日本語マニュアル見てみましたが、それらしいものがありませんでした。 www.hakoniwa.net/tt/
792 名前:nobodyさん mailto:sage [2008/01/21(月) 23:09:44 ID:???] >>787 亀レスですみません。ぐぐってみました。 >782-783 のような流れをたまに見るので業界の暗黙知が あるのかと思いましたが特に無いようですね。 会社毎に見ていくと具体的な数字を出している所は少なかったですが、 少ないところで2MBと10Mb(=1.25MB?)でした。
793 名前:nobodyさん mailto:sage [2008/01/21(月) 23:29:51 ID:???] ムーアの法則があるので、数値は出しにくいところがある。 あるサーバで5秒くらいかかっていたのが、最新のでは1秒くらいで終わるので、 ぜんぜん問題にならなくなったとか。 でも、1分を1秒にするのはムーアの法則でも5年以上はかかるわけで、 そのくらいの規模はどう頑張っても無理だろという話だ。
794 名前:nobodyさん mailto:sage [2008/01/22(火) 09:20:05 ID:???] >>791 INCLUDE自体を抑制するやり方はわからんが、 If a BLOCK definition is not currently visible then the template name should be a file relative to one of the INCLUDE_PATH directo- ries, or an absolute or relative file name if the ABSOLUTE/RELATIVE options are appropriately enabled. これを利用すれば普通は十分じゃねーの?
795 名前:nobodyさん mailto:sage [2008/01/22(火) 10:10:27 ID:???] テンプレート編集自体はtoolkit使うわけじゃないだろ? そこでチェックすりゃいいんじゃね?
796 名前:791 [2008/01/23(水) 00:37:55 ID:fM6ljyqY] >>794 >もし、ブロック定義が見つからない場合は、テンプレート名はINCLUDE_PATHのディレクトリにあるファイルか、ABSOLUTE/RELATIVEオプションが付いていれば絶対/相対パスにあるファイルを対象とします。 とのことですが、相対・絶対でスクリプト指定できてしまうということですよね? 考えても理解できませんでした、具体的にどのように利用すれば大丈夫なんでしょうか? >>795 たしかにテンプレート編集時にinclude等、使わせたくない文言を削除する方法もあるのですが、 入れようとしているシステムが銀行ほどではないんですけど、絶対にユーザにソースが漏れてはいけないシステムなんです。 (今後のシステム拡張等も含んで)チェックミスが出てきやすい作りで作るのはあまり好ましくないと考えています。 html-templateでも、includeなど規制する機能はなさそうですし・・・。 使いたい機能はifとloopだけなんですけど、 perlでセキュリティ完備したテンプレートエンジンほかにあるのでしょうか?