電子書籍の厳選無料作品が豊富!

たとえば
あるファイルhttp://xxx.xxx.xxx/xxx/xxxx.xxx
Perlで*.cgiのあるフォルダにそのファイルを
./yyyymmdd_hhmmss_xxx.xxx.xxx_xxx_xxxx.xxxとして
保存したいのですが

検索してもヘッダがついていたり、そのままな感じだったりして思うようなものは見つからず

Perlではファイル入出力を少しと$ENV{'~'}とか時刻とかしかつかったことがないので
ほとんどわかりません。

環境は
自宅では Windows95でAnHTTPD
サーバーは@PAGESのものです

よろしくお願いします

A 回答 (3件)

同じサーバー内で、ファイルの絶対パスをユーザーが指定するという前提で説明します。



複数の関数を使って可能です。



#!/usr/local/bin/perl

#ドメインの取得(http://xxx.xxx.xxx/
$domain=$ENV{'HTTP_HOST'};

#ファイルアドレスを指定(ドメインの下xxx/xxxx.xxx)
$file='xxx/xxxx.xxx';

#ファイルアドレスを$file2に残す。
$file2=$file;

#/を_に変更
$file=~s/\//_/g;




#日付を指定した形にする
$zisa =0;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time + $zisa * 60 * 60);
$mon = ('1','2','3','4','5','6','7','8','9','10','11','12')[$mon];
$timestring = sprintf("%d%02d%02d_%02d%02d%02d_",1900+$year,$mon,$mday,$hour,$min,$sec);

#くっつける
$file=$timestring.$domain.$file;

print "Content-type: text/html\n\nhhhhhhhhhhhhhhh$file2/$file";

#さいごにファイル名を変更する

use File::Copy 'copy';
copy ($file2,$file );

exit;

この回答への補足

ありがとうございます。

実際は他サーバーのcgiの出力するバイナリとテキストも必要なんです。
むしろ、そっちのほうが主といってもいいくらいなんです。
説明不足ですみません。

補足日時:2011/07/19 15:48
    • good
    • 0

http://perl.wonder-boys.net/?p=222

前の返事の方法で行なうなら自分でヘッダ内容を解読しながら行なえば良いかと。
要するに上のモジュール使う方法の中身を自分で書く感じ。

その場合は、httpのプロトコルを参考にすれば良いでしょう。

http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616

上記ページ6章のレスポンス辺りで決められている値がヘッダの内容として送られてきているはずなので。


ソフトのバージョンは意識しないと欲しい情報が見つかりませんよ。
新しいバージョンに加わった機能をあるものと思って実装してできないと悩む事にもなりかねませんし。
質問にはperlなどと書かずにperl5.8.8とか書いた方が適合したお返事をもらえ易いですよ。


助言を読んで自身で置き換えれば良い話なのですけどね。
    • good
    • 0
この回答へのお礼

遅くなってしまい、すみません
ご回答ありがとうございます。

一応なんとかなりました。

ありがとうございました。

お礼日時:2011/06/22 22:40

「ヘッダがついている」だけならヘッダを自分で取り除けばいいのでは?


あるいは, 「そのままな感じ」ならそのままでいいと思う.

この回答への補足

ご回答ありがとうございます

説明不足ですみません
そのままな感じというのは何らかのライブラリを使う方法で、
そのまま出力するという意味のつもりでした。

ヘッダを取り除く方法は

#HTTP応答を受信
while(chomp($buf=<SOCKET>)){
print "$buf\n";
}

という部分があります

xmlとかだけではなくバイナリの方も扱いたいと考えているのですが
それでもヘッダを取り除くことができるのであれば教えていただけるとありがたいです

補足日時:2011/05/27 15:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!