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

このQ&Aのポイント
  • DBのデータをCSVファイルに書き出し、ダウンロードボタン押下でファイルを保存する方法について
  • 現在HTMLでダウンロードボタンを押下すると、download.phpが呼び出され指定のディレクトリにtest.csvファイルがダウンロードされる
  • ディレクトリ指定なしの場合は空のtest.csvファイルがダウンロードされるが、/test/test.csvのファイルをダウンロードしたい
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数13

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

  • ベストアンサー
  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

Location: ヘッダにリダイレクトするのはどうでしょうか? 要するに、CSVファイルをダウンロードさせれば良いのですよね? 以前、PerlでCSVファイルのダウンロードを行わせた時には、Location: ヘッダと言う、HTTP ヘッダの一つを使ってダウンロードさせました。 header("Location: $filename"); なんて感じで行けるんじゃ無いかと思います。

bakenshibakenshi
質問者

お礼

返事遅くなりました。 Dpopさん、回答ありがとう御座います。 header("Location: $filename"); で試してみましたが、ブラウザにCSVの内容が 表示されるようになってしまいました。 ブラウザに表示されずに、ダウンロードがしたいのです。 OSとかの関連でヘッダ情報がシステムによって 違うかったりすると過去ログで書いてありましたので いろいろと試してみたんですけど、 それも駄目だったので、どうしたものか・・・。

関連するQ&A

  • PHPでのファイルのダウンロードについて

    お世話になります。 タイトルのとおりPHPでファイルのダウンロードを行いたいのですが、 ファイルを保存するというダイアログが出てくれません。 tesuto.php <?php $file="/work/tesuto.csv"; header ("Content-Disposition: attachment; filename=$file"); header ("Content-type: application/x-csv"); readfile ($file); ?> tesuto.phpを実行するとダウンロードされずに、ファイルの中身が表示されてしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP→DB→CSV 「ダウンロードできません」

    DBの内容をPHPを使ってCSVに変換してダウンロードするプログラムを使っています。 プログラム(csv.php)の先頭に header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=output.txt"); header ("Content-Description: File Transfer"); を書いているのですが、いざダウンロードをする画面になるとoutput.csvでなくcsv.phpをダウンロードすることになってしまいダウンロードができません。 表示だけならばっちりでているのですが、、、ファイルタイプがHTMLとなっているのも意味不明です。 だれか助けてください(><

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

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

    • ベストアンサー
    • PHP
  • csvファイルのダウンロード

    phpでサーバーにあるCSVファイルをダウンロードさせる処理で、ファイルをダウンロードするとHTML部分のソースがファイルに書きこまれてしまっています。調べてみたのですが、解決出来ませんでした。お願いします まずサーバーにあるCSVファイルにsqLの結果を書き込み、その後 header ("Content-Disposition: attachment; filename=ファイル名"); header ("Content-type: application/x-csv"); readfile (ファイル名); という処理でダウンロードさせようとしています。 サーバーのCSVはデータの書き込みが成功しているのですが、 そのファイルをローカルにダウンロードして中身を確認すると、 XXX,XXX,XXX XXX,XXX,XXX <html> <head> ・・・ のような内容のファイルになっていました。

    • 締切済み
    • PHP
  • PHPで複数ファイルのダウンロード

    はじめまして、PHPについて質問させていただきます。 PHPでファイルを複数ダウンロードできるようしたいと思っています。 色々調べ、header関数を使用し、以下のように記述すると ファイルのダウンロードは成功しました。 /*****************************************/ // ダウンロードさせる元ファイル(絶対パス) $filepath = 'test_01.pdf'; // 保存時のファイル名(デフォルト) $filename = 'download001.pdf'; // HTTPヘッダ送信 header("Content-length: " . filesize($filepath)); header("Content-type: application/pdf"); header("Content-Disposition: attachment; filename=\"{$filename}\""); // ファイルを読み込んで出力 readfile($filepath); /*****************************************/ 一つのファイルのダウンロードに成功したので、 次に複数のファイルを順番にダウンロードをさせる為にループ処理をしました。 /*****************************************/ //配列 複数ファイル $downfile = array("test_01","test_02","test_03"); //データ数 $max = count($downfile); // ダウンロードさせるディレクトリ(絶対パス) $filepath = "/home/sites/www.eshop-himawari.com/web/test_nihon/form_down/file/"; // 保存時のファイル名(デフォルト) $filename = "download"; $filetype = ".pdf"; $kazu = 1; //ループ処理 for( $i = 0; $i < count( $max ); $i++ ){ $downpath = $filepath.$downfile[$i].$filetype; $filename = $filename.$kazu.$filetype; $kazu = $kazu++; // HTTPヘッダ送信 header("Content-length: " . filesize($downpath)); header("Content-type: application/pdf"); header("Content-Disposition: attachment; filename=\"{$filename}\""); // ファイルを読み込んで出力 readfile($downpath); // $fp = fopen( "$downpath", "rb" ); // @fpassthru( $fp ); } /*****************************************/ しかし実行すると最初のファイルはダウンロードしますが 2つ目からのファイルはダウンロードされませんでした。 きちんとループ処理をされて、2つ目以降のファイルをダウンロード するには、どうすればいいのでしょうか?

    • 締切済み
    • PHP
  • CSV出力

    cakephpにて開発をしています。 CSV出力するためにダイアログを表示したいのですが 表示されず、画面にcsvのデータが表示されてしまいます。 $csv_file = sprintf($this->convert_sjis("テスト_%s.csv"), date("Ymd-hi")); // 適当にファイル名を指定 header ("Content-disposition: attachment; filename=" . $csv_file); header ("Content-type: application/octet-stream; name=" . $csv_file); print($buf); // 出力 readfile($outputFile); phpのソースです。以前はこれでダイアログが表示されたのですが ajaxで呼び出すように修正したあとから画面に出力されるようになってしまいました。なにかご存知でしたらご教示お願いします。

    • ベストアンサー
    • PHP
  • 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
  • csvファイルダウンロード時のファイル名

    いつもお世話になっております。 CSVファイルダウンロード時のファイル名についての質問です。 (CSVダウンロード処理は下記の方法で行っています。) "Content-Disposition","inline;filename=test.csv" CSVファイルをサーバーからダウンロードする際、 ファイルを[開く]or[保存]のダイアログが表示され、 保存を選択し、保存したファイルを表示する場合は、 ファイル名とシート名とに差異はなく、 シート名については、そのままファイル名が指定されますが、 上記の場合のシート名は『test』になります。 しかし、[開く]を選択した場合、 シート名は、 .csv]test[1]などとなってしまいます。 原因としては、開くを押下した場合でも テンポラリーフォルダに一時的にファイルが保存されてしまうせいだと 考えます。 実際、ファイル名をtest[1].csvとしてファイルを開くと .csv]test[1]というシート名になってしまいました。 テンポラリーフォルダに保存する際 なぜ角カッコ[]つきのファイル名test[1].csvで保存されてしまうか ご存知の方がいらっしゃいましたら、 是非ご教示くださいますよう宜しくお願いいたします。

  • ファイルをダウンロードしたい

    PHPでDBから取ってきたデータをエクセルに出力し、ダウンロードさせる プログラムを書いていますが、うまくいきません。 処理の流れは以下のようになっています。 ----------------------------------------------------- ◇top.php(ダウンロードボタン押下) ↓ ◇action.php実行 さらにこの中で、 ・logic.php実行→DBからデータ取得 ・excel.php実行(ダウンロードボタン押下時のみ) logicからデータをもらってエクセルファイル生成。 header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\"$filename\""); ・view.php実行→Smartyでtop.phpの画面表示(top.tpl) (logicからviewに値を渡してデータを画面表示) ----------------------------------------------------- この処理だと、ダウンロードされるファイルが生成したものでなく、 top.phpをダウンロードしてしまうんです。(中身はHTMLですけど。) 同じような質問がありましたが、結局どうしたらいいのか・・ http://oshiete1.goo.ne.jp/kotaeru.php3?q=1432459 top.phpにはデータを表示していて、ダウンロードボタンも付いている って感じです。ボタンを押した時の挙動をどうしたらいいのか、いまいち 分かりません。 よろしくお願いします。

    • 締切済み
    • PHP
  • ファイルのダウンロードについて

    PHPでDBに接続してテーブルのバックアップを取るプログラム(ファイルのダウンロード)を作成していますが、 上手く動作しません。 bktbl.phpにアクセスすると、HTML部分まで「test.csv」として保存されてしまいます。 何故なのでしょうか。。 どなたか教えて下さい。よろしくお願いします。 (プログラム内で間違ってる部分もあれば・・教えて頂きたく) 逆に、バックアップしたファイルをインポートする場合は、pg_copy_fromでいけますよね? bktbl.php <?php //DB接続処理 ・・・・   ・・・・ $rows = pg_copy_to($connection,"テーブル名");; //DB切断処理 ・・・・   ・・・・ $file = implode("\r\n", $rows); $file_size = strlen($file); header("Content-type: application/x-csv"); header("Content-Disposition: inline; filename=test.csv"); header("Content-Length: $file_size"); print $file; ?> <HTML> HTML記述部分 </HTML>

    • ベストアンサー
    • PHP

専門家に質問してみよう