• ベストアンサー

複数の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
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 1つのコネクションで送信できるファイルの数は1つだけです。  裏技を使えば1つのコネクションで3つ送信できますが、同時には無理です。  よって、window.open("download.cgi?file=data1.csv","_new"); という JavaScript を3回実行してしまう方法が一番確実でしょう。

souta_n
質問者

お礼

お応えありがとうございます。 無理なら仕方ありません。そんなことが出来たらいいなぁ~と思っただけですから、ダウンロードしたいファイルの数だけボタンをつくります。

その他の回答 (1)

  • iichiho
  • ベストアンサー率37% (416/1114)
回答No.2

3つのファイルを1つに纏めて圧縮して1つのファイルにして、送るというのはできると思います。 下に挙げているのはウェブサーバがUNIXのマシン時の例です。 (ただし、SUNOSとSolarisではtarのオプションの関係でこのままでは動きません。) ------------------------------------------------ #送る3つのファイルの指定をしています $DataFile1='aaa.dat'; $DataFile2='bbb.dat'; $DataFile3='ccc.dat'; #UNIXコマンドを呼び出して圧縮をかけています。 `tar zcvf tmp$$.tgz $DataFile1 $DataFile2 $DataFile3` ##ここから下は引用してます open FH, "./tmp$$.tzg"; #書き換えました print <<__EOH__; Content-Type: text/download; name="data.csv" Content-Disposition: inline; filename="data.csv" __EOH__ print <FH>; close FH; ##付け加え `rm tmp$$.tgz`; #圧縮したファイルを消しています ------------------------------------------------ ただし、CSVファイルが大きすぎるて纏めて圧縮するのに時間のかかる大きなものであるばあい、ホストの負荷によっては、転送を開始するまでに時間がかかってタイムアウトする場合がありますので、注意が必要です。

souta_n
質問者

お礼

おこたえありがとうございます。 >UNIXのマシン時の例です。 ホスティングサーバーを使用しています。多分UNIXサーバーだと思うのですが、私自身はUNIXの知識がありませんのでUNIXコマンドといわれても、はて???という感じです。せっかく教えていただいたのに知識がついていってません。すみません。

関連するQ&A

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

    <環境> PHP4.3.2 Windows2000 PostgreSQL RedHat Linux <求めていること> DBのデータをCSVファイルに書き出し、 ダウンロードボタン押下で ダイアログがアップしファイル保存ディレクトリ選択、保存。 <現在のソース> サーバーにtest.csvファイル作成後、 現在HTMLでダウンロードボタン押下でdownload.phpを呼び出し <input type=button value="ダウンロード" onClick="location.href='download.php'"> ---------------- download.php ------------------- <?php // 1.ディレクトリ指定 //$filename="/test/test.csv"; // 2.ディレクトリ指定なし $filename = "test.csv"; header("Content-disposition: attachment; filename=$filename"); header("Content-type: application/octet-stream"); ?> ---------------- download.php ------------------- 現在、 1番のディレクトリ指定だと downloadというファイルがダウンロードされるダイアログがアップし ダウンロードされます。 2番のディレクトリ指定なしだと もちろん空のtest.csvファイルがダウンロードされます。 実現したいのは/test/test.csvのファイルをダウンロードすることです。 色々なサイトで探してみて試しているのですが 初心者なもので、行き詰まってしまいました。 申し訳ありませんが ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • CSVダウンロードについて

    IIS/perl/oracle お世話になります。 社内の業務ホームページにて、データをダウンロードできるシステムの改造を行っています。 本番環境とテスト環境があり、ほぼ同じような環境にして あります。 なのに、本番環境ではちゃんと”ファイルをダウンロード”という ダイヤログが表示されるのに、同じモジュールをテスト環境にもってくるとダイヤログが出ずに CGI Error The specified CGI application misbehaved by not returning a complete set of HTTP headers. と出ます。perlの-wcオプションをつけてのデバッグでsyntaxはOKと出るし、本番環境で動くことから、スクリプト自体に問題はないと思っているのですが、環境面で何か設定しなくてはいけないことがあるのでしょうか? 念のためスクリプトを載せます。 binmode(STDOUT); print "Content-Type: application/octet-stream; name=\"$fname\"\n"; print "Content-disposition: attachment; filename=\"$fname\"\n"; print "Content-length: $size\n"; print "\n"; (1) print $CSV; close(STDOUT); どうも(1)あたりでこけてるようなのですが・・・。(少なくともbinmode手前まではprintを差し込んで動いているのを確認できています) IISの設定等、あまり詳しくはないので、初心者向けに 教えていただくと助かります。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • DBからCSV出力する方法

    DBのデータをCSVファイルでダウンロードする機能を作成しています。 DBのデータをカンマ区切りで変数に格納するところまではできましたが、CSVでのダウンロード(ダウンロードダイアログ)ができません。 以下が実際の記述ですが、間違いを指摘いただけないでしょうか。 ※$result 出力するデータ全てが,区切りで格納されている <PHPファイル内> $size = strlen($result); $filename = csv_dl.csv; //csvdll header("Content-Disposition: inline; filename=\"".basename($filename)."\""); header("Content-Length: ".$size); header("Content-Type: application/octet-stream"); 以上です。 リターンが遅くなるかもしれませんが、どうかよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpでcsvダウンロードできない

    phpで配列をCSV にしてボタンを押すとブラウザからダウンロードさせたいのですが、 htmlタグで表示した後に、ボタンを押すとブラウザからダウンロードさせるには、以下の ヘッダーをhtmlタグより下につけると、機能しなくなってダウンロードできなくなって しまっています。 どうしたらいいのでしょうか。 header('Content-Type:application/octet-stream'); header('Content-Disposition:attachment;filename=data.csv');

    • ベストアンサー
    • PHP
  • ColdfusionでCSVダウンロード

    Coldfusion10 windowsServer2008 ColdfusionでCSVダウンロードするWeb画面を作成しました。 <cfheader name="Content-Disposition" value="attachment; filename=csvfilename.csv"> valueの値をattachmentすると、ダウロードを完了しても、矢印のアイコンがダウンロード中(砂時計)ままです。 inlineすると、ファイルをダウロード保存せずにファイルを開ける→再度ファイルをダウンロード保存せずにファイルを開けるで画面がフリーズしてしまいます。 何かいい方法があれば教えてください。

  • utf-8のCSVをshift_jisに変換したい

    Perl5.8でCSVをダウンロードできる仕組みをつくっています。 utf-8でコードを記述しているため当然ながらダウンロードしたCSVデータもutf-8です。 しかしながらエクセルでダブルクリックで開く場合どうしてもutf-8だと支障があるため、 shift-jis(もしくはcp932)で開きたいのです。 ダウンロード時に文字とファイルをshift_jisに変換する方法はございませんでしょうか? 以下作成済みのコード ------------------------------------------------------- if(!open(OUT,"$CSV_FILE")){&error('CSVデーターファイルがありません'); } else{ @csvdata=<OUT>; close(OUT); } foreach(@csvdata){ $downloaddata .= $_; } print "Content-Disposition: attachment; filename=$CSV_FILE_NAME\n\n"; print $downloaddata; exit; ------------------------------------------------------- 何卒よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • CSVのダウンロードでエラーメッセージ

    以下のプログラムで、データベースの内容をCSV出力しようとしますが、IE6.0SP2上では、「Internet Explorerでは、接続先サイト名 - XXX.phpをダウンロードできません。このインターネットのサイトを開くことができませんでした。要求されたサイトが使用できないか、見つけることができません。」と表示されます。 対策方法教えてください。 ----------------------------- header("Pragma: cache;"); header("Content-Type: application/x-csv"); header("Content-Disposition: inline; filename=output.csv"); $db=mysql_connect("localhost","***","***"); mysql_select_db("test",$db); $rs=mysql_query("SELECT * FROM master",$db); ------------------------------------------------ ちなみに、以下でも同じエラーです ------------------------------------- header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=output.csv"); ----------------------------------------

    • 締切済み
    • PHP
  • ファイルダウンロード時、正常終了しなかった場合にエラー表示させたい

    Perlを使用し、CSVファイルをダウンロードさせるスクリプトを作りました。 データが大きくなると、回線状況などの問題により、データを全てダウンロード しないままダウンロードが完了してしまう時があるようです。 自分の環境では再現できなかったのですが、途中までしかダウンロードできていないにもかかわらず、正常終了したような顔しているそうです。 全てダウンロードできなかった場合に、ユーザーに対して何かエラーを表示させることはできないでしょうか? print"Content-Type: text/csv\n"; print"Content-Disposition: attachment; filename=register.csv\n\n"; foreach (@data){     print"$_\n"; }

    • ベストアンサー
    • Perl
  • CSVファイルのダウンロードについて

    サーバー上にアップしたcsvファイルにアクセスすると ダウンロードの確認ダイアログが出ずに 画面上にテキストベースで表示されてしまいます。 フォルダオプションの設定で ダウンロード後に開くを確認するのチェックボックスを チェックしましたがうまくいきません。 宜しくお願いします。 ※Webサーバー・・・JRUN4 <-- sample.jsp --> <% response.setContentType("application/octet-stream-dummy; charset=iso-2022-jp"); %> <% response.setHeader("Content-Disposition","inline; filename=aaa.csv"); %> top.location.href=~aaa.csv ← ファイルのフルパス

    • ベストアンサー
    • Java
  • perlでCSV形式ファイルのアップロード

    本日、同じ質問をしたものです。 前回の問題は解決したのですが、ファイルがアップロードできないで悩んでします。 CGIのプログラムは以下のソースです。 #! c:/perl/bin/perl use CGI; # CGIヘッダーの出力 print "Content-type: text/html\n\n"; my ($query,$fileName); $query = new CGI; $fileName = $query->param('fileName'); open(OUT, ">./a.csv"); binmode(OUT); while(read($fileName,$buffer,1024)) { print OUT $buffer; } close(OUT); close($fileName); #ファイルハンドルをcloseしています。 exit ; ファイルは、作られるのですが、中身が書き込まれません。 どなたか教えてください。 お願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう