【Perl】初心者コーナー Part15
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/08/08 23:19ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0136nobodyさん
02/08/13 01:31ID:/aTNrvJIカウントするスクリプト、どっかに落ちてますか?
別に自分で見れればページに表示するつもりはないです。
0138nobodyさん
02/08/13 01:40ID:???0139nobodyさん
02/08/13 12:05ID:???スクリプト開始時に自前のcookieを発行→直後それを照合出来ればcookie有効、出来なければcookie無効と見なして弾く。
そう難解でもないかと>133
0140nobodyさん
02/08/13 15:47ID:???ちょっと時間が空いたので,1行200bytes(+crlf)の500行で約100kb程度のファイルをメモリに読み込むテストを行いました.
test1 @a = <FILE>と一度に全て読み込む.
test2 whileでループして1行ずつ読み込む.
この処理を500回ループして,経過時間を計りました.
結果.
TEST1: 39 wallclock secs (38.23 usr + 0.00 sys = 38.23 CPU) @ 13.08/s (n=500)
TEST2: 36 wallclock secs (35.86 usr + 0.00 sys = 35.86 CPU) @ 13.94/s (n=500)
と,微妙にtest2の方が効率が良いと出ました.
以下が実際に使用したソースです.
0141nobodyさん
02/08/13 15:47ID:0NNEcJ22use Benchmark;
my $count = 500;
sub test1{
open(FILE,'test1.data');
my @a = <FILE>;
close(FILE);
}
sub test2{
open(FILE,'test2.data');
my $a = $_ while(<FILE>);
close(FILE);
}
@t = timethese($count,{
'TEST1' => '&test1;',
'TEST2' => '&test2;',
});
0142nobodyさん
02/08/13 15:57ID:0NNEcJ22foreach 文は
・扱うデータ量が少なく,ファイルをすぐに閉じたい場合.
・同じデータを繰り返し使用する場合.
while 文
・データ量が大きく,配列を生成すると莫大なメモリを使用してしまう場合.
・データの1部分だけを必要とし,無駄なデータを読む込みたくない場合.
という事でした.
0143nobodyさん
02/08/13 21:45ID:Q5/MwQBf凄く普通の結論。
0144nobodyさん
02/08/14 00:05ID:???0146nobodyさん
02/08/14 00:26ID:LHt/Hq/vある変数をサブルーチン名に代入したりできるのでしょうか?
&サブルーチン名=変数; みたいにしたいのです
例えば
&hazime というサブルーチンを使いたい時
&(ココの書き方が分かりません)=$hazime;
みたいのことができるのでしょうか?
0147nobodyさん
02/08/14 00:31ID:???$count = &con();
0148147
02/08/14 00:31ID:???0149nobodyさん
02/08/14 00:54ID:???0150nobodyさん
02/08/14 08:03ID:???なんでしょかね?これ??
#!/usr/bin/perl-s
$f=$d?-1:1;$D=pack('C*',33. .86);$p=shift;
$p=~y/a-z/A-Z/;$U=~s/( . *)U$/U$1/;
$D=~s/U( . )/$1U;';($V=$U)=~s/U/V/g;
$p=~s/[A-Z]/$k=ord($&)-64,&e/eg;$k=0;
while(<>){y/a-z/A-Z;y/A-Z//dc;$o.=$_}$o.="X"
while length ($o)%5&&!$d;
$o=~s/.chr(($f*&e+ord($&)-13)%26+65)/eg;
$o=~s/X*$//if$d;$o;$o=~s/.{5}/$&/g;
print"$o|n";sub v{$v=ord(substr($D,$_{0}))-32;
$v>53?53:$v}
sub w{$D=~s/(.{$_{0})(.*)(.)/$2$1$3}}
sub e{eval"$U$V$V";$D=~s/(.*)([UV].*[UV])(.*)/$3$2$1/;
&w(&v(53));$k?(&w($k)):($c=&v(&v(0)),$c>52?&e:$c)}
0152nobodyさん
02/08/14 14:31ID:8dp0qhB8HTMLソースをHTML形式のメールに変換するスクリプトをご存知ないでしょうか?
HTML形式のメールは、HTMLソースがそのまま本文中に書いてあるのだと
ばかり思ってましたが、MHTMLとかいう形式があるようで・・・
0153nobodyさん
02/08/14 14:48ID:???スレ違い
【CGI初心者コーナー】
http://pc.2ch.net/test/read.cgi/php/1028646335/
0154nobodyさん
02/08/14 14:56ID:8dp0qhB8リンク先は「まぁ、またお前は騙されたわけだが・・・ 」というスレッドです。
0156nobodyさん
02/08/14 22:41ID:dH0XveEg-------------------------
#!/usr/local/bin/perl
print"Content-type: text/html\n\n";
print "購入申し込み";
-------------------------
と書いて実行すると、
-------------------------
購入垂オ込み
-------------------------
と表示されてしまいます。
どうしてでしょうか?
何か基本的なことを間違えてるのでしょうか。
0157nobodyさん
02/08/14 23:19ID:???0158nobodyさん
02/08/14 23:26ID:???157じゃないけど、具体的には「申」のあとに\を入れろって事。
申\し込み
なぜこうなるかというと、「申」のShift-JISでの2バイト目が'\'(0x5c)だから。
0159nobodyさん
02/08/14 23:35ID:???$a = 1 << 2 としてみました
00000100 になると思ってたんですが
unpack("B*",$a) としてみたら
00110100 となっていました
上4ビットはなんなんですか
0162156=154=152
02/08/15 01:27ID:5Zkc/vw2EUCに変換して解決しました。
ありがとうございました。
>>158
分かりやすい解説ありがとうございます。
勉強します。
152の問題も解決しました。
スクリプトは見つかりませんでしたが、
Content-type: multipart/alternative;boundary="--- ・・・
を付けて、テキスト部分とHTML部分を区切るだけで出来ました。
ありがとうございました。
0163↓晒しヽ(`Д´)ノアゲー
02/08/15 02:47ID:???http://rating.auctions.yahoo.co.jp/jp/show/rating?userID=hidekurokawa&filter=-1
評価: 非常に悪い 落札者です。評価者は manaboon2001 (21)
IBM Deskstar ATA100/60GB 7200rpm 送料込み!! (6月 9日 23時 14分)
出品者は「 非常に悪い 」と落札者を評価しました。
コメント:取引終了後、1週間のうち私から3度メールでご案内しても何も返事がありませんでした。
お前はブラックリスト入りだ!! (6月 15日 23時 7分) (最新)
評価: 非常に悪い 落札者です。評価者は goodnanews (2)
デジタルミキサー Fostex VM04 (11月 11日 5時 49分)
出品者は「 非常に悪い 」と落札者を評価しました。
コメント:一方的な理由でキャンセルされました。自分が落札した商品には責任を持って対処してください。 (11月 14日 12時 36分) (最新)
評価: 悪い 落札者です。評価者は gtak55 (42)
FOSTEX☆MN06☆6チャンネルミキサー (10月 17日 5時 9分)
出品者は「 悪い 」と落札者を評価しました。
コメント:キャンセルの理由が納得いきません。落札したものはどんな理由があれ責任を持って購入すべきではないでしょうか?
(10月 18日 23時 48分) (最新)
評価: 非常に悪い 落札者です。評価者は hiroalive2000 (35)
定価98000円のスーパーリズムマシンプラス・メモリー9800円あわせて12000円即決 (9月 19日 2時 23分)
出品者は「 非常に悪い 」と落札者を評価しました。
コメント:最悪です。何度連絡してもメールくれません。完璧な無視です。多分オークション二酸化しないほうがいい人
ですからこんな人は注意してください。みなさん。 (9月 24日 19時 33分)
コメント:これかいたらすぐに返事がくるんですよ。こういうやつがふえてるんで・・・。
今まで完璧な無視してきたらこうかかれると私にしつこいとか言ってもんくつけるんですよ。すいそくですが・・・・
日ずけ見て下さったら皆さんわかると思います。 (9月 24日 19時 36分) (最新)
0164nanasi
02/08/15 04:12ID:???したいのですがどのようにしたら良いのでしょうか
0166nanasi
02/08/15 05:50ID:???http://www.cj-c.com/cgi_s/upb.htm (UPP BORD)
を設置してるのですがあっぷした画像のみを他サイトの掲示板で
転載されて困ってるので他サイトからあぷされた画像を閲覧した場合
自分のHPのTOPに飛ぶようにしたいのです。
あっぷされた画像直リンの場合弾きたいということです。
どうか方法教えてください
0167nobodyさん
02/08/15 11:08ID:???画像の直リンク防ぎたいなら .htaccess の出番かと
「.htaccess 画像 制限」 こんな感じのキーワードで
googleで検索すれば解説してるサイトみつかるべ。
これ以上はスレ違いなので、あとはご自分で・・・
0168エロ助
02/08/15 11:32ID:h1WzO6+xhttp://www.kemokemo.com/products/picchabo/picchabo203.lzh
上(掲示板CGI)に下(ランダム広告CGI※呼び出しによりSSI使用しない方)を設置したいのですが『インターネットサーバーエラー』になります。(;_;)
一通りパーミッション設定などを説明どうりやってみたのですが設置できないんです。。(;_;)なぜでしょう??(;_;)
どうか教えていただけないでしょうか。。(;_;)
また呼び出しのときの記述が『require 'rand.pl'; rand::main($Op1,$Op2,$Op3);』を記述しろと書いてあったので正確に記述したのですが『インターネットサーバーエラー』になってしまうんです。。(;_;)
『$buffer』でも記述したんですがだめでした。
http://taihei.cc/pc/cgis/random.html
http://taihei.cc/pc/cgis/randban11.lzh
0169nobodyさん
02/08/15 11:34ID:???0170nobodyさん
02/08/15 14:23ID:???縮小画像を生成したいんですが、
私の知っている方法ではroot権限の関係で共有スペースでは不可能なのですが
root権限の関係無しに縮小画像を生成する方法はありますか?
0171nobodyさん
02/08/15 15:09ID:???/ ̄ ̄ ̄ ̄ ̄ ミ
/ ,――――-ミ
/ / / \ |
| / ,(・) (・) |
(6 つ |
| ___ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| /__/ / < HTMLでできるだろ!
/| /\ \__________
0172nobodyさん
02/08/15 15:33ID:???GDを使うといい。GD.pmで検索しる。
http://member.nifty.ne.jp/hippo2000/perltips/GD.html
0174アップローダを作り隊
02/08/15 18:04ID:OdAnllx3どうもわからんのです。
フリーのアップローダのソースを見ても掲示板とかが邪魔で
肝心のアップローダの仕組みがわからず。。。
perlのリファレンス本を何冊か読んでも、
何をアップローダに使えばわからず。。。
どうか皆様、この私にアップローダの「ア」の字くらいを教えてくださいませんでしょうか。
0175170
02/08/15 18:24ID:???3<>コメント
1<>コメント
ログファイルにこういう形で保存されいて
1 2 3の中のもっとも大きい数字を求めるにはどうすればいいのでしょうか?
0177170
02/08/15 18:40ID:???0178nobodyさん
02/08/15 18:44ID:???0179nobodyさん
02/08/15 19:04ID:???ゆいのーとの最初の方をみれば割と判るとおもう。
http://zurubon.strange-x.com/uploader/src/
調べるなら「Content-type: multipart/form-data」で。
http://www.tsden.org/ryutaroh/fileupload-j.shtml
0180アップローダを作り隊
02/08/15 19:52ID:OdAnllx3スマソ。やっぱりわからんです。
設定するところをして、CGI対応のサーバーにアップしたのですが、
ファイルサイズがやけに小さくなって、しかも開けず。
自分のPCにApache入れてるんですが、それでも同じ結果です。
他のアップローダーもファイルサイズが同じように小さくなります。
ちなみにJPGファイル。
対応してるはずなんですが。。。
アップローダー十個くらい試してみたのですが、全滅です。。。
設定がいけないんでしょか?
0182nobodyさん
02/08/15 20:01ID:???バグの原因が判らないなら3〜4種のブラウザで再現するかどうか見れ。
0183アップローダを作り隊
02/08/15 20:17ID:OdAnllx3http://ruffnex.oc.to/ipusiron/upload/1171.zip
↑一応ゆいのーとを使っているサイトにソースをアップしました。
最低限設定する必要がある部分など指摘していただけたら、と。
0184アップローダを作り隊
02/08/15 20:17ID:OdAnllx30185nobodyさん
02/08/15 20:49ID:???ちゃんと動くよ?(^^;
$url = 'http://www.hoge.com/~hoge/up/source.cgi';
$storeurl = 'http://www.hoge.com/~hoge/up/source/';
$counter_enable = 0;
source.cgi(755)とsourcelog.txt(777)とsource/(777)を置いてパーミッションを適当に。
妙な制限掛かってるんじゃない?
0186アップローダを作り隊
02/08/15 20:57ID:OdAnllx3そ。。。そうなんですか?
ちなみにスペース借りてるサーバーがWindows2000なんですが、
それも関係あるんでしょうか?
文字化けも激しいのですが。。。
0187nobodyさん
02/08/15 21:08ID:???0189アップローダを作り隊
02/08/15 21:24ID:OdAnllx3一応、いくつかファイルをアップした時の状態のものを晒しておきます。
何かこれからわかることがあったらよろしくです。
0190アップローダを作り隊
02/08/15 21:29ID:OdAnllx3もともとソースファイルを参考にして自分で作ろうと思ってるので、
できれば>>183のソースファイルの何行目あたりが大事だぞ、とかだけでも言っていただけないでしょか?
ほんと聞いてばかりですみませんです。
0192nobodyさん
02/08/16 00:02ID:???0193アップローダを作り隊
02/08/16 00:09ID:kDsvONdE今ソースファイルをわかり易く?まとめてるので、
binmodeを使うべきところがわかったら試してみようと思ってます。
使い方はわかったのですが、今までbinmodeというのは知らなかったので。。。
0194nobodyさん
02/08/16 01:13ID:???CGI.pmでもいいけど。
0195nobodyさん
02/08/16 14:48ID:???しょうか。普通:じゃないですか?
0198nobodyさん
02/08/16 17:45ID:gz1h7SNU:をエスケープしないで済むからだとおもわれ。
タグを許可しなければ<>が入力されてくることはないので都合がよい。
0199nobodyさん
02/08/16 18:53ID:???ていうかこれが普通だと思いこんでいたけど。
0200nobodyさん
02/08/16 20:57ID:???セパレータに2バイトも使うとは愚の骨頂ですね
\t ?? はつみみです
0201アップローダを作り隊=193
02/08/17 04:09ID:17AkwzDgそれならばと、書店に行って「大人のCGIスクリプト」という本を買って
そこに出ている「ホームページにファイルをアップロードする」というところを
参考にしました。
それで、とりあえず本に載っているソースをそのまま書いて試したのですが、
うまくいきません。…つД`)
もうどうしていいのかわからないのですが、
本に載ってたものをそのまま書いたソースファイルをアップしておきましたので、
もし見て何かわかることがありましたら、どうかお願いします。
http://ruffnex.oc.to/ipusiron/upload/1178.zip
状態として、CGI自体はエラーもなしに動くのですが、
ファイルがまったくアップロードされません。
1バイトもファイルが作られないので、何か決定的な間違えがあると思うのですが。。。
あと32行目当たりのコメントの後ろに「$bound =~ s/…」とあるのですが、(本がその通りに書いてあったので)
これは本来コメント部分なのか、それとも間違えてコメントの部分に書かれたものなのかがよくわかりません。
0202アップローダを作り隊=193
02/08/17 04:12ID:17AkwzDg本には”アップロードされたファイルは「./filepost/」というディレクトリに保存される。”
と書かれたありました。
0203nobodyさん
02/08/17 09:27ID:???0204アップローダを作り隊
02/08/17 10:12ID:17AkwzDgパーミッションは755ではダメですか?
CGIスクリプトからの書き込みとパーミッションって関係ないと思ってたのですが。。。
あと、前述したのですがNTサーバーなのでパーミッションが変更できないのです。
(NTサーバーだから変更できないわけじゃないかもしれませんが、借りてる鯖は変更できません)
やっぱりパーミッションは777がいいのでしょうか?
0205195
02/08/17 13:13ID:???CGIの流儀には詳しくないんだ。スマソ。
0206nobodyさん
02/08/17 13:20ID:???>> パーミッションは755ではダメですか?
>> CGIスクリプトからの書き込みとパーミッションって関係ないと思ってたのですが
ええと、不特定の人がファイルをうpするんですよね。うp = 書きこみですから、
ファイルを保存するディレクトリに誰でも書きこめるようにしておかないと駄目です
よ。755なら所有者しか書きこめません。
って、これはUNIX鯖の話で、NTのことは分かりません。でもパーミッションが変更で
きなかったら使いものにならないような気がしますが...
0207nobodyさん
02/08/17 14:19ID:???まずはここから ⇒ REQUEST_METHOD
0208207
02/08/17 14:28ID:???if ($ENV{'CONTENT_LENGTH'} > 5050000){exit;}
binmode(STDIN); # 追加
#ファイル名、区切り文字「バウンダリ」の取得
while (<STDIN>){
0209207
02/08/17 14:30ID:???binmode(OUT); # 追加
0210nobodyさん
02/08/17 16:09ID:???ランダムに並び換えて(シャッフルして)出力するにはどうすればいいですか?
0212アップローダを作れ隊
02/08/17 17:34ID:17AkwzDgで、で、で。。。できますた〜。つД`)
if ($ENV{'REQUESTMETHOD'} eq "POST")のところは
後で自分で気付いて「バカだな〜」と思ったのですが、
それ直しても全然できなくて。。。
バウンダリというものが、検索かけてもいまいちイメージがわかないのですが、
きっとそのうち自分で勉強して理解できるようになります!
本当にわざわざソース見て、指摘してくださってありがとうございます。
二日間ほとんど寝ずに頑張った甲斐がありました。
いつか初心者コーナーで答えられるようになって帰ってきます。
本当にありがとうございました。
>>206
NT鯖がどうなのかよくわからなかったのですが、
パーミッション755で無事アップロードできました。
そもそもパーミッションってあるのかな?っと思いました。
0213nobodyさん
02/08/17 17:42ID:???案外、これが重要だったりする。
0214???
02/08/17 18:07ID:mpsXRracサイトなどを見ながら、cgiの勉強しはじめたんです。
で、何か、perlを落として来いって書いてるんですけど、
perlをダウンロードしようと思ったら、
xpのところが「No additional requirements」って書いてて、
落とせないんですが、
どれを落とせばいいのでしょうか?
0215???
02/08/17 18:10ID:mpsXRracんで、落とそうとしたサイトが、
有名なんでしょうが、一応書いとくと、
http://www.activestate.com/Products/Download/Get.plex?id=ActivePerl&_x=1
です。。。
0216nobodyさん
02/08/17 18:16ID:Jdg3+PCYよし↑とりあえずこれいれろ5.8な、
、、んでだActivePerlのそれはインストーラーがうまくいかないOSは
パッチあててねって意味。2000/XPには必要ねーよってこと
0217nobodyさん
02/08/17 18:20ID:???↑、どこでダウソするんだろうな?
有名も糞もなにもここにいるWin厨はみんなActivePerlだろう。
最近はネトランも付録CDにつけてるからな〜そういうのはいいんだがあの雑誌は
0218???
02/08/17 18:25ID:???アフォ過ぎだったんですね。
優しく教えていただき有難うございました!
0219nobodyさん
02/08/17 20:03ID:fKAF/2/WPERLってパラメータ(変数)渡してファイル実行、てできないんでつか。
cgiページで別のcgi呼ぶのに
require 'XXX.cgi';
とやればいいのは分かるんですが、変数渡して実行するやり方が
分かりません。
0220nobodyさん
02/08/17 20:38ID:???グローバル変数はそのままサブに引き継がれるが・・・
難しいか?
====================
本スクリプト
$aa = 1;
$bb = 2;
require 'XXX.cgi';
&XXX;
====================
XXX.cgiの内容
sub XXX {
$cc = $aa + $bb;
print "$aa + $bb = $cc";
} 1;
====================
0221nobodyさん
02/08/17 20:43ID:???====================
本スクリプト
require 'XXX.cgi';
&XXX(1,2);
====================
XXX.cgiの内容
sub XXX {
$aa = $_[0];
$bb = $_[1];
$cc = $aa + $bb;
print "$aa + $bb = $cc";
} 1;
====================
0222nobodyさん
02/08/17 21:02ID:???分かりました!ありがとうございます、やってみます。
0223nobodyさん
02/08/17 21:08ID:???} 1;
ってどういう意味があるのですか?
このパッケージ関数の仕事は正常に終わったよ(゚Д゚)、ペッ って意味。
0228nobodyさん
02/08/17 22:47ID:???( ゜д゜)ポカーン
0229nobodyさん
02/08/17 22:48ID:???>225-227
タイム( ゜д゜)ポカーン
0236nobodyさん
02/08/18 15:40ID:CpuDe273openでURLを指定してwhileでprintさせてみましたが
何も表示されませんでした。
もしできるのなら方法を教えてください。
■ このスレッドは過去ログ倉庫に格納されています