Perlコーディング初心者質問スレ Part 38
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
04/10/07 23:23:08ID:kiEzDCJF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0873nobodyさん
04/11/22 07:48:05ID:???<>で読むなら、空行が出るまで別の変数に入れておくとか、空読みするとか。
あと、socketとconnectのエラー処理をした方がいいよ。
0874nobodyさん
04/11/22 08:44:18ID:???0875nobodyさん
04/11/22 10:28:03ID:/gdSyseW素人考えで申し訳ないですが、GETのところでオプションなどをつけてその応答メッセージを
出さないようにすることってできないものですかね?
HTTP/1.1 200 OK 〜〜text/html 取得したログファイルの内容〜
取得した内容は↑のようになっていて、応答メッセージと取得したログの間は半角スペースと
なっています。
応答メッセージを取得時にカットできない場合、取得後にカットするわけですが、シンプルに
カットするには、どういう方法があるでしょうか?perl初心者なもので、たびたびすみません。
0876nobodyさん
04/11/22 11:44:54ID:???チミはx68userのページ見て勉強してから出直すといい。
http://x68000.q-e-d.net/~68user/
別の解法: 他の人も言っているがLWPというチミがやりたいことをそのまま提供している
モジュールがあるので、そっちを使うと簡単。
「原理を理解しなくても目的を達成できりゃいい」という事ならばこっちをすすめる。
0878806
04/11/22 11:50:53ID:dylfkRdnprint "Content-type: image/jpeg\n";
print "Content-length: $filesize\n\n";
と書いてみました。swf側でファイルサイズを取得できて大喜びだったんですが、
jpg画像が途中から壊れて表示されるようになってしまいました。
>(一旦テンポラリファイルを作らないとだめかも知れないけど)
すみません。調べてみたのですが、ちょっと意味が。。。
0879nobodyさん
04/11/22 12:00:44ID:???もしContent-lengthをつけただけでそうなったのなら、
$fileseizeの値がおかしい可能性が高いな。
0880806
04/11/22 13:03:45ID:dylfkRdnレス、ありがとうございます!
print "Content-type: image/jpeg\n";
print "Content-length: 100000\n\n";
とかやってみたのですが、やはり画像が壊れて表示されます。
(こんなことしてはいけないのかな。。。)
0881806
04/11/22 13:14:51ID:dylfkRdnできました!!
やはり値がうまく入っていないだけでした。
ただ
($width, $height, $filesize)= $i->Get('width', 'height', 'filesize');
と値をとっただけなのでリサイズ前のファイルサイズがとれているだけなのですが。
テンポラリファイルとは一度このファイルをtmp.jpgとかにしてそのファイルサイズを
を測らなくてはならないという意味だったのでしょうか?
0882nobodyさん
04/11/22 14:04:38ID:/gdSyseWhttp://x68000.q-e-d.net/~68user/
x68userのページで、「HTTP クライアントを作ってみよう」という記事を見ましたが、
どうもヘッダを除いてボディだけを出力するというのはできなさそうに感じました。
LWPについてはx68userのページで一通り見ましたが、掲載されていないように
見受けられるので、いろいろ検索してそれらしい解説ページを見ましたが、
使用方法について内容の濃いページを見つけられませんでした。
一般的にどのサーバーにもLWPのモジュールが入っているのか?、当方のレンタル
サーバーでLWPは使えるのか?といった辺りからよくわかりません。
(見当違いなことを言っていたらごめんなさい。)
結局、ソケットでヘッダー(応答メッセージ)も含めてファイルを取得し、文字列操作
して、わざわざいらない部分を取り除かなければならないことになりそうです。
同じサーバーならopenしてファイルを参照できるのに、他サーバーのファイルを
参照するだけで、えらく苦労しています。
0883nobodyさん
04/11/22 14:15:38ID:???ボディだけ欲しいならHTTP/0.9で取れるが、HTTP/0.9はHostを送れないのでチミのホストでは駄目。
でも、ヘッダー読み飛ばすのなんか楽勝でしょ。
http://x68000.q-e-d.net/~68user/net/http-2.htmlだと38-41行
0884nobodyさん
04/11/22 14:30:16ID:C0NQJmHQそこに添付されてきた画像ファイルをCGIで読み込み
メインアカウント(例:main)内にあるフォルダに保存させています。
読み込むCGIをgetmail.cgiとするとこれを手動で実行すると
問題なく動作するのですが
crontabを用いて自動実行させると添付ファイルの保存がされません。
crontabによりgetmail.cgiは動作しているものの
保存のみがされないようです。
0-59/2 * * * * cd /home/sites/www.xxx.jp/web && /home/sites/www.xxx.jp/web/mailget.cgi
で実行させています。
環境はRed Hat Linux 7.3
Apache 1.3.27
Sendmail 8.11.6
です。ちなみに、別のレンタルサーバー(FreeBSD)では動作していました。
原因がどこにあるのかご教授ください。
0885nobodyさん
04/11/22 14:31:03ID:???>参照するだけで、えらく苦労しています。
いやそれはそういうモノだ
Perlコーディング以前の「コンピュータが動くしくみ」とかいう次元の問題として
0886nobodyさん
04/11/22 14:54:17ID:/gdSyseWひとまず、ご指摘の箇所を適用してヘッダーを読み飛ばし、ボディだけ抽出できました。
ありがとうございました。
0888nobodyさん
04/11/22 15:58:18ID:???実行ユーザ名・使用するファイルのパミッション・使用する環境変数等々
チェックすることはいっぱいあるよ。
んでも、エラーを適切に処理してればどこでコケたか分かるでしょ?
>>887
初心者自体がセキュリティフォールです。はい。
0889nobodyさん
04/11/22 15:59:51ID:???0890nobodyさん
04/11/22 16:04:25ID:C0NQJmHQ>>888さん、ありがとうございます。
色々チェックしましたがイマイチ解りません。
ブラウザから実行した場合は正常なのですが
crontabで自動実行した場合のみ保存がなされません。
調べたところ、添付ファイルの取り込みも問題ないようで
問題なのはopenして書き込む部分が実行されていないと言うことです。
ファイルの所有者とグループが違うのかと思ったのですが
これらは変更したりできるのでしょうか?
0892nobodyさん
04/11/22 16:12:24ID:???「私は子供に生まれないで良かったと、胸をなでおろしています!」っての。
>>888は初心者に生まれないで良かった胸をなでおろしてるんだろうな。
0893nobodyさん
04/11/22 16:14:31ID:???【初心者は】Perlコーディング初心者質問スレ Part 39【セキュリティフォール】
0894nobodyさん
04/11/22 16:15:46ID:???print "Content-type: text/plain\n\n";
print "Hello Perl !";
今日からPerlをはじめまして、本どうりにこれを打ち込んで、表示さしてみると
ファイルを開く、保存のダイアログボックスが表示されます。開くを押すと
メモ張にHello Pealと表示されます、本ではブラウザ上に表示されると
なっているのですが、違うCGIをためしてみるとちゃんとブラウザに表示されます。
本の付属のサンプルでやってもこれだけは、安心できる発信もとからの・・・
ファイルを開く 保存・・がでてブラウザに表示されません。これだけ
なぜかこうなります。
無視して、これは飛ばして次のCGIからやったほうがいいのでしょうか?
原因がわかるかたぜひおしえてください。
0896nobodyさん
04/11/22 16:30:35ID:???$keywordが実行されないようにしないと。
バッククォートは確実に殺しとけ。
0897nobodyさん
04/11/22 16:36:59ID:???かわらないのでperlの中だけで完結した場合に比べて
劇的に処理が軽くなるとはとは思えないのだが。
0898888
04/11/22 16:58:04ID:???| | (っ))) ヒャッホー! オレ様がスレタイに!!
| | //
|∧_∧ // >>890
(´∀`*// cgiの実行ユーザ名でcrontab -eを実行してないのでは?
l / その場合ならパーミッション関係でエラーがでて
保存できないこともありうる。原因を探らないと。
0899nobodyさん
04/11/22 17:45:56ID:???0900nobodyさん
04/11/22 17:51:31ID:TZImgkmIsubjectはちゃんとmimeエンコードしてるのですがfromに日本語を埋め込む時にも
mimeエンコードする必要がありますか?
JISでそのまま書いても駄目ですよね?
from: "送り先の人間の名前" <hoge@test.com>
みたいになってますがどうすれば大方のメールソフトで問題なく動作するでしょうか?
0901nobodyさん
04/11/22 18:11:55ID:???クズのくせに威勢がいいな。
特別に教えてやろう安全なパイプの使い方だ。二度と初心者に穴コード教えるなよ。ヘッポコ。
$pid = open(IN, "-|");
if (!defined($pid)) {
die "cannot fork";
} elsif ($pid == 0) {
exec('grep', $keyword, 'file') || die 'grep';
}
>>900
MIMEエンコードすりゃいいだけだろ。何が聞きたいんだ?
0904nobodyさん
04/11/22 19:16:13ID:4/apYG7/そんなんで虚勢張られてもなぁ・・・
空しくならない?
0905nobodyさん
04/11/22 19:19:21ID:???0906nobodyさん
04/11/22 19:34:33ID:???0907nobodyさん
04/11/22 20:17:07ID:???0908nobodyさん
04/11/23 01:17:07ID:???()もマズイか?
いずれにせよ、パイプの使い方云々って話じゃなくて。
0909nobodyさん
04/11/23 01:23:12ID:nMfYIywnshが余計な解釈して、コマンド実行されると困るからでしょ。
>>901の方法でパイプ使えばshは経由しないから、安全なの。
0910nobodyさん
04/11/23 02:23:51ID:7PvclRNn0911nobodyさん
04/11/23 02:54:05ID:???マーライオン , ―‐ 、
/r‐' ,ェェr‐..、
| l | ____Y)........
| l ヽ ┴‐┬'''''''''' ::::.........
| l l `ー‐1 ::::::::.......
7レヘ! / ::::::::::::.....
l |. | / :.:.:.:::::...
/7ーー7777! :.:.:.:::::....
T--l⌒ヽ{ l :.:.:.:.::::::...
|vv'レ⌒!'ー! :.:.:.:.::::::...
|vv'ヽソー1 :.:.:.:.::::::.
_ヽVVVー7__ :.:.:.:.:::::..
,〜〜〜〜〜〜〜ヽ ヽ、 :.:.:.:.:.:..::..
∠二二二二⌒二二二二二二ユ :.:.:.:.:.::::::...
0912nobodyさん
04/11/23 07:24:42ID:???出力するデータのサイズを出力しないとだめだよー。
>>894
・IEを投げ捨てて他のブラウザを使う。
・おまじないとして最後に"/"を付ける。
・Windows XP SP2にして、IEをレスポンスヘッダに従うように設定する(できるらしい)。
・HTMLで出力する。
原因はIEの仕様。
0913nobodyさん
04/11/23 08:01:40ID:???0914nobodyさん
04/11/23 09:12:03ID:???> ファイルを開く、保存のダイアログボックスが表示されます。開くを押すと
> メモ張にHello Pealと表示されます、
これから察するに、CGIとして動作していると思うが。
0915nobodyさん
04/11/23 09:31:30ID:???CGIとして動作しているのはたしかだが
ダイアログを出したくないんだったらこうしなされ。
x print "Content-type: text/plain\n\n";
o print "Content-type: text/html\n\n";
0917nobodyさん
04/11/23 10:25:43ID:???print "Hello Perl !";
なのに「Hello Peal」って表示されるんだぞ。
Perl自体のバグでは?
0918nobodyさん
04/11/23 11:00:08ID:???>>909ではないですが、それが実行されるOSを教えてくれませんか。
FreeBSDで確認できなかったので。
それから、一応貼っておきますね。
CGIプログラミングとセキュリティ
http://www.ansi.co.jp/tech/cgi/security/programming.html
> また、以下のように引数が2個以上の exec と組み合わせるとメタキャラクタの解釈が行われない。
> open GREP, "-|" or exec "/usr/bin/grep", "-e", $CGI{str}, "/path/to/data/file" or die;
perlsec - Perl security
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsec.html
> open(FOO,"echo $arg|"); # Not OK, but...
> open(FOO,"-|")
> or exec 'echo', $arg; # OK
# 今のperlsecでは、この方法もAlso not OKにされています。
0919nobodyさん
04/11/23 11:08:09ID:nMfYIywn顔真っ赤にして、嘘付くなよ。ヘッポコ
実験すれば実行されないことは簡単にばれちゃうのに、事実を捻じ曲げてまで絡んでくるとは
そんなに馬鹿にされたのが悔しいのかな?
でも、実際馬鹿なんだからしょうがない。親を恨んであきらめることだ。
$keyword=';rm -f *';
$pid = open(IN, "-|");
if (!defined($pid)) {
die "cannot fork";
} elsif ($pid == 0) {
exec('/bin/echo', $keyword, 'file') || die 'grep';
}
while(<IN>) {
print $_;
}
0921nobodyさん
04/11/23 11:13:10ID:???だ。;が抜けてる。*fileだったらそんなファイルなけりゃ何も削除されん罠
0922nobodyさん
04/11/23 11:27:41ID:nMfYIywnやってから言えよ。ヘッポコ。行末の;を入れたって実行されねーよ。
破壊的な馬鹿だな。
0923nobodyさん
04/11/23 12:00:00ID:???"test.pl" [New File] 12 lines, 213 characters [E]
[***@***** test]$ chmod +x test.pl
[***@***** test]$ ls
aaaa ahie aisjrioe iruiet test.pl*
[***@***** test]$ ./test.pl
;rm -f *; file
[***@***** test]$ ls
aaaa ahie aisjrioe iruiet test.pl*
コードは>>919に;いれた奴
0924nobodyさん
04/11/23 12:24:02ID:???perlは奴のようなヘッポコでもそれなりのコードをでっち上げる事が出来てしまうので、
「俺ってできるじゃん」と勘違いしてしまったのだろう。
勘違いして玉砕してしまった>>916に「伝説のヘッポコ」のコテを贈ろう。次からはこのコテで出て来い。ゲラゲラ
0925伝説のヘッポコ
04/11/23 12:38:20ID:???ヾヽ!lV/ / ,/ / ,' ハ、: .
,ィニ≧ゝレ' / / ,./ / , ハ : : .
く<-‐7´ _」] l l/_,∠/ / / / い : : .
 ̄ノ/: :f r'l l /レ'/、_/‐ト'、/l| li l : : : : .
. : {ハ : :|{(l|y==ミ _ノ、/ソリ ll | : : : : :
: : : :ヽヽ: :|、lハl、゙ ⌒ヾlノリ ll l : : : : : :
: : : : : : : : V\ヽ、 `ー ゛ノルんイリノ : : : : : :
: : : : : : : : : ,.--、_ハ`−r=ニ--、′ノ. : : : : : : :
: : : : : : : : / /-ョロ'ヲ´ i l : : : : : : : : : :
: : : : : : : 〈 ,ハフ'兀「 ! } : : : : : : : : :
: : : : : : : : ヽ, ト{‐lハ. ヽ ' ノ : : : : : : : :
0926nobodyさん
04/11/23 13:14:57ID:7PvclRNn黙って頭下げて俺の靴でもなめてりゃいいんだよカスどもが(pgr
0927nobodyさん
04/11/23 14:23:34ID:???0928nobodyさん
04/11/23 14:24:02ID:nMfYIywn0929nobodyさん
04/11/23 15:22:41ID:???そろそろ次スレの頃合かの。
0930nobodyさん
04/11/23 16:09:24ID:???gzipの利点は「負荷を削減する」「転送量を減らす」というのは分かりましたが、早さの面ではどうなりますか?
私としては、転送量を減らすので早くなりそうな気もしますが、ブラウザに解凍する処理をさせるので遅くなりそうな気もします。
ご回答を宜しくお願いします。
0931nobodyさん
04/11/23 16:30:41ID:???返すことを一度にやりたいんですけどできません。
どうやればいいのでしょうか?
0932nobodyさん
04/11/23 16:40:17ID:???0933nobodyさん
04/11/23 16:48:03ID:???自分のサイトで他ページの情報を一部使いたいのです。
0934nobodyさん
04/11/23 16:48:35ID:???自鯖でやらせるんならええけど、レンタルでやったら怒られること間違い無しであろう。
2ch閉鎖みたいに転送量でゴルァされて初めて意味がある処理ではある。
0936nobodyさん
04/11/23 17:36:00ID:???無名ハッシュのリファレンスを得るなら、先に得ないと無理だと思う。
で、無名のハッシュのリファレンスを得て、ハッシュスライスに値を代入にしてみたけど。
use strict;
use Data::Dumper;
my @pos = qw(msn yahoo google);
my $value = 'search engine.';
my $hash_ref;
@{($hash_ref = {})}{@pos} = ($value) x @pos;
print Dumper($hash_ref);
0939nobodyさん
04/11/23 20:55:05ID:???http://tmp4.2ch.net/test/read.cgi/kitchen/1100420247/
0940nobodyさん
04/11/23 22:21:01ID:???ブラウザの負荷はあまり気にしなくても良いよ。
低スペックのPCでISDNでも体感速度は速くなった。
もし、テーブルを使ったレイアウトをしているなら、
gzipよりもHTMLを変更した方が体感速度は速くなることが多い。
サーバー負荷が心配なら予め圧縮しておくと良いよ。
0941nobodyさん
04/11/24 04:36:06ID:???でもこれじゃ>>854の言う「データディレクトリでgrepかけて、該当したファイルのみ読み込みたい」
ってのは無理だね。
0942nobodyさん
04/11/24 10:14:07ID:???スクリプト内で一つ一つ開いてやれ。たいして負荷かわらんってオチか。
0943nobodyさん
04/11/24 14:24:18ID:???0944nobodyさん
04/11/24 14:55:14ID:???LWPモジュールだと、テキストデータしか取得できないと思うのですが、
指定したURL自体のスクリーンショットみたいに画像データとして取得を行う様なPerlのモジュールとかってありませんか?
もし存在すればモジュールの名前を教えてください。
こんな感じで指定したURLの画面を表示したいのです。
ttp://sea.search.msn.co.jp/preview.aspx?&q=%e5%85%89%e3%83%95%e3%82%a1%e3%82%a4%e3%83%90%e3%83%bc%e3%80%80%e3%83%97%e3%83%ad%e3%83%90%e3%82%a4%e3%83%80%e3%83%bc
よろしくお願いします。
0945nobodyさん
04/11/24 15:56:51ID:???この['a','b','c']を@bbbに入れたいなんて場合はどうすればいいですか?
0947nobodyさん
04/11/24 16:26:31ID:???0949944
04/11/24 17:31:19ID:???画面のスクリーンショットを取得できるんですか?
もう少しマニュアル読んでみます。
0950nobodyさん
04/11/24 17:33:37ID:???HTMLレンダリングしたページイメージを取得したい、
という話らしい。
>>946 の言ってるとおり、それは LWP とか「取得」とかいう問題ではなく、
LWP で取ってきたデータをローカルでレンダリングするにはどうしたら、
という話になるわけだが。
必要なデータを渡すと gecko 使ってレンダリングして
Image::Magick オブジェクトを返してくれる、
とかいうモジュールがあるといろいろ便利そうではあるが、
かなり難しそうだわなあ。
0951nobodyさん
04/11/24 20:28:29ID:???http://www.babysimon.co.uk/khtml2png/
こういうのを利用するといいんでは。
モジュールではないし、XやQt、KDEに依存するけど…。
0952nobodyさん
04/11/24 22:05:26ID:???http://marginalhacks.com/Hacks/html2jpg/
こっちはPerlスクリプトだね。
X+Mozilla+ImageMagickかな。
0953nobodyさん
04/11/24 22:19:47ID:???大体がブラウザにレンダリングをさせて画面をキャプチャーするタイプ。
他にも、Windows限定だけど web制作板のCSSでイケてるかも知れないデザインサイトスレで
使っているwebnailとか。
0954nobodyさん
04/11/25 00:19:16ID:???サーバー側で使うとなると、ちょっと敷居高いんじゃないかな。
0955nobodyさん
04/11/25 00:33:25ID:???opendir,readdirかFile::Findかどちらを使うべきだろう。
1000ファイルほどあるんですが、パフォーマンス的には変わりませんかね?
(ファイルは階層的に掘り下げる必要は無いんですが)
0956nobodyさん
04/11/25 01:11:28ID:???$key = 'bbb';
このような変数があるとして、$keyが@arrayの要素に存在するかどうかを
一発で判定する書き方って無いでしょうか?
0957nobodyさん
04/11/25 01:12:46ID:???0959nobodyさん
04/11/25 01:24:36ID:???0960nobodyさん
04/11/25 01:27:59ID:???2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
0961nobodyさん
04/11/25 01:46:49ID:???0962nobodyさん
04/11/25 01:50:38ID:???0963nobodyさん
04/11/25 01:56:17ID:???単一階層なら readdir 。
>>956
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq4.html#How_can_I_tell_whether_an_list_o
${{ map { $_, 1 } @array }}{$key} ? 'exists' : 'not found';
0966nobodyさん
04/11/25 08:26:21ID:???cgi-libでReadParseして%inを取り回してた方が負荷的にも鯖にやさしい?
0967nobodyさん
04/11/25 11:25:21ID:???0968nobodyさん
04/11/25 12:32:23ID:???import するかどうかはあんまり負荷に影響しない。
-compile :all とかするとさすがにアレだが。
俺も CGI.pm のコンパイルは若干重めだと思うが、
Template Kit や DBI の重さに比べれば誤差なので、
遠慮なく使っている。
それに mod_perl 環境下ではコンパイル負荷をほぼ無視できるしな。
0969nobodyさん
04/11/26 02:05:36ID:???ヒアドキュメントだらけでなんとかしたかったんだが、やめとくか。
0970nobodyさん
04/11/26 08:03:16ID:???my @data_list = qw/name date com/;
my %data = ();
〜〜
while (<FILE>) {
my @temp = split(/<>/);
$data{$data_list[$_]} = $temp[$_] for (0..$#data_list);
print '名前:', $data{'name'}, $data{'date'}, $data{'com'}, '<br />';
}
現在はこのように一旦別の配列に格納してからループしてます。
split(/<>/) からストレートにハッシュに格納することは難しいでしょうか。
0971nobodyさん
04/11/26 08:28:36ID:hJWQX2yrActivePerl-5.8.4.810-MSWin32-x86.msi とwin2000を使っています。
my $Name_T = '';
$Name_T =~ s/([\x20(){},+^~%`])/{$1}/g;
いろいろ試してこのような正規表現で以下の文字が$Nameに含まれている場合{}をつけて置換しようとしました。
(){},+^~%` とスペース
+なまえ+ → {+}なまえ{+}
%^なまえ^% → {%}{^}なまえ{^}{%}
こんな感じです。始めは上手くいっていたのですが不具合をみつけました。
"タ"や"ミ"、全角の"+"などです。
"タ"や"ミ"は"ボ^}"と置換されていまい、全角の"+"は"+{}"と置換されてしまいます。
ご指摘、アドバイス等いただければ幸いです。
レス数が950を超えています。1000を超えると書き込みができなくなります。