• 締切済み

他のサーバーにあるファイルの存在確認をしたい

データを取得するため、他のサーバーにあるファイルの存在確認をしたいのですが、どのようにすればいいでしょうか? ファイルは普通に公開されているファイルです 他の方の質問の回答にもあった if(head "$data"){ use LWP::Simple; $content = get($data); } #$dataは別行でURLを指定してます という方法を試したのですがわざと存在しないファイル名を指定したところtrueが返り、ifの中に入っていって存在しないファイルを取得しようとしてgetでエラーになってしまいましたし、存在するファイル名を指定してみてもやはりifの中に入ってそのままデータの取得ができました (ファイルが存在するしないにかかわらずif分岐がtrueになりました) 他に if(-e "$data"){ use LWP::Simple; $content = get($data); } #$dataは別行でURLを指定してます とやってみましたがこれは逆に存在するファイル名をしていても全てifの中に入っていかずfalseが返ってきました なお、確認したいファイルはcsvです

  • choei
  • お礼率63% (286/451)
  • Perl
  • 回答数1
  • ありがとう数0

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

-e は論外として。 実際にどんな返事が返ってきてるのか、確認したらどうです? ($content_type, $document_length, $modified_time, $expires, $server) = head($data) ; とでもして。 アップローダーとかだと作り方によっては、「エラーということを教える」内容の、HTTP的には「正常なページ」を返す場合もありそうです。

choei
質問者

補足

ありがとうございます。 application/octet-stream 11793 1322747402 Apache がそれぞれ返ってきました $expiresはNull値のようです

関連するQ&A

  • perlチェックでエラーが出て困ってます

    csvファイルが存在するかどうか確認するためif節でheadを使っています $data_hokkaido = "http://denkiyoho.hepco.co.jp/data/juyo_hokkaidou.csv"; if (head "$data_hokkaido" ){ use LWP::Simple; $content = get($data_hokkaido); } こうするとエラーになるのでperlチェックをしてみたところ String found where operator expected at test.cgi line 393, near "head "$data_hokkaido"" (Do you need to predeclare head?) と警告が出ました if節を外して $data_hokkaido = "http://denkiyoho.hepco.co.jp/data/juyo_hokkaidou.csv"; use LWP::Simple; $content = get($data_hokkaido); とするとエラーは出ず、問題なくデータ取得できるので、headに原因があるのだと思いますが、具体的に何が悪いのでしょうか? ちなみに何のデータを取得しているかと言いますと、電力各社の電気予報のデータで、 エラーが出るのは北海道電力ので、同じようにファイルがダウンロードされる形式になっている関西電力部分 $data_kansai = "http://www.kepco.co.jp/yamasou/juyo1_kansai.csv"; if (head "$data_kansai" ){ use LWP::Simple; $content = get($data_kansai); } ではエラーは出ません 理由がお分かりの方ぜひ教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • LWPによるページ取得の問題

    すいません、アホです。いろいろ調べましたが、まったくみつかりませんでした。この質問をすることは初歩すぎて失礼かとおもいますが、堪忍してくださいませ。 LWPで相互リンクをされているかどうかをCGIファイルの登録ページ後に判断したいプログラムですが、同じCGIファイル内に登録ページがありまして、<INPUT size=30 name=url>のように相手リンクを登録した自分のHTMLを書いてsubmitさせて、 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } で、取り出し、$FORM{'url'}まできます。URLがちゃんと$FORM{'url'}に入っているのは画面で確認できるのですが、下記のように指定した場合、相手HTMLを取得できません。エラーメッセージはでないで、真っ白い画面がでます。 $url = $FORM{'url'}; use LWP::Simple; $content = get("$url"); print "Content-type: text/html\n\n$content"; 下記はちゃんとうつります。 $url = 'http://www.yahoo.co.jp'; use LWP::Simple; $content = get("$url"); print "Content-type: text/html\n\n$content"; これは$FORM{'url'}のエンコードの問題なのでしょうか? まことに申し訳ありませんが、その方法をできれば具体的にお教えくださいませ。 何卒、宜しく御願いいたします。m_ _ m

  • LWPモジュールについて教えてください。

    プログラミングは初心者です。 LWPモジュールのサブクラスLWP::Simpleの get()という関数を使いたいです。 現在、Perlは5.005_3を使用しています。 use LWP::Simple; require LWP::Simple; ・ get(URL) と入れると、500 Internal Server Errorと言うものが出てしまいます。 LWPを使うとき、どのようにすれば使えるのかご指導お願いいたします。

    • ベストアンサー
    • Perl
  • perlによるxmlファイルの取得

    あるサーバにあるxmlファイルの内容を取得する為に use LWP::Simple; $url = "http://***/***.xml"; #取得するXMLファイル $text = get($url); 以上の様な方法を用いたのですが、目的のxmlファイルを取得する際のみ、$textに格納される内容が『1文字ごとに半角スペースのようなもので区切られている』という意図しないものになってしまいます。 他のxmlファイルは問題なく取得できるのですが・・・・・・何か特別な方法が必要なのでしょうか。

    • ベストアンサー
    • Perl
  • 別サーバーへの書き込み

    別サーバーのファイルを以下のようにすると、読み込みは可能となりました。 このファイルに書き込むロジックを調べているのですが、 中々見つかりません。 どのようにすれば、書き込む事が出来るのでしょうか。 $url = "http://www.test.jp/test.dat"; require LWP::UserAgent; $ua = new LWP::UserAgent; $request = new HTTP::Request('GET', $url); $response = $ua->request($request); if ($response->is_success) { $content = $response->content; } @DATA = $content;

  • LWP::simpleがiswebで使えない

    use LWP::Simple; print (get("http://www.yahoo.co.jp/")); このように使っていたのですが、iswebにアップロードしたところ、ダウンロード出来ずに使えなくなりました。 iswebでは使えないようです。 なので、これの代わりになる方法を探しているのですが、何かありますか? Webページのソースを取得するだけでいいです。 なにかあるでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • LWPでHTMLが取得できないことがある

    LWPを使ってHTMLを取得しようとしているのですが、取得可能のサイト、不可能のサイトがあります。 たとえばyahooのトップページは取得できますが、wikipediaは取得できません。取得できない場合、エラーメッセージは出ません。 このようになる理由を教えてください。 よろしくお願いいたします。 環境:windowsXP & ActivePerl、またはwindowsXP & cygwin コード: #wikipediaのトップページHTMLを取得する use LWP::Simple; $site = get "http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8"; print $site; #yahooのトップページHTMLを取得する use LWP::Simple; $site = get "http://www.yahoo.co.jp/"; print $site;

    • ベストアンサー
    • Perl
  • ローカルPC上に対象ファイルを自動保存

    Web上にある保存用ファイル (通常、そのハイパーリンクを右クリックして、 「対象をファイルに保存」とするタイプのもの。 テキストファイル以外にもバイナリファイル等もある) をPerlスクリプトを使って、 ローカルPC上へ指定ファイル名で保存させる方法 があれば教えてください。 例えば、(みようみまねですが) 次のようなスクリプトが動いてくれたらと思います。 よろしくお願いします。 ------------------------------------------ #!perl use LWP::Simple; if(@ARGV < 2){ print "Usage: $0 http-addr filename\n"; exit(0); } my $URL = $ARGV[0]; my $SAVEFILE = $ARGV[1]; my $target = get $URL; open(OUT,">$SAVEFILE") || die "$SAVENAME $! stopped"; print OUT $target; close(OUT); 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 他サイトの情報取得

    JavaScriptで、他のサイトの情報を取得することは可能でしょうか? 例えば、PerlでのLWP::Simpleのget関数のようなものを想定しています。 use LWP::Simple; my $buf = get($url); ひょっとしたら、JavaScriptからPerlスクリプト呼び出しが行えるのかもしれませんが、そのへんは全くわかってません。 この疑問の背景としては、 http://www.tagindex.com/javascript/time/watch1.html 上記サイトにあるJavaScript関数disp()内の以下記述  var watch1 = now.toLocaleString(); // ローカル時 この「now.toLocaleString()」の代わりに、他サイトから抜き出した情報を代入したいと思っています。 そして、 setTimeout("disp()", 1000); で、繰り返し表示させる形です。 以上、よろしくお願いいたします。

  • 同サーバー内のファイルの存在確認ができません

    ※説明の為相対パスで書かせていただきます。 ↓本ファイルの設置ディレクトリ /usr/local/apache/htdocs/admin/check.php $img="/home/monky/www/monky.jp/img/1.jpg"; $chk=(file_exists($img))?TRUE:FALSE; ↑とするとエラーがでました。 このPHPとIMGファイルは以下のように、 /usr/local/apache/htdocs/admin/check.php /home/monky/www/monky.jp/img/1.jpg 階層が全然違いますが、同サーバー内です。 fopenやfile_get_contentsなどURLで指定すれば存在確認ができたのですが、動作が遅すぎなので、なんとかfile_existsで行いたいです。 この場合はどうすればうまくいくのでしょうか??

    • ベストアンサー
    • PHP

専門家に質問してみよう