• ベストアンサー

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

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

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.3

気になるところはいろいろあるけれど、とりあえずなぜ『AJAX』で呼び出すように変更したかがわからない。 元々、リンクをクリックすると『ファイルを保存』ダイアログが出るように処理を入れているのでしょう。 『ファイルを保存』ダイアログが出るなら、元々画面遷移を伴わない。 という意味では、なぜ『AJAX』で呼び出す必要があるのか。 ちなみに、変更したというJavaScript側に問題がある可能性も大です。

omlyuu
質問者

補足

BellBell様 御回答ありがとうございます。 以前、http://oshiete1.goo.ne.jp/qa5792881.htmlの内容で 質問した際、ajaxを使用したらできるのではと回答をいただいたので 参考にさせていただきました。

その他の回答 (2)

noname#111181
noname#111181
回答No.2

>$outputFileはなにも指定していない状態でした; >$outputFileにはなにをしていすればいいですか? 読み込むべきCSVファイルを指定するのではありませんか? もし $outputFile が無いのなら、そのスクリプトはエラー終了してしまいます。

omlyuu
質問者

補足

i80286様 御回答ありがとうございます。 そうですか。とりあえずそのまま 書いていただけなのでnullがはいっていたと思います。 スクリプトエラーはでていません。

noname#111181
noname#111181
回答No.1

$bufや$outputFileの内容が分からないので確実なことは言えませんが、ブラウザを再起動してから、下記のスクリプトで試してみてください。 ------------------------------- $csv_file = sprintf($this->convert_sjis("テスト_%s.csv"), date("Ymd-hi")); // 適当にファイル名を指定 $file_length = filesize($outputFile) + strlen($buf); header("Content-Disposition: attachment; filename={$csv_file}"); header("Content-Length:{$file_length}"); header("Content-Type: application/octet-stream"); print($buf); readfile($outputFile);

omlyuu
質問者

補足

御回答ありがとうございます。 $bufにはカンマ区切りのデータが 入っています。"aaa,bbb,ccc\n,ddd,eee,fff"こんな感じです。 $outputFileはなにも指定していない状態でした; $outputFileにはなにをしていすればいいですか?

関連するQ&A

  • 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→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からのsubmitによりデータベースより取得したデータをCSVファイルのダウンロードをPHPにて行っています。 ファイル保存ダイアログを表示させ、なおかつhtml上のメッセージエリアに「○○件出力しました。」等のメッセージを表示させたいのですが、やり方がわかりません。 それぞれの処理自体は別々に行えば可能でした。 ・PHPのファイルダウンロード ----------------------------------------------------- header("Content-Type: application/csv"); header("Content-Disposition: attachment; filename=" . $fileName); header("Content-Length:".filesize($fileNameTmp)); readfile($fileNameTmp); ----------------------------------------------------- ・メッセージ表示 iframeを作成しformのtargetをそのiframeにし PHPコードの下に下記コードを入れる ----------------------------------------------------- <html><head> <script type="text/javascript"> <!-- window.onload=function(){ if(window.parent) { window.parent.showMsg('<?php echo $GLOBALS["strMsg"] ?>'); } }; //--> </script> </head><body></body></html> ----------------------------------------------------- また、構成上画面遷移→ダウンロードは使えません。 PHP:5.6.3 jQuery:1.11.1 IE8の動作も可能にしたいため、HTML5はなしで。 ご教授よろしくお願いいたします。

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

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

    • ベストアンサー
    • PHP
  • 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
  • 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
  • PHP5 CSVファイルのダイアログ出力

    サーバにCSV形式でファイルが保存してあります。 "会員ID","名前","メールアドレス" "X000003","山田","abc@co.jp" "X000004","佐藤","123@co.jp" 他サイトを参考に、、ブラウザからCSV出力ボタンでダイアログ表示、保存まではいけました。 // ダウンロードさせる元ファイル $source = '/home/aaa/bbb/result.CSV'; $filename = 'result.CSV'; header("Content-Type: application/csv;charset=Shift_JIS "); header("Content-Disposition: attachment; filename=".$filename); readfile($source); ・問題点は下記2つです。 (1)エクセルで開くと文字化けしてしまいます。 (2)ファイルの先頭になぜか下記のようなHTMLの内容が出力されてしまいます。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="content-script-type" content="text/javascript" /> <meta http-equiv="content-style-type" content="text/css" />   ・   ・   ・

    • ベストアンサー
    • PHP
  • サーバー上のファイルをブラウザからダウンロード

    お世話になります。 サーバ上のファイルをブラウザからダウンロードさせるため、下記のようなコードを書いています。 // ダウンロードさせる元ファイル $source = '/home/hogehogel/output.csv'; // 保存時のファイル名(デフォルト) $filename = 'csv_output.csv'; // HTTPヘッダ送信 header("Content-type: application/csv"); header("Content-Disposition: attachment; filename=\"{$filename}\""); // ファイルを読み込んで出力 readfile($source); しかし、ダイアログボックスが表示されず、画面上にデータが表示されてしまいます。 いろいろなサイトや書籍等のコードを真似してもダメでした。 サーバはさくらのスタンダードを使っています。 原因として何が考えられるでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • fileのダウンロードとページ移動を続けて行うには?

    初心者です。教えて頂けますか? フォームのボタンを押したらダウンロードする様に作りました。 ボタンを押したらダウンロードとページ移動を続けて行うには どの様にすれば良いでしょうか? header( "Content-Type: application/octet-stream" ); header( "Content-Disposition: attachment; filename=$contentFilePath" ); header( 'Content-Length: '.filesize($contentFilePath) ); readfile($contentFilePath);

    • ベストアンサー
    • 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

専門家に質問してみよう