電子書籍の厳選無料作品が豊富!

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で呼び出すように修正したあとから画面に出力されるようになってしまいました。なにかご存知でしたらご教示お願いします。

A 回答 (3件)

気になるところはいろいろあるけれど、とりあえずなぜ『AJAX』で呼び出すように変更したかがわからない。



元々、リンクをクリックすると『ファイルを保存』ダイアログが出るように処理を入れているのでしょう。
『ファイルを保存』ダイアログが出るなら、元々画面遷移を伴わない。
という意味では、なぜ『AJAX』で呼び出す必要があるのか。

ちなみに、変更したというJavaScript側に問題がある可能性も大です。

この回答への補足

BellBell様

御回答ありがとうございます。

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

補足日時:2010/04/05 10:26
    • good
    • 0

>$outputFileはなにも指定していない状態でした;


>$outputFileにはなにをしていすればいいですか?

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

この回答への補足

i80286様

御回答ありがとうございます。
そうですか。とりあえずそのまま
書いていただけなのでnullがはいっていたと思います。

スクリプトエラーはでていません。

補足日時:2010/04/05 10:20
    • good
    • 0

$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にはなにをしていすればいいですか?

補足日時:2010/04/02 17:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!