• ベストアンサー

サーバーのテキストファイルをダウンロード

Webページに「ダウンロード」というボタンかリンクがあり、それをクリックするとローカルコンピュータにWebサーバーにあるテキストファイルをダウンロードできるCGIを作成したいのですが・・・ 以前に同じ質問を上げたら「Content-type: text/download 」としたらいいよ・・・と教えたもらったのですが、もひとつピンとこなくて、簡単なコーディング例みたいなものを誰か教えてください。 それだけわかったら自分でなんとかしろよ!と思われるかもしれませんが小生Perl初心者の為、???なのです。

  • Perl
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

あれれ?うちではうまく行くんですが・・・ 別のHTMLのリンクからCGIを起動してもだめでしょうか? もしかしたら、サーバーかブラウザの問題なのかも知れません。だとすると、申し訳ないのですが分かりません。

souta_n
質問者

お礼

別のHTMLからリンクしたらいけました。 ありがとうございます。 しかしURLをダイレクトにアドレスバーに入力するのとリンクで違うのですね・・・これもびっくり 20ポイントと気持ちだけのヴァーチャルアサヒスーパードライ12缶セットをお送りします。これからもよろしくお願いします。

その他の回答 (1)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

CGIでWebページを出力する時は、 print "Content-Type: text/html; charset=Shift_JIS\n\n"; # この後、ページの内容を出力 みたいにしますよね。 この「Content-Type: ~」というのは、アクセスしてきたブラウザに対してこういうデータを返す(送る)よ、というメッセージなんです。 ブラウザはそのメッセージが text/html だったらHTML文書として表示し、text/download なら保存のダイアログを開く、というわけです。 なので、 #! /usr/bin/perl # ↑自分のサーバ環境に合わせてね open FH, "パス/ファイル名"; print "Content-Type: text/download\n\n"; print <FH>; close FH; のようなCGIを書いて、ダウンロードのリンクやボタンの参照先にしてやればOKです。 ちなみに、ダウンロードするファイル名を指定したい場合は、 print "Content-Type: text/download\n\n"; を print <<__EOH__; Content-Type: text/download; name="ファイル名" Content-Disposition: inline; filename="ファイル名" __EOH__ としてください。(__EOH__の前に、空行が1つ入っています。)

souta_n
質問者

補足

leaz024さん、いつもお世話になります。 え~っと「保存するファイルをTAB区切りにする」のと「文字列の先頭文字を取り出す」という質問に答えていただいて今度は3回目です。本当に助かってます。お中元贈らないと・・・(送り先がわからん!) さて、おっしゃる通り #! /usr/bin/perl # ↑自分のサーバ環境に合わせてね open FH, "./jikken.txt"; print "Content-Type: text/download\n\n"; print <FH>; close FH; とやってみました。CGIファイル名はdl.cgi ダウンロードデータはjikken.txtで、 ローカルコンピュータ上でためしてみたんですが 「Internet Explorerではlocalhost-dl.cgiをダウンロードできませんでした。このインターネットサイトを開くことが出来ませんでした。要求されたサイトが使用できないか、または見つけることができませんでした。後でやり直してください。」 とエラーが表示されます。どうしたもんでしょうか?ローカルでは試せないということでしょうか?

関連するQ&A

  • ファイルのダウンロード

    小生それ程Perlに精通しておりませんので、あんまり難しいコードは理解できません。この間、ひーひー言いながら、このサイトのお力も借り、HTMLフォームからデータエントリするとWebサーバー上のテキストファイルでのデータベースに追加されていくシステムを作ることができました。そこでWebサーバー上にある、テキストファイルをローカルコンピュータにダウンロードするPerlのプログラムコードを知りたいのです。 お力添え宜しくお願いします。

    • ベストアンサー
    • Perl
  • perl cgi 「ファイルをダウンロード」

    perl cgiを作っています。 ファイル(例えば.csv)をperl側で作って、 ユーザがローカルコンピュータのこのみの場所(あるいはwindowsなら「ダウンロード」に固定でも可)にダウンロードできるようにしたいのですが、ダウンロードさせる部分をどうコーディングすればよろしいでしょうか?

    • ベストアンサー
    • CGI
  • 複数のCSVを一度にダウンロード

    いつもお世話になります。 WebサーバーのCSVをダウンロードするのに次のようなCCGIを使っています。 ***************************************** #! /usr/bin/perl open FH, "./data.csv"; print <<__EOH__; Content-Type: text/download; name="data.csv" Content-Disposition: inline; filename="data.csv" __EOH__ print <FH>; close FH; ***************************************** 1つだけならこれでOKなんですが、例えばdata1.csv、data2.csv、data3.csvという3つのCSVをダウンロードさせるにはどのようにコーディングすればよいのでしょう?

    • ベストアンサー
    • Perl
  • テキストファイル内の変数を展開して出力したい

    テキストファイル内に変数を書いておいて、出力時に その変数を展開させる方法を教えてください。 具体的には、[test.txt]を[出力]のようにしたいのです。 ためしに[test.cgi]を作ったのですが[test.txt]の内容がそのまま出てきてしまいました。 [test2.cgi]ができるなら、[test.cgi]でもできると思っていたのですが… [test.cgi] #!/usr/local/bin/perl $moji="OK"; print "Content-type: text/html\n\n"; open(IN, 'test.txt'); while (<IN>) { print "$_"; } close(IN); exit; [test2.cgi] #!/usr/local/bin/perl $moji="OK"; $naka="<HTML><BODY>$moji</BODY></HTML>"; print "Content-type: text/html\n\n"; print "$naka"; } close(IN); exit; [test.txt] <HTML><BODY>$moji</BODY></HTML> [出力] <HTML><BODY>OK</BODY></HTML>

    • ベストアンサー
    • Perl
  • CGI設置時に500エラーになります

    CGIを設置しようとしたところ、500 Internal Server Error になります。 共用サーバーIDを使用しています。 CGIファイルは「cgi-bin」の中に入れています。 たとえばこんな簡単なCGIでテストしたのですが、500 Internal Server Errorになってしまいます。 ↓ #!/usr/local/bin/perl print "Content-type: text/html \n\n"; print "Hello"; #!/usr/local/bin/perlを #!/usr/bin/perlにしても結果は同じです。 (サーバーの指定は#!/usr/local/bin/perl) パーミッションは755にしています(705に変えてもダメでした)。 CGIファイルの改行コードはLFにしており、テキスト(ASCII)モードでアップロードしています。 それでも500 Internet Server Errorになります。 サーバーではエラーログが見られないのでみなさんにお聞きしたいのですが、他にどんな原因が考えられるでしょうか?

  • テキストファイルをダウンロードする時

    WEB上のテキストファイルをダウンロードするとき 「ファイルをダウンロードする」ダイアログが出ると思いますが、 ダイアログが出ないで、IE上でテキストファイルが 開いてしまいます。 ローカルで保存したいので対処法を教えてください

  • サクラのレンタルサーバーです。CGIが動きません

    サクラのレンタルサーバーを借りました。 早速CGIを試そうと思ったのですが、原因不明のInternal Server Errorが出ます。 cgi-binはいらないとのことですので、wwwにそのまま入れました。 index.htmlも同じ場所にありそれは出ますのでパス間違いではないです。 またパーミッションも777にしてみましたが駄目です。 #!/usr/local/bin/perl print "Content-Type: text/html\n"; print "\n"; print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; こんな感じで、TELNETでログインして実行も出来ます。 bash-2.05b$ ./index.cgi Content-Type: text/html <html><body>abc</body></html>bash-2.05b$ いろいろ調べたのですが ◆パーミッション→OK ◆TELNETで実行してみる→OK ◆perlへのパスは?→/usr/local/bin と /usr/bin どちらでもいいそうです。験しに変えましたが状況変わらず。 何か気が付いたことがあれば教えてください

    • ベストアンサー
    • CGI
  • サーバを移行したのですが、プログラムが動きません。

    はじめまして。 Perl超初心者です。 先日、あるサイトのリニューアルをし、PHPでシステムを組んだのですが、一部のコンテンツに関しては、前の業者がPerlで組んでいたシステムをそのまま転用することになりました。 そこで、以前のデータを貰って、サーバのcgi-binのフォルダにそれらのデータをコピーし、関係すると思われるファイルのパーミッションを、755にし、 また、以前は、ファイルの一行目が、#!usr/local/bin/perl だったのですが、 これを、#!usr/bin/perl に修正しましたが、動いてくれません。 Internal Server Error と出てしまいます。 試しに、単純な text.cgi #!/usr/bin/perl print "Content-Type: text/html\n\n"; print "OK"; というファイルを置いてみたのですが、これは動いています。 ちなみに、移行しなければならないcgiファイルは、プログラムの中で、.pl ファイルを複数読み込んでいるのですが、このファイルのパーミッションは、755で良いのでしょうか? また、このプログラムでは、 cgi-bin のディレクトリから、 data というディレクトリの中にある.datファイルを読み込むはずなのですが、このdataというディレクトリは、cgi-binと同階層に置けばよいでしょうか? Internal Server Errorというエラーは、どういうときに出るエラーなのでしょうか? 色々ファイルを操作しても、このエラーしか出ないので、どう対処してよいかよく分かりません。 不勉強で大変心苦しいのですが、 ご回答よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ダウンロード時のファイル名文字化け

    nakamuraと申します。  あるweb上のリンクからファイルをクライアント側にてダウンロードするプログラムを作成しました。リンクからcgi(Perl)を起動してそのcgiからファイルダウンロードを実行します。cgiを起動する際、日本語ファイル名(euc)を渡して、それをcgiよりsjisにコンバートしてからダウンロードを実行させています。ある特定の文字だけ文字化けする現象が発覚しました。ある特定の文字とは、ラリルレロワヲン です。このどれかが一つでも入っているとファイル名が文字化けしてしまいます。他にもあるかもしれませんが、自分が見つけたのはこの文字です。  ちなみに、リンクを右クリックで、対象をファイルに保存だと、ファイル名は文字化けしません。  色々ネットで調べたのですが、対応方法がとんとわかりませんでした。ASP、java等の対応方法はいくらでもあるのですが、cgi(Perl)の対応方法が見つかりません。 どなたかご存知の方いらっしゃいますでしょうか。 ちなみに サーバ側 OS:Red Hat Enterprise Linux ES release 4 (Nahant Update 4) cgi(Perl):5.8.5 クライアント側IE:6.0SP2 念のため下記にコードを記します。 #!/usr/local/bin/perl require '../cgi-lib.pl'; require '../jcode.pl'; &ReadParse(*in); # パラメータを変数に代入する。 #日本語ファイル名 $JPFileName = $in{'JPFileName'}; #ファイル保管ディレクトリの絶対パス $FileStoragePath = '/html/file/'; #日本語文字列の変換 &jcode'convert(*JPFileName, 'sjis'); &outputFile(); exit(0); sub outputFile { $FHND = "<$FileStoragePath/$FileName"; if (open FHND) { print ("Content-type: Application/octet-stream\n"); print ("Content-Disposition: inline; filename=\"$OriginalFileName\"\n\n"); while (<FHND>) { print $_; } close FHND; } else { ~エラー表示のためのhtml表示~ exit(0); } }

  • さくらレンタルサーバーでのCGI設置について

    さくらレンタルサーバー(スタンダード)を使って、HPを作成しています。 そこで、HP検索CGI(Free)を設置しようとしたら、500エラーがでて先に進みません。 使用したHP検索CGI(Free)は、Web Search Ver 2.03です。 URL: http://www.web-liberty.net/download/search/index.html#setup perlファイルのコマンドパスは、/usr/bin/perl と /usr/local/bin/perl パーミッションは705、755共にエラーでした。。 送信もアスキーモード(テキストモード)で行いました。 両方を試しましたがエラーでした。 何が原因なのでしょうか? ソース自体はダウンロードしてコマンドパスと『検索開始ディレクトリの相対パス』と『検索開始ディレクトリの絶対パス』以外、いじっていないので、ソースが壊れているということはないと思います。 お手上げ状態で困っています。 助言をお願いいたします。

    • 締切済み
    • CGI

専門家に質問してみよう