トップページ⇒php
1001コメント346KB

【Perl】初心者コーナー Part16

■ このスレッドは過去ログ倉庫に格納されています
00013PIO ◆3pIoOHKo 02/09/15 15:11ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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あたりを見よう。
0756nobodyさん02/10/05 21:29ID:apJJAmbi
フォームメールに添付ファイルを送信する機能をつけたいのですけど、
どう書けば出きるでしょうか?
0757nobodyさん02/10/05 22:29ID:EJw02ifJ
プログラム版から追い出されました(泣く)
つまんない質問なんですけどFILEアップロードするプログラムなんですけど
<input type=FILE>でUPするとたしかにプログラムは動くのですが
ファイル名を表示することができません。
cgi.libをつかっています
$IN{’’}でとってきてprintとすると文字がばけます
エンコードするのですか?
よくわかりません。初心者です。
0758nobodyさん02/10/05 22:47ID:???
正規表現でお聞きしたいことがあるのですが、

色々<SPAN>fiarla</SPAN>日本語<SPAN>tegsgs</SPAN>何か
<SPAN>aretgsda</SPAN>テスト<SPAN>aretgsda</SPAN>マトリックス<SPAN>vxchgf</SPAN>

と言う文字列を 色々日本語何か\nテストマトリックス 
だけにしたいのですが
s/<span><\/span>//ig;
にすると "色々何か\nテストマトリックス" になってしまいます。
どうしたらいいでしょうか?
0759nobodyさん02/10/05 22:52ID:???
s/<span[^>]*>.*?<\/span>//gi;

かな・・・
0760太郎02/10/05 22:58ID:JyTnPr2r
無料サイト総合案内室わつくりますた。
情報量は知り合いの友達よりも結構多いです。
あと、このサイトの正式タイトルを考案中ですので応募してみては。
あとアンケートにも答えてみては。

http://www31.tok2.com/home/sanche/
0761nobodyさん02/10/05 23:01ID:ojGyzDqf
サイトに掲示板をつけたいのですが用語等よくわからない所がいくつかあり
困っています。
どなたか以下の文をわかり易く説明ください。
パソはウィンドウズ2000です。

>public_html (ホームディレクトリ) の下に、「bbsディレクトリ」を作成し、
さらにその下にロックファイル用ディレクトリ「lockディレクトリ」と過去ログ用ディレクトリ
「pastディレクトリ」を作成します。

ホームディレクトリってどこにあるのですか?
0762nobodyさん02/10/05 23:17ID:???
>>759
http://www5a.biglobe.ne.jp/~n_rieko/perl/8.htm
ここを参照にして試行錯誤したのですが、上手くいかなくて・・・
ありがとうざいました。
0763nobodyさん02/10/06 00:14ID:???
>>756 >>757
「multipart/form-data」について検索後、
不明な点をまとめて適切な板・スレで再度質問して下さい。

>>761
「ドキュメントルート」について検索後、
不明な点をまとめて、その掲示板プログラムの作者のサイトか、
適切な板・スレで再度質問して下さい。

>>755
「GNU」「UNIX」「Perl」「CGI」について検索後、
適切な比喩を再度考え直して下さい。
0764nobodyさん02/10/06 08:40ID:???
>>757
メインCGIから$incfn{'ファイルを受け取るキー名'}
でファイル名自体にアクセスできる。
イレギュラーで気持ち悪い利用に仕方でよければ。
0765nobodyさん02/10/06 09:57ID:???
>763
>「GNU」「UNIX」「Perl」「CGI」について検索後、
>適切な比喩を再度考え直して下さい。
ばーかばーぁ
0766nobodyさん02/10/06 13:01ID:???
掲示板で、ログファイルをダウンロードさせようとしているのですが

print "Content-type: zip/i\n\n";
print;

このようにブラウザで表示しないコンテンツタイプを与えているのですが
unixだと動くのですが、Winだと空ファイルになってしまいます。

よい方法はございませんでしょうか?
0767nobodyさん02/10/06 13:08ID:???
おまいら暇だな!
0768nobodyさん02/10/06 18:31ID:93CgaJbg
SQLはわかりますが全くの初心者です。
CGIでできることを(商品注文フォーム、カート)などをあえてPHPや
CFでやりたいと思いますが、どっちの方が初心者に易しいでしょうか?
0769nobodyさん02/10/06 19:09ID:???
>>766
http://pc.2ch.net/test/read.cgi/php/1032704121/l50

>>768
http://pc.2ch.net/test/read.cgi/php/1006006800/l50
0770nobodyさん02/10/06 19:14ID:MFc5Z8S/
>>768
CFってなんだ?sendmailか?
0771nobodyさん02/10/06 19:17ID:TUOpefL4
質問。
ファイルの削除をしたかったので
$deletecount = unlink( $DeleteFileName );
こう書いたんですが反応なし。戻り値も0。
ファイル名は相対パスで正しい。
削除できない理由は何でしょう?
0772nobodyさん02/10/06 19:44ID:???
>>770
http://pc.2ch.net/test/read.cgi/php/988191427/

>>771
unlink の戻り値の意味は分かってるんだよね?
-f $DeleteFileName が真なら大抵↓が原因だと思う。
ttp://www.begi.net/linux/reading/linux_basic_knowledge/permission2.html
0773nobodyさん02/10/06 19:47ID:???
>>771
あんたは誰。ファイルの所有者は誰。ってこと。
077477102/10/06 19:54ID:TUOpefL4
>>772
レスありがとうございます。
しかし。読み書きできて削除が出来ないということがありますか?
削除できないのでしょうがなくこうしました。
 open( OUT, "> $DeleteFileName");
 close( OUT );
こう書くとちゃんとファイルサイズを0(ゼロ)にはできるんですけど。
ちなみに、削除したいファイルは同じcgiが過去に吐いたファイルです。
0775nobodyさん02/10/06 19:56ID:E7XA3HNJ
WAS4.01でWebアプリ作ってまっす。

JSPが途中で切れてコケます。
でもプロキシ通して同じJSPを表示させると切れません。
なにか考えられることってありますか?
077677102/10/06 20:14ID:TUOpefL4
試しにフォルダもファイルも全て777にしてみたのですが変化無し。
パーミッションの問題ではないような‥‥?
ftpから削除することは可能です。
0777nobodyさん02/10/06 20:34ID:MFc5Z8S/
>>776
たぶん、なにか見落としがあるんだよ。
単純にテストするだけのスクリプト書いて実行してみ。
ファイル名も変えて、相対パスもやめてカレントでopen,unlinkを実行。
0778nobodyさん02/10/06 20:45ID:???
>>775
http://pc.2ch.net/test/read.cgi/php/984840356/l50

>>776
unlink 後の $! は確認した?
077977102/10/06 21:04ID:TUOpefL4
>>777-778
うおー!
$!をprintしてみたら"No such file or directory"でした!
しかし、なぜだっ!?
if ( -e "$DeleteFileName" ) {
 print "$DeleteFileName は存在します。" ;
} else {
 print "$DeleteFileName 存在しません。" ;
}
としてみたら、たしかに「存在しません。」のほうがprintされるけど。
なぜだっ?!
なぜ書き込みは出来るのか‥‥?
カレントのファイルを扱うようにしてみましたが症状は改善してません。
んでもこれで手がかりが見つかったような、気が。
ありがとうございます。もーちょい研究してみます。
078077502/10/06 21:04ID:E7XA3HNJ
誘導ありがとうございました。
そのスレ死んでましたのであきらめます^^;
078177502/10/06 21:08ID:E7XA3HNJ
あ、なんでPerlのコーナーに書いてしまったんでしょう・・・
逝ってきます。
078277102/10/06 21:08ID:???
わ、わかりました。鼻水が出ました。
ファイル名の最後に空白文字が入ってました。
printさせても見えないから気付きませんでした‥‥。
ありがとうございました‥‥。
078377102/10/06 21:09ID:???
(ファイル名ってのは$DeleteFileName変数のほうのこと、です)
0784 ◆hMJAPH9PWA 02/10/06 21:22ID:???
print "[$var]"とするのは基本ですね
0785nobodyさん02/10/07 00:46ID:???
>>784
同意
0786nobodyさん02/10/07 01:01ID:???
うわぁ
>>784=>>785
0787 02/10/07 11:09ID:???
複数のtxtファイルを読み込んで、txtの中身を並べたひとつのhtmlで
書き出すというのをやっているんですが、ファイルの更新日の新しい順に並べて出力したいんです。
stat()[9]の値を比較するんだと思うんですけどアホなのでそこから先に進めません。。
0788nobodyさん02/10/07 11:49ID:???
>>787
一個ずつ開いて、ファイル名とstat()[9]をハッシュに入れて閉じる。
foreachでハッシュをvalueでsortしながらkeyをopenで
開きつつprintする。
0789nobodyさん02/10/07 11:54ID:???
一回ごとにclose FILEしないとファイルが壊れるかも知れんので
注意汁。
0790nobodyさん02/10/07 11:57ID:???
>>787
こんな感じか?

my(@f_list,%files);
opendir(DIR,'.');@f_list = readdir(DIR);closedir(DIR);
foreach(@f_list){next if(/^[\.]+$/);$files{-M "$_"} = $_;}
foreach(sort {$a<=>$b} keys %files){
open(TXT,"$files{$_}");
while(<TXT>){
print;
}
close(TXT);
}
0791nobodyさん02/10/07 12:53ID:UDwaJ+AD
cronというのを調べようと思ったんですが
自分の持っている本独習perl、実践入門perl、CGI&Perlポケットリファレンスには
cronなど載っていませんでした。なぜでしょうか。
0792nobodyさん02/10/07 12:54ID:???
>>790
( ´,_ゝ`) プッ
0793 ◆hMJAPH9PWA 02/10/07 12:55ID:???
>>787
こんな感じ?
>>790とは違って先頭がピリオドで始まるファイルは全てスキップするけど。
opendir DIR, '.' or die $!;
foreach (sort { (stat $b)[9] <=> (stat $a)[9] } grep{ not /^\./ } readdir(DIR) ){
open IN, $_ or die $!;
# 適当に加工して出力
close IN;
}
closedir DIR;

>>790
/^[\.]+$/という正規表現は読みにくいよ。/^\.+$/で十分。
0794 ◆hMJAPH9PWA 02/10/07 12:59ID:???
>>791
Perlとは何の関係も無いからね。書籍ならUnixのコマンドリファレンス系で調べてみてね。
あとはGoogleね。
0795nobodyさん02/10/07 13:12ID:???
my %files;

opendir(DIR,'.');
while (readdir(DIR)) {
$files{$_} = -M $_; if !-d $_;
}
closedir(DIR);
foreach(sort {$files{$a}<=>$files{$b}} keys %files){
if (open(TXT,$_)) {
print while (<TXT>);
close(TXT);
}
}
0796nobodyさん02/10/07 13:17ID:UDwaJ+AD
>794
調べたらUNIXで使えると書いてありましたが、自分はwindowsなんですけど
無理ってことですか?CGIを自動で動かしたいんですけど。
プロバイダーも許してるところが少ないらしいし。。
0797nobodyさん02/10/07 13:17ID:???
>>795
( ´,_ゝ`) プッ
0798 ◆hMJAPH9PWA 02/10/07 13:35ID:???
>>796
ごめんなさい、Windowsで同等の機能を持つものはわりません。
0799 ◆PxAOHU.zVE 02/10/07 15:03ID:???
>>787
use IO::File;
use IO::Dir;
my %date;

my $dh = new IO::Dir('.') || die;
for(sort {($date{$a}||=-M $a) <=> ($date{$b}||=-M $b)} grep -f $_ , $dh->read ){
my $fh = new IO::File($_) || next;
print <$fh>;
}

>>792,797
( ´,_ゝ`) プッ
0800 ◆PxAOHU.zVE 02/10/07 15:13ID:???
>>793
statやファイルテスト演算子はコスト高いのでキャッシュしたほうがよいと思う
>>795
キャッシュするのはいいけどループが無駄だと思う。
>>796
at --help
0801nobodyさん02/10/07 15:25ID:???
>>800
grep使うほうが無駄
っていうか、grep自体ループしてまわしてるのと変わらん
ファイルハンドルはwhileで一行づつ処理するのが
一番速いし、メモリーも食わない
print <$fh>とかが一番最悪

{($date{$a}||=-M $a) <=> ($date{$b}||=-M $b)}
はさらに無駄
ファイル演算子はコストでかいのよ
これだと、二回呼び出してるでしょ


Perl厨の自己満足オナニーコードにはほんと辟易するね
0802nobodyさん02/10/07 15:34ID:???
perlのLWPモジュールでいくつかのHPを取得するとこまで
できたんですが、ファイルに保存しないで、ストリーム
っていうのかな、流れてきた文字列に日本語の単語一語の
検索かけて、それが入ってる文(。から。まで)だけを取
り出すようなことできますか?
よろしくおながいします。
0803 ◆hMJAPH9PWA 02/10/07 15:40ID:???
>>800
なるほど確かにstatの結果はキャッシュするべきだね。

>>801
まあまあ落ち着きなさいって。
確かにprint <$fh>は好かないけど、
{($date{$a}||=-M $a) <=> ($date{$b}||=-M $b)}
これは問題ないでしょ。一度statしたファイルに対しては二度とstatしないから、
必要最低限のstatしか行わないよ。
080480102/10/07 15:46ID:???
>>803

なるほど、||=か...
っていうか、最初にキャッシュするのと変わらないような
一行にしたいだけか
0805nobodyさん02/10/07 15:49ID:???
えっと、あの、そこで>>802にお答えいただけましたら、っと、
幸いでござります。
0806 ◆hMJAPH9PWA 02/10/07 15:55ID:???
>>802
CGIスレで質問したってことを一言断った方がいいかも。私は気にしないけどね。

LWPで"getline"相当のことは難しそうなんで、一旦splitするのが無難かなぁ。

my $contents = $res->as_string();

foreach (split /\n/, $contents) # while(<IO>)みたいなもの。ただし改行は含まれない
{
print $_, "\n" if /pattern/;
}

またはIO::Scalarを使うとか。

use IO::Scalar;

tie *SH, IO::Scalar => \$contents;
while (<SH>)
{
print if /pattern/;
}
0807 ◆hMJAPH9PWA 02/10/07 16:00ID:???
>>805
そんなに急ぎの質問?
皆ボランティアで答えてるんだからもう少し気長に待ってもいいんじゃないのかな。
0808nobodyさん02/10/07 16:02ID:???
>>806
どもCGIでレス待ってたんですが途切れちゃったもんで。
いやー、お詳しいですね。2通りのやりかたでやってみる
ことにします。どうもありがとうございました。感謝の
気持ちです。m(_ _)m
        /\
       /イヨー \
      /大統領! \
0809nobodyさん02/10/07 16:04ID:???
>>807
あ、絵を書いてる間にレスしてくださったんですね。
はい、時々言われます。せっかちな性分なんです。
すみませんでした。
0810nobodyさん02/10/07 16:14ID:???
うわー、すばらしいお答えいただいといて申し訳ないですが、
よく見てみますと、>>806では、受け取ったHPを$contentsとか
<SH>に格納するんですね。これが大容量になると(例えば100
ファイルとか)、やはりまずいかなーと。大きさはかって制限
すればいいことはいいですが。
漏れが考えてたのは、cat file | grep "string" みたいに、
ストリームで処理できないかなーということだったんです。
それは無理ですか。
0811nobodyさん02/10/07 16:18ID:???
>>810
たびたびスレ汚しスマソ。考えてみたら、受け取ったファイル1個
毎に上の処理すればいいので、>>806でできそうです。ありがとう
ございました。
081278702/10/07 16:36ID:???
皆さんありがとうございます。
いろいろ試してみます。
0813 ◆PxAOHU.zVE 02/10/07 18:34ID:???
>>801-804
Perl厨の自己満足オナニーコードですみませんでしたm(__)m



0814nobodyさん02/10/07 23:24ID:???
@files =
map { $_->[ 1 ]}
sort { $a->[ 0 ] <=> $b->[ 0 ]}
map{ [ (stat $_)[ 9 ], $_]}
@files;
0815nobodyさん02/10/07 23:48ID:???
perl -MCPAN -e shell
を実行した時に、初回だけ、ミラーサイトを選択するメッセージが出ますが、
後から、そのミラーを変更したい場合は ~/.cpan/ 以下のどのファイルの
どのエントリーを変更すればいいのでしょうか?
ほしいファイルが今のミラーにないようで、困っております。
0816nobodyさん02/10/07 23:50ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0817_gunzip ◆eiH/XdoCNg 02/10/08 01:24ID:???
>>815
/usr/lib/perl5/5.8.0/CPAN/Config.pm を $HOME/.cpan/CPAN/MyConfig.pm
にコピーし、`perldoc CPAN`の"CONFIGURATION"セクションを参考にしつつ適切に書き換えてください。
0818nobodyさん02/10/08 13:12ID:???
Test::Exception というモジュールがどうしてもインストールできません。
1.---- Unsatisfied dependencies detected during [A/AD/ADIE/Test-Exception-0.12.tar.gz] -----
とエラーがでる
2.Test::Exceptionをmake testして失敗した後、Sub::Uplevelというのを
make testして Test returned status 1 (wstat 256, 0x100)という結果になって
3.再度Test::Exceptionをmake testして
    /usr/bin/make test -- NOT OK
    Running make install
    make test had returned bad status, won't install without force
となって終了します。どなたか同じこと経験された方いらっしゃいませんか?
0819nobodyさん02/10/08 13:55ID:1one6uxb
[0-9]+ これだと数字が1文字以上続いた場合ですけど
数字が5文字以上続いた場合はどう書けばいいですか。
0820nobodyさん02/10/08 14:02ID:???
>>819
[0-9]{5,}
\d{5,}
0821nobodyさん02/10/08 14:07ID:???
>>119
[0123456789][0123456789][0123456789][0123456789][0123456789]+
0822nobodyさん02/10/08 14:23ID:???
>820
ありがとうございます。
0823nobodyさん02/10/08 14:41ID:???
>>119
[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]*
082482102/10/08 14:45ID:???
>>822
俺にも例を言え。
ついでに>>823には隷を。
0825nobodyさん02/10/08 16:31ID:???
>>824
[0123456789][0123456789][0123456789][0123456789][0123456789]+
これは長くて、コードは短いほどいいと思うんですけど、
[0-9]{5,}とどっちが優れてるんですか?
0826nobodyさん02/10/08 16:44ID:???
すいませんここで質問していいのか良く分からないのですが。
画像アプローダみたいな物を作りたいのです、
アップロードまではperlでできるというようなことはわかりました。
そのあと、jpgの画像をサーバー内で縮小させたりしたいのですが、
どんなものが必要ですか?
0827nobodyさん02/10/08 16:51ID:???
>>825
>>824はネタれす。ネタニマジレス、アリガトン
コンパイルされるときは同じになるんじゃないかな。
省略記法の方が遅くなることえてしてあり。

0828nobodyさん02/10/08 16:53ID:???
>>826
何で縮小してから送んないの?

0829 ◆hMJAPH9PWA 02/10/08 17:03ID:???
>>818
私はWinだけど、問題なく成功してしまったなぁ…。
とりあえず、OSとPerlのバージョン、何のテストが失敗したか
くらないとアドバイスのしようがないよ。
0830nobodyさん02/10/08 17:12ID:???
>>818
すみません。
RedHat7.2
perl5.6
perl -MCPAN -e shellにおいて
install Test::Exception 
とした場合に自動実行されるTest::Exceptionのmake testでエラーが出ました。
0831 ◆hMJAPH9PWA 02/10/08 17:35ID:???
s/くらないと/くらいないと/

>>830
いやいや、"エラーが出た"だけじゃなんとも言えないよ。もっと詳しく。

例えば、makeするとこんな感じのログが表示されると思うけど:

C:\Perl5.6\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib\li
b', 'blib\arch')" t\caller.t t\documented.t t\Exception.t t\pod.t t\preserve.t t
\return.t t\stacktrace.t
t\caller........ok
t\documented....ok
t\Exception.....ok
t\pod...........ok
t\preserve......ok
t\return........ok
t\stacktrace....ok
All tests successful.
Files=7, Tests=35, 2 wallclock secs ( 0.00 cusr + 0.00 csys = 0.00 CPU)
D:\bin\dmake.exe test -- OK

この中央の"t\*...ok"(Unixだと"t/*...ok")がモジュールのテストだから、
これらのどれが"not ok"となったか、また"not ok"の後ろに何か表示されたか(あれば)、を書いてね。
0832nobodyさん02/10/08 17:47ID:lB7AvP/O
>>826

GD.pm
0833nobodyさん02/10/08 18:30ID:???
%TV = (
    flintstones => {
        series   => "flintstones",
        nights   => [ "monday", "thursday", "friday" ],
        members  => [
            { name => "fred",    role => "husband", age  => 36, },
            { name => "wilma",   role => "wife",    age  => 31, },
            { name => "pebbles", role => "kid",     age  =>  4, },
        ],
    },
083483302/10/08 18:31ID:???
    jetsons     => {
        series   => "jetsons",
        nights   => [ "wednesday", "saturday" ],
        members  => [
            { name => "george",  role => "husband", age  => 41, },
            { name => "jane",    role => "wife",    age  => 39, },
            { name => "elroy",   role => "kid",     age  =>  9, },
        ],
     },
083583302/10/08 18:31ID:???
    simpsons    => {
        series   => "simpsons",
        nights   => [ "monday" ],
        members  => [
            { name => "homer", role => "husband", age => 34, },
            { name => "marge", role => "wife",    age => 37, },
            { name => "bart",  role => "kid",     age => 11, },
        ],
     },
  );
083683302/10/08 18:38ID:???
これはらくだ3版にあった例ですが、このような複雑なレコードをファイルに
保存して、動的にデーター構造を作る方法について、ご相談があります。

具体的には、アンケート調査で得られた、各団体の属性をperlで処理するために
複雑なレコードデータを、一旦テキストファイルに保存する必要があるのですが、
一般的には、このくらいの複雑さであれば、どのような形式でテキストファイルに
保存するのが一般的なのでしょうか(あるいは、この程度の複雑さであれば単純に
○○使うといい、というものでも結構です)。
私は学生ですし、初めてこのような処理を行うため、
社会人で複雑なデータ構造を構築された経験のある方なら、こういう場合、
どのように判断されるのかなと思い、質問させていただきました。
0837nobodyさん02/10/08 19:10ID:???
MLDBM(http://search.cpan.org/author/CHAMAS/MLDBM-2.01/)このへん?
083882602/10/08 23:09ID:???
>>832
ありがとさん 調べてみます。
0839597 02/10/09 02:56ID:???
>>607
お返事がおくれまいした。おかげさまで、解決いたしました。お手数おかけしました。
すっかり見落としてた……

>うーん。もっとカコイイ方法ないかなあ。
少し内容は変わりますが、
http://www-6.ibm.com/jp/developerworks/linux/011130/j_l-pexcel.html
のexcel-x2.plという例題(Spreadsheet::ParseExcel、Spreadsheet::WriteExcelの例題なのですが)
がすごく参考になりました。
変数を沢山使うのですが、非常に応用できそうなコードだったので、ご紹介しておきます。





0840nobodyさん02/10/09 13:57ID:???
$i = 1;
foreach $value (@value){
 if($i == 11){
  last;
 }
 print $i\n;
 $i++;
}
こうすれば10まで表示したらforeachを抜けますよね?
0841nobodyさん02/10/09 15:46ID:???
>>840
10回ループしたら抜けます。つーか、ループさせる回数が決まっているのなら
foreach を@value でまわさずに$iで書いた方がわかりやすいです。

foreach $i (1..10) {
 print $i, "\n";
}

で、質問はそれだけなの?
0842 02/10/09 16:27ID:???
CGIでWEBにあるhtmlをCGIのあるディレクトリへ保存するスクリプト作ってるんですけど、保存するファイル(html)が50くらいあります。
で、それに1つづつリクエストするわけですが、どう考えても重いんです。
50回リクエストするんだから当然と言えば当然だと思うんですけど、ブラウザで50ページ分開くのと同じですよね。
実際CGIを回したら40ページくらい保存したとこでCGIは「このページは表示できません」となりました。
その間、1分30秒くらいでした。こういうのってやっぱりサーバーに負担がかかるんでしょうか。
どっちにしろこのままじゃ途中でタイムアウトしちゃうので半分くらいに分けて
途中でhtmlを吐き出して、「残りの半分をダウンロード」とかいうボタン付けて続きをリクエストしようと思うんですけどこのやり方はどうですか。
084384002/10/09 16:50ID:???
>841
なるほどそういう書き方もあるのですね。
ありがとうございます。
0844nobodyさん02/10/09 17:04ID:???
>>842
ブラウザのタイムアウトかな?ってきがするんですが
1. 1ページ保存する毎になにかprintするようにする。
2. forkして、プロセス切り離してcgiはいったん終了する
3. そのとおりNページ毎に処理をわける
とかが、結構一般的かと、、、
0845nobodyさん02/10/09 17:37ID:1+Y7R6lC
CGI.pm を使ってCGIを書いています。

my $query = new CGI;
my $value = $query->param("text");

print
$query->header
(
-type=>'text/html; charset=euc-jp'
),
$query->start_html
(
-title=>"値の表示",
-lang=>'ja'
),
$query->h1($value . "の値"),
$query->end_html;

として$valueを取得して表示する場合、
文字コードの扱いはどうなるんでしょう?

自分は、クライアント環境のコードがそのまま
飛んでくるだろうと考えていたのですが、
UNIX上のブラウザから試してもWindows上のブラウザから
試しても化けずに表示されました。

もしかして、CGI.pm は適切に文字コードを変換するところまで
やってくれているのですか?

0846 02/10/09 18:28ID:???
Perl は CGI ではありません。(GNU is Not UNIX)
http://pc.2ch.net/test/read.cgi/php/1032704121/
0847nobodyさん02/10/09 19:09ID:???
>>846
そのスレの一番上に

>※Perlのコーディングに関する質問は専用スレがありますのでそちらでお願いします。
>  ↓
>   Perl 初心者コーナー Part16
>   http://pc.2ch.net/test/read.cgi/php/1032070299/l50

って書いてあるぞオイ(w
まぁ>>845はどちらかというとCGIの話か。
0848nobodyさん02/10/10 04:01ID:MdydjVId
ttp://www.rescue.ne.jp/cgi/form2mail/
↑この添付ファイル対応のフォームメールスクリプトを設置してみたんですが、
添付したファイルが(画像でテスト)、ぐちゃぐちゃになって送られてきます。
小さいのだったら、いけるんですが、大きくなると・・・
で、以前どこかで、httpの仕様で、何kbまでしか云々ってのを読んだんですが、
ソレのせいでしょうか?
考えられる理由を教えていただけないでしょうか?
0849nobodyさん02/10/10 04:46ID:ZvzQ38ZZ
そこのHPの説明書見たら「字数制限あり」とかに設定できるように
なっているよ。誰が設定したのか知らんが、設定した人に字数制限
をしているのかどうか聞いてみたら?
もしもそうなら、画像ファイルをテキストにしたメールが制限に引っか
かって後半がちょん切られいるからぐちゃぐちゃになると思う。

あと、「添付した画像がぐちゃぐちゃになる」なんて言われるよりも
画像にする前のテキストがどうなっているのかを言ってくれる方が
対処しやすい。

それとHTTPの仕様で…なんて話はないです。もしも本当に読んだのなら
そのバカライターをここで晒してくれ。友達に聞いたのなら晒さなくてもいい
けど、100%鵜呑みにするべき人じゃないということです。
085084802/10/10 08:21ID:Z9fpt7At
>>849
設定したのは自分です。
>※1 ファイルアップロード可能 字数制限なし(実際は2^17=131072bytes以内)
><form action="form2mail.cgi" method="POST" ENCTYPE="multipart/form-data">
↑これにしたんで、あってると思うんですが・・・
で、送られてきた画像は、gifなら、
おっしゃるとおり、半分くらいが、ちょん切れてます。
jpegなら、パズルでばらばらにされたようになるんですが・・・
これは、圧縮形式の違いで、両方、破損してるのは、間違いないと思います。

>画像にする前のテキスト
この辺が、おっしゃってる意味が、ちょっとわからないんです。
このフォームを使って何か画像を送り、
送る前の画像と、送った後の画像の拡張子を.txtにして、報告しろ
っていう意味でしょうか?(メチャクチャ言ってたら、ゴメンなさい)

>httpの仕様
そうですか、友達に聞いたとかじゃなくて、掲示板かどこかで、
見たんです。(2chだったかも)
おそらく全く別の話か何かだったんでしょう。スイマセン。
0851nobodyさん02/10/10 08:25ID:???
>>850
送られてきたSTDINを何も処理せずにファイルに書き出して見れ。
085284802/10/10 09:15ID:rBn0TZDO
>>851
main7.gifを送ったんですが、↓この辺のことでしょうか?

-------------------------------7d238f34a0412
Content-Type: application/octet-stream; name="main7.gif"
Content-Transfer-Encoding: X-uuencode
Content-Disposition: attachment; filename="main7.gif"

begin 644 main7.gif
・
・
・
085384802/10/10 09:30ID:Y9RZ82Gy
>>851
>>852は、なんでもないです。
で、その処理する前のモノは、cgiをいじらないと取り出せないのでは?
0854しろうと02/10/10 11:22ID:rv3sQjTv
はじめまして.ちょっと教えて下さい.

web初心者なりにがんばって,アクセス解析用フリーCGIスクリプトのefStat
(ttp://www.skipup.com/~fuka/) というのを設置してみたのですが,アクセス
解析結果の検索ワード欄が文字化けしてしまい,調べてみると,どうも日本語
文字コードを扱うルーチンjcode.plというのが古すぎて,Jcode.pmというのに
変えなければならないということが分かりました.

ところが,闇雲に jcode.pm その他を cgi-bin/fstat/lib/ 下に置き,
fstat.cgi (アクセス解析スクリプト) を実行すると Internal Server Error
になってしまいます.

/usr/local/apache/logs/error_log を見ると,

Can't locate object method "new" via package "Jcode" at lib/start.pl line 62.
Compilation failed in require at /home/****/public_html/cgi-bin/fstat/fstat.cgi line 111.
[Wed Oct 9 15:57:38 2002] [error] [client ***.***.***.***] Premature end of script headers: /home/****/public_html/cgi-bin/fstat/fstat.cgi

こんな感じでした.

サーバはRH Linuxの7.0か7.1程度,Perlのバージョンは5.6.0です.


Jcode.pm利用への手順など,簡単に教えて頂けませんでしょうか?また,サー
バのrootに何かしてもらう必要はありますか?

宜しくお願いします.
085584902/10/10 12:02ID:ZvzQ38ZZ
>>850
画像でもオフィス文書でもメールに添付するときにはMIME BASE64というエンコード
で、テキストに変換しているのです。 Outlook Expressなどのメーラは、そういう生の
データを見る方法があるのかどうなのかしりませんが、

------------92AECG1NXU3WZAT
Content-Type: audio/x-midi;
name=Setup.exe
Content-Transfer-Encoding: base64
Content-ID: <B1i55vjBs7G1k>

TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAA4AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v
ZGUuDQ0KJAAAAAAAAABxdTv8NRRVrzUUVa81FFWvTghZrzEUVa+2CFuvNxRVr90LX68gFFWv3QtR
rzcUVa9XC0avPhRVrzUUVK+OFFWv3QterzoUVa+NElOvNBRVr1JpY2g1FFWvAAAAAAAAAABQRQAA
TAEDAF1Flz0AAAAAAAAAAOAADwELAQYAAMAAAAAQAAAAQAYAQA0HAABQBgAAEAcAAABAAAAQAAAA
AgAABAAAAAAAAAAEAAAAAAAAAAAgBwAABAAAAAAAAAIAAAAAABAAABAAAAAAEAAAEAAAAAAAABAA

添付書類はこういう感じになって普通の文章の後ろについています。
だから、そういったメールを見て、ちょうど何文字くらいで切れているとか
何行くらいで切れているとかというのがわかれば、そこらへんに原因が
あるのかなぁと。
■ このスレッドは過去ログ倉庫に格納されています