- ベストアンサー
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で呼び出すように修正したあとから画面に出力されるようになってしまいました。なにかご存知でしたらご教示お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
気になるところはいろいろあるけれど、とりあえずなぜ『AJAX』で呼び出すように変更したかがわからない。 元々、リンクをクリックすると『ファイルを保存』ダイアログが出るように処理を入れているのでしょう。 『ファイルを保存』ダイアログが出るなら、元々画面遷移を伴わない。 という意味では、なぜ『AJAX』で呼び出す必要があるのか。 ちなみに、変更したというJavaScript側に問題がある可能性も大です。
その他の回答 (2)
>$outputFileはなにも指定していない状態でした; >$outputFileにはなにをしていすればいいですか? 読み込むべきCSVファイルを指定するのではありませんか? もし $outputFile が無いのなら、そのスクリプトはエラー終了してしまいます。
補足
i80286様 御回答ありがとうございます。 そうですか。とりあえずそのまま 書いていただけなのでnullがはいっていたと思います。 スクリプトエラーはでていません。
$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);
補足
御回答ありがとうございます。 $bufにはカンマ区切りのデータが 入っています。"aaa,bbb,ccc\n,ddd,eee,fff"こんな感じです。 $outputFileはなにも指定していない状態でした; $outputFileにはなにをしていすればいいですか?
補足
BellBell様 御回答ありがとうございます。 以前、http://oshiete1.goo.ne.jp/qa5792881.htmlの内容で 質問した際、ajaxを使用したらできるのではと回答をいただいたので 参考にさせていただきました。