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

Perlコーディング初心者質問スレ Part 50

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/06/26(月) 00:46:38ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0002nobodyさん2006/06/26(月) 00:47:26ID:???
関連スレ
CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/

【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/

【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/

★負荷軽減対策委員会(Perl、PHP)★
http://pc8.2ch.net/test/read.cgi/php/1034645635/

Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/

CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/

★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1143834740/

【 スクリプト改造依頼スレ 】(丸投げ) part5
http://pc8.2ch.net/test/read.cgi/php/1141174205/
0003nobodyさん2006/06/26(月) 00:48:09ID:???
[過去ログ] 1 of 5

Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
0004nobodyさん2006/06/26(月) 00:49:09ID:???
[過去ログ] 2 of 5

Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
0005nobodyさん2006/06/26(月) 00:49:50ID:???
[過去ログ] 3 of 5

part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
0006nobodyさん2006/06/26(月) 00:50:46ID:???
[過去ログ] 4 of 5

part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/
part38 http://pc5.2ch.net/test/read.cgi/php/1097158988/
part39 http://pc5.2ch.net/test/read.cgi/php/1101522903/
part40 http://pc5.2ch.net/test/read.cgi/php/1106816922/
0007nobodyさん2006/06/26(月) 00:52:13ID:???
[過去ログ] 5 of 5

part41 http://pc8.2ch.net/test/read.cgi/php/1110383236/
part42 http://pc8.2ch.net/test/read.cgi/php/1116970588/
part43 http://pc8.2ch.net/test/read.cgi/php/1123777607/
part44 http://pc8.2ch.net/test/read.cgi/php/1129477637/
part45 http://pc8.2ch.net/test/read.cgi/php/1134049707/
part46 http://pc8.2ch.net/test/read.cgi/php/1137518266/
part47 http://pc8.2ch.net/test/read.cgi/php/1141195171/
part48 http://pc8.2ch.net/test/read.cgi/php/1146042050/
part49 http://pc8.2ch.net/test/read.cgi/php/1149017548/ (前スレ)

part44-621氏による過去ログ倉庫
ttp://user.ftth100.com/mirrorhenkan/perl/
0008nobodyさん2006/06/26(月) 00:53:27ID:???
ム板Perlスレより 1 of 2

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/

[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/

[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.8/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0009nobodyさん2006/06/26(月) 00:54:30ID:???
ム板Perlスレより 2 of 2

[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm

[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0010nobodyさん2006/06/26(月) 01:02:34ID:???
>>1
乙つつつ
0011nobodyさん2006/06/26(月) 10:30:20ID:???
>>11

おちかれー
0012nobodyさん2006/06/26(月) 20:55:18ID:???
1000取っちゃった。
オブジェクト指向より、いい指向ってないのかな。

大き目のプログラム組んで何ヶ月か、又は何年か後に見てみたら
全体の流れとそれぞれの処理を理解するのに数日かかってしまうのがいや。
これはオブジェクト指向とは無関係だけど。

プログラムを専門にやってないから思い出すのとあわせて、いつも
「なんでこんなイケてないんだこれ」
と自己嫌悪に陥る。

オブジェクト指向ってモジュールとか確かにべんりだけどさ。
完ぺき主義というか極端な自分としては全てをオブジェクト指向的にやろうとして、
うんざりする。

もっといいやりかたないのかね。

うんスレ違いだ。すみませんでした。
0013nobodyさん2006/06/26(月) 21:30:04ID:???
>>12
それはプログラムの組み方の問題なんじゃないのかなあ。

プログラム組むときって、ノートに処理の流れとかメモするでしょ?
テキストエディタとかで
編集
 |- 検索
    |- 次を検索
    |- 前を検索
とかってあるけど、これもオブジェクト指向といえばオブジェクト指向だし。
編集::検索->次() みたいな。

これで例えば 「次を置換」 とか改造して入れるために、また一からプログラム全体を把握し直さなきゃわかんない、とかそーないと思うんだけど。
なんか変なとこにこだわりすぎてんじゃない?
0014nobodyさん2006/06/26(月) 21:48:52ID:???
>>12
> 完ぺき主義というか極端な自分としては全てをオブジェクト指向的にやろうとして、
> うんざりする。
> もっといいやりかたないのかね。

Ruby 使っとけ。
0015nobodyさん2006/06/26(月) 22:04:56ID:???
質問。
sub noward {
local($flag);
foreach ( split(/\s+/, $no_wd1) ) {
if (index("$in{'name'} $in{'sub'} $in{'comment'}",$_) >= 0) {
$flag = 1; last;
}
}
if ($flag) { $err .= "不適切な文字が含まれています。"; }
if ($err) { &error($err); }
}
禁止ワードのサブルーチンなんだけどコレを改行で区切る事が出来ないのだがどうすればいいのか教えてほしい。
お願いします。
0016nobodyさん2006/06/26(月) 22:19:27ID:???
その前に、何を改行で区切りたいのでしょうか?そこが分かりません。
文からするとサブルーチンを改行で区切りたいように読めるけど…。
0017nobodyさん2006/06/26(月) 23:07:40ID:???
kentっぽい書き方だな
0018nobodyさん2006/06/26(月) 23:26:42ID:???
いまどきmyですむようなところにlocalだしな。

悪い癖をおぼえる前にもう少しましな手本を探したほうがいいような
気がする。

0019nobodyさん2006/06/26(月) 23:38:21ID:???
kentはそろそろ後方互換性じゃなくて
古くてアレなスクリプトを配布する事による弊害を気にした方がいいね。
いまどきperl4だけの鯖なんてないし。
0020nobodyさん2006/06/27(火) 00:04:59ID:???
当方C/C++/VBは使えますがPerlは難しいですか?
以前使っていたレンタル鯖がCのCGIを許可していたので
Cでゴリゴリ書いていましたが、別の業者に移管されてしまい
そこの業者はCのCGIが不可、Telnet不可とCGIが全て使えなくなってしまいました。
昔、ちょろっとPerlの本を見たことがあるのですが、コードがC以上に記号ばかりでゴチャっとしていて
追いにくいなぁと直ぐに本を閉じてしまった記憶があります。
C12年/C++3年/VB5年程です。。
 
0021nobodyさん2006/06/27(火) 00:10:32ID:???
そんだけコード書いてればPerl覚えるのは余裕。
独特の癖があるので人のコードを読むのは苦労するかもしれんが、
書く分には好きなように書ける。

TIMTOWDIバンザイ
0022nobodyさん2006/06/27(火) 01:00:12ID:???
それだけの経験があるなら1週間perlだけ弄ってればすぐに動くものが作れるt思います。たぶん。

sub内でローカル宣言した変数がリファレンス(Cでいうポインタ)で参照できちゃう気持ち悪い部分もあってw、
あまりに自由すぎるのがperlの欠点といったとこでしょか
0023nobodyさん2006/06/27(火) 01:15:43ID:???
とりあえず文字列操作は正規表現メインで。
Cのポインタの概念は無いんで、文字列ポインタ動かしたりはできません。
だからといって文字列は配列でもないので、配列操作にもしないことです。

Cだけの人がとりあえず書いてみたPerlのプログラム読んだ事あるけど
思いっきりCぽくて、全然Perlじゃなかったなあ。

ていうか、Perlのソース読む方が理解が早いかも。
0024nobodyさん2006/06/27(火) 01:38:26ID:???
まず変数の扱いとスコープの違いにつまづいて
次に構文の違い(elsifとかswitchとか)につまづいて
コンテキストの理解につまづいて
関数の仮引数が無いのにつまづいて
リファレンスをポインタだと思い込んでつまづいて

・・・がんばってください。
0025nobodyさん2006/06/27(火) 02:08:24ID:ms3DPBt4
掲示板のプログラムを作っているのですが、
まず、書き込みページを出力して、
データを受け取って文法チェックをして 結果を出力して、
次のデータ受け取りでファイルに書き出しをするプログラムなのですけど、
どうしても原因が見つけれないエラーが出ていて困っています。
ただ、これ自体が大きすぎるので少し違うルートで質問します。

500 Internal Server Error
というのはどのような条件下で出てくるのでしょうか?
細かい説明などをくれるとうれしいです。

それともうひとつ
プログラムやルーチンの文法ミスもないし、ファイルの参照ミスもないのに
ファイル書き込み等をしているどこかでエラーが出てくる場合
どういうミスの可能性があるでしょうか?

ずいぶんと分かりにくくなってしまっていますが、お願いします
0026nobodyさん2006/06/27(火) 02:36:42ID:???
よくこういう質問でるけど、なんで自分でわかんないんだろう?
文法ミスならローカルで実行したときわかるし、
違うなら処理の途中でためしに exit して、どこまでならエラーでないか、って突き詰めていけばわかるよな?

それでもどこもエラーないなら、
print "Content-type: text/html\n\n"; の前に何か print してる、くらいしか思いつかない。

>>25
要するに、知らんがな、ってこと。
ブラウザだけでやってんの? ちゃんとエラー文のせようよ。
0027nobodyさん2006/06/27(火) 02:52:04ID:???
>>25
> ただ、これ自体が大きすぎるので少し違うルートで質問します。

お勧めしません。逆効果です。


> 500 Internal Server Error
> というのはどのような条件下で出てくるのでしょうか?

それが、CGI が何なのかを理解せずに書いたプログラムなら、ほとんどどのような条件下ででも。


> ファイル書き込み等をしているどこかでエラーが出てくる場合
> どういうミスの可能性があるでしょうか?

あらゆるミスの可能性、及び誰のミスでもない可能性があります。
どういうミスかはわかりません。ただ、「誰のミスか」であれば、この場合は控え目に言って 99.8% 程度の確立であなたのミスです。

# 助けてあげたくてもこの質問じゃ何もできないよぅ・・・orz
0028nobodyさん2006/06/27(火) 03:53:29ID:H9M/RMpI
#! c:/perl/bin/perl

# CGIヘッダーの出力
print "Content-type: text/html\n\n";

# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>Hello HTML</title></head>\n";
print "<body><p>こんにちは。これはHTML文書の例です。</p></body>\n";
print "</html>";

というCGIのプログラムがあったんですが
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";はどういう役割をしているんでしょうか??
0029nobodyさん2006/06/27(火) 04:05:08ID:???
HTMLのDOCTYPE宣言。ValidなHTML文書作る時の常識。Perlとは直接関係ない。
板違いなのでWeb制作技術板へ行ってらっしゃい。
0030nobodyさん2006/06/27(火) 04:09:20ID:???
> sub内でローカル宣言した変数がリファレンス(Cでいうポインタ)で参照できちゃう気持ち悪い部分もあってw、

何それ?
0031nobodyさん2006/06/27(火) 04:13:07ID:???
>>30
こういう事かな。レキシカルな $s が外から見える。

sub hoge {
my $s = "ababababa";
return \$s;
}

my $s_ref = hoge();
print $$s_ref;
0032nobodyさん2006/06/27(火) 04:54:57ID:???
それなかったらオブジェクトやクロージャもできないなあw
0033nobodyさん2006/06/27(火) 06:30:44ID:???
>>25
基本的にCGIのエラーは500しか出ません。
パーミッションのミスでも文法ミスでも全て500が出ます。

>プログラムやルーチンの文法ミスもないし、ファイルの参照ミスもないのに
>ファイル書き込み等をしているどこかでエラーが出てくる場合
>どういうミスの可能性があるでしょうか?
例えば代入式の途中でexit()で終了した場合なんかは
perlがエラー→何も出力されない→500となったりします。
(が、たぶんそのエラーじゃ無い気がしますが・・・

要するに一度にいっぺんに書きすぎて、デバッグできなくなった状況ですよね。
=c
=cut
という技があるのでそれで半分づつエラーの範囲を絞ってみてはどうでしょうか?
(それ以前に全部コメントアウトしprint "\n\n"だけ書いて動くのかとかも要確認。
それが動けばそこから少しずつ増やしていけば何でエラーが起きてるのか特定できるはず・・・
0034nobodyさん2006/06/27(火) 08:42:29ID:???
>>25
perl -c の結果をうpしてよ。
0035nobodyさん2006/06/27(火) 08:46:11ID:???
>32
static宣言見たいのがあればなぁ・・・と思うわけですよ
0036nobodyさん2006/06/27(火) 09:41:13ID:???
>>35
そこで Tie::Static ですよ。
0037nobodyさん2006/06/27(火) 14:12:21ID:XmLciTUK
1: 自分はこういう事がしたい。
・ファイルがなければ新規にファイルを作成し$dataAを書き込んでから$dataBを書き込む。
・ファイルがあれば(すでに$dataAは書き込み済みなので)$dataBを書き込む。

2: それでこんな風にやってみたが・・・
unless ( -e $file ) {
open ( OUT , "> $file" ) or die;
flock ( OUT , 2 );
seek ( OUT , 0 , 0 );
print OUT $dateA;
truncate ( OUT, tell ( OUT ) );
close ( OUT );
}

open ( OUT , "+< $file" ) or die;
flock ( OUT , 2 );
いろいろ処理
seek ( OUT , 0 , 0 );
print OUT $dateB;
truncate ( OUT , tell ( OUT ) );
close ( OUT );

3: こんなエラーが出て上手く行かなかった。
エラーは出てないんですが、これって同時アクセスがあった場合に
ファイル壊れる可能性ないですか?
他に良い方法があればアドバイスよろしくお願いします。
0038nobodyさん2006/06/27(火) 14:45:28ID:???
>>37
他にもある気がするが、-eしてから>でopenまでの間に割り込まれると壊れるな。
File::Tempで一時ファイルを作ってリネームするとよさげ。
0039372006/06/27(火) 15:20:15ID:???
>>38
やっぱり壊れる可能性ありますよね。

>File::Tempで一時ファイルを作ってリネームするとよさげ。
ありがとうございます。
一度それでやってみます。

他にもアドバイスがあればよろしくお願いします。
0040nobodyさん2006/06/27(火) 15:28:09ID:???
ひとつロック用のファイルを用意しといて

・ロック用ファイルをロック
・ファイル存在チェック
・無ければ生成
・オープン
・処理
・書き込み
・ロック用ファイル閉じ

モジュール使わずコレでどうでしょう
0041372006/06/27(火) 15:47:13ID:???
>>40
アドバイスありがとうございます。

一連の流れを全てロックしてしまえ、ということですね。
ただ、ロックファイル自体が信用できるかどうか怪しい代物なので
ちょっと二の足を踏んでしまいます。
0042nobodyさん2006/06/27(火) 15:55:10ID:cuOoVNQc
HTML内のフォームからファイルと時間を選択させて、
その時間になったら自動で指定ファイルをFTPで別サーバー
へ移動するという処理は可能でしょうか?
Perlでcrontabに書き出すことができればと思いましたが
レンタルサーバーでそれは許可されておりません。

cronを使用せずにperlにより指定時間になっているかどうかを
チェックして時間になっていたらFTPでファイルを移動
するような処理は可能なのでしょうか?

どなたかご存知の方居られましたら宜しくお願い致します。
0043nobodyさん2006/06/27(火) 15:57:12ID:???
http://pc8.2ch.net/test/read.cgi/php/1024795138/
こっち行ったほうがいいかな。
0044nobodyさんNGNG
もうcron関連の質問秋田
0045372006/06/27(火) 16:32:46ID:???
>>40
勘違いしてました。
flockでロックファイルをロックすれば良いだけでしたね。
ロックファイルが残り続けるのがちょっと気持ち悪いですが簡単に処理できるのは良いですね。

>>43
誘導先見ましたが、どちらかと言うとロックの追究が主のようで、例えば
open ( OUT , "+< $file" ) or die;
flock ( OUT , 2 );
いろいろ処理
seek ( OUT , 0 , 0 );
print OUT $dateB;
truncate ( OUT , tell ( OUT ) );
close ( OUT );
このコードのロック自体の有効性についての議論が中心のように見受けました。
わざわざ紹介していただいたのに不躾な言い分ですが、
私は上のようなロックでまず大丈夫という前提に立っているので
誘導先のスレよりもこちらで質問した方が適切だと思いますので
すみませんが、こちらに居させて下さい。
0046nobodyさん2006/06/27(火) 16:38:21ID:???
>もうcron関連の質問秋田
そうおっしゃらずにどうかお願いします。
過去ログ見てみても無かったので…
0047nobodyさん2006/06/27(火) 17:35:31ID:???
過去ログに何度も出てると思うよ。
cron使いたくない(or 知らない)けど定時的に何かしたいってのは。
0048nobodyさん2006/06/27(火) 17:36:54ID:???
>>37
はじめの書き出しの方のseekとtruncateは別に無くても良いと思う
0049nobodyさん2006/06/27(火) 18:26:33ID:???
ファイルをダウンロードした後、サーバ上から自動で消すことって不可能?
Locationでダウンロードするファイルに飛ばした後に
unlinkしてもダウンロードが始まる前にファイルが消えちゃう。
0050nobodyさん2006/06/27(火) 18:29:53ID:???
ダウンロードがきちんとできたかどうか分からないけど
失敗してても消すのならできそう。
0051nobodyさん2006/06/27(火) 18:34:47ID:???
>>49
そこでcronですよ。
削除リストファイルを作ってそこにあるファイルは定期的に起動するcgiで削除する。

で、ファイルのダウンロードはcgiから以外にはできないようにしておく。
一度ダウンロードしたものは2度とできないようにしておく。
0052nobodyさん2006/06/27(火) 18:35:11ID:???
>>50
是非ご教示下さい!
0053nobodyさん2006/06/27(火) 18:40:24ID:???
定期的に削除でいいのか??
Content-type: application/octet-streamで検索
0054492006/06/27(火) 18:49:19ID:???
>>51
やっぱりcronかぁ。
ダウンロード自体の頻度はかなり低い(月に数回程度)ので
すごく無駄な気がしてしまふ・・・。

>ファイルのダウンロードはcgiから以外にはできないようにしておく。
そんなことってできるんスか!?
refererでチェック?でも、簡単に偽装できるから意味ないか。

>一度ダウンロードしたものは2度とできないようにしておく。
これもやり方がさっぱり思い付かない。
パーミッション変更?
でも、いつダウンロードが終了したかは確認できんよな。
これもcron?って、それならパーミッションいじるより削除した方が早いよな。

>>53
ダウンロード頻度が低い、つまり削除の頻度も低いので
定期的に削除というよりは都度削除希望であります。
でも、無理なら仕方ない、といった感じであります。
検索して調べてきます。サンクス!
0055nobodyさん2006/06/27(火) 19:06:41ID:???
そんなに頻度が多くないなら、Location使わずにCGI経由でダウンロードさせるようにすれば?
つまり、CGIがファイルを読み出して出力、全部出力したらファイル削除。

素のファイルには .htaccess などでアクセスできないように設定しておく。
0056nobodyさん2006/06/27(火) 20:19:59ID:???
55の言ってるので出来ますね
print "content-type:MIME-type\n\n";
open fp,"downfile";
print <fp>;
close fp;
unlink "downfile";
ただしMIME typeをちゃんと指定しないと、textで無理やり表示されたり、めんどくさい感じ・・・
あと、ダウンロード→キャンセルでもうファイルが消えてるので、結構使いづらいかも?
.htaccess使うまでもなくパーミッションを600とかにしとけば普通に見えない。

ところで、UPは誰がどういう風にするのかが気になる・・・
それによってはもっといいアイデアがあるかも??
0057nobodyさん2006/06/27(火) 20:42:38ID:???
いや、だから、>>53 が言ったみたいに
Content-Type: application/octet-stream

Content-Type: application/x-download
とでもしてDLさせればいいんでない?
0058492006/06/27(火) 21:36:29ID:???
Content-Type: application/octet-stream
とか初見だったんで最初はよく分からんかったけど。

ファイル読み込み

出力

ファイル削除

で出来ますた!サンクスであります。

>>56
それとほぼ同じ形に収まった・・・2時間以上かけてだけどw
UPは特定の仲間内(?)の任意の誰か、
またはすでにあるログから情報を抽出加工したものを新規ファイルとして作成、
という何とも分かりにくい感じ。深く気にしないでね。

ところで、少し気になったんだけど、
>>53>>55>>56>>57
の言おうとしてる内容はほぼ同じって解釈で合ってるよね??
0059nobodyさん2006/06/27(火) 21:54:28ID:???
合ってる合ってる
0060562006/06/27(火) 22:01:59ID:???
>>57
なるほど、そういうmimeタイプがあるんですね。知らなかったです。
nameを指定するオプションとかも使えそうな感じ・・・(?
0061492006/06/27(火) 22:38:41ID:???
本題とちょっとズレるけど、
open直後にunlinkしても内容は保持されるみたいだね。
てか、UNIXなんかのテンポラリファイル使う場合は常套手段だとか。
>>56の例で言えば、
open fp,"downfile";
unlink "downfile";
print <fp>;
close fp;
って感じだな。
こうした方が、異常終了の際にファイルが消えてないってリスクが減るのでベターなわけだ。
0062nobodyさん2006/06/28(水) 00:23:47ID:???
>>61
お前ぶっとばすよ?
0063nobodyさん2006/06/28(水) 00:32:55ID:???
>>62
やめて
0064252006/06/28(水) 00:51:27ID:Ty2xiiJR
perl -c ではOKでエラーは見つからないです。
localでは、問題が見つからなかったのでサーバにアップロードしたらエラーが出まして
自分が考えれるところを確認しましたが、分からなくなってます。

ttp://hisazin-up.dyndns.org/up/src/11946.txt
再びいろいろといじっているせいで若干おかしなものも混ざっているかもしれませんが、
このような形です。
何の引継ぎなどがない場合には78行目の処理が行われて、
別ルーチンから投稿フォームが出力されます。
その投稿フォームから出力された場合に85行目からの処理が実行されて、問題がなければ
投稿OKかどうかの確認ページの出力
その確認ページからデータを引き継いだら143行目の処理に入るのですが、
143行目の処理の中で
ローカルでは問題なく結果が表示されるのですが、
サーバへアップするとどうしても500エラーとなってしまいます
0065nobodyさん2006/06/28(水) 01:54:52ID:???
こりゃまたけったいなスクリプトがきたぞ
0066nobodyさん2006/06/28(水) 02:00:58ID:???
0067nobodyさん2006/06/28(水) 02:05:10ID:???
500エラーのときは鯖のエラーログ出せよ。

どうせヘッダ出力してないとかそういうのだろうけどな。
0068nobodyさん2006/06/28(水) 02:58:08ID:???
sub nothing_log{
nothing_log: <<<これは一体?
print "その記事はすでに削除されているので書き込みできません\n";
exit;
}
■ このスレッドは過去ログ倉庫に格納されています