別サーバのファイル最終更新日を取得するには?
[上に]
[前に]
[次に]
ちぃ
[E-Mail]
1999/07/16(金) 07:07:28
サーバを二つ利用しています。
あちらとこちらのファイルの更新状況を一つのページに表示するにはどうしたらよいでしょうか?
片方はCGI,SSIは使用できません。片方は出来ます。
ふじ
1999/07/16(金) 14:55:59
CGI,SSIを使えるサーバを A 、使えない方を B とすると、
A は B の更新状況を知れますが、B は A の更新状況は知れません。
方法ですが、
HTTP で更新状況を知りたいファイルについて HEAD をリクエストして、
返ってきたヘッダの Last-Modified を解析して表示する、
というスクリプトを A に置いて、CGIなりSSIなりで使えばよろしいかと。
#PerlならLWPを使うか、HTTPダウンローダをどっかから拾って来れば
#自分でソケットいじらなくても出来るでしょう。
ただし、Last-Modified が必ず返って来るとは限らないようです。
返って来ない場合は使えません。
ちぃ
[E-Mail]
1999/07/16(金) 22:21:29
ありがとうございます。しかし,当方初心者につき,よくわかりません。
($mtime) = (stat('filename'))[9];
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($mtime);
このようにしましたが,同一サーバのファイルの更新日は表示されますが,別のサーバのものは表示されません。
'filename' は 'http://www.xxx.or.jp/homepage/xxx.html' と書きました。
さらに詳しく教えていただければ幸いです。
zizz...
[HomePage]
1999/07/16(金) 22:39:45
stat はローカルのファイルの属性を調べる関数です。
URLを入れてもファイルを取りに行ってくれません。
libwwwを使うといいでしょう。
LWP::Simple
のhead($url) で
($content_type, $document_length, $modified_time, $expires, $server)
が返って来ます。
zizz...
[HomePage]
1999/07/16(金) 22:43:09
補足。
LWP::Simple
に関しては
CPANのドキュメントに書いてあります。(英語)
ミラーサイトを一つ挙げておきます。
http://www.ring.gr.jp/archives/lang/perl/CPAN/doc/wwwman/libwww/lib/LWP/Simple.html
ふじ
1999/07/16(金) 23:14:24
LWP::Simple が使えるなら、
use LWP::Simple;
($content_type, $document_length, $modified_time, $expires, $server) = head "http://www.hoge/fuga.html";
($sec, $min, $hour, $day, $mon, $year) = localtime($modified_time);
$year += 1900;
$mon ++;
こんな感じ。
ちぃ
[E-Mail]
1999/07/17(土) 04:43:50
毎度ありがとうございます。
試してみたところ,Internal Server Error が出ました。
ちなみにサーバは,Apache/1.3.6 Server です。
さらに,良いお考えをお聞かせください。
B-Cus
1999/07/17(土) 05:31:14
Internal Server Errorが出たら、その原因を追求するのが筋でしょう。
ローカルで試しました? ログを見ました? evalしました?
eval("use LWP::Simple");
print $@;
そもそもLWPをインストールしてありますか?
なお、libwwwと共に
HTML-Parser
MIME-Base64
Net
の各モジュールを入れてもらうとさらに便利になります。
ところでLWPいいっすね。http/ftpのリンクチェッカが数行で書けた
(リクエスト部分だけね)。ただ、他の人に簡単に勧められないのが欠点。
たいていのプロバイダにはモジュールが入ってないから。
> さらに,良いお考えをお聞かせください。
良くないお考えなら。
$addr = (gethostbyname("www.xxx.zzz"))[4];
$name = pack("S n a4 x8", 2, 80, $addr);
socket(S, 2, 1, 0);
connect(S, $name);
select(S); $| = 1; select(stdout);
print S "HEAD /index.html HTTP/1.0\n\n";
while (<S>){
if ( m/^last-modified: (.*)/i ){
$last_modified = $1;
}
}
close(S);
# http://www.tohoho-web.com/wwwperl2.htm#socket
URL解析も、URLエンコードも、タイムアウト処理も、エラー処理も、
3xxが返ってきたときの処理も全部自分でやるわけ。ちょー面倒。
ちぃ
[E-Mail]
1999/07/17(土) 06:05:31
すみません。初心者なもので,勘弁してください。
perlのコマンドかなんかだと思ってたものですから・・・・・
チェックの仕方もわからないド素人です。
「そんなやつは,CGIを使うな!」なんて言わないでくださいね。
引き続き試してみます。親切なご指導に感謝します。
[上に]
[前に]
[次に]