php ファイルの保存先のダイアログ表示
2011/12/09
readfile()を使う。
さんぷる
流れとしては「ヘッダを作成、ダイアログ表示して保存、オリジナルファイル削除」ってな感じ。
- /**
- * ファイルをローカルに保存
- * @param String $dataPath 保存したいファイル
- * @param String $saveName 保存時のファイル名
- * @param Boolean $delete 保存後のオリジナルファイルの削除処理
- */
- function dataSaveToLocal($dataPath, $saveName, $delete=FALSE)
- {
- header("Content-Type : text/plain");
- header("Content-Disposition:attachment; filename=\"" . $saveName . "\"");
- header("Content-Length:" . filesize($dataPath));
- header("Pragram:no-cache");
- header("Cache-Control:nocache");
- // ダイアログ表示で保存
- readfile($dataPath);
- //ダウンロード終了後にファイルを削除したい場合
- //接続が切れたらファイル削除
- if ($delete === TRUE)
- {
- if(!connection_aborted() || connection_status() != 0)
- {
- unlink($dataPath);
- }
- }
- }
- // ▼呼び出し:ブラウザによっては拡張子を指定しても無駄になることがあるっぽい
- dataSaveToLocal("オリジナルファイルのパス", "保存時のデフォルトファイル名", FALSE);
めも
当初の予定では「ブラウザでURIをたたくとDBで取得したものをHDDに保存」ってな感じ。
「readfile()」にはすぐに辿りつけたんだけど、HDDに保存するとブラウザで表示されているものが保存されている。
※このときは、ブラウザにはDBに投げたクエリと、その結果を出力していた。
なんか…聞くところによると「そういうモノだよ」ってことらしい。
よい方法はあるかもしれないけど「ダウンロード」のボタンやリンクをつけて回避することにした。
コンテンツタイプ
よく使うと思われるコンテンツタイプは下記。
- text/plain
- text/richtext
- text/html
- text/css
- text/xml
- application/pdf
- application/zip
- application/xml
- image/jpeg
- image/gif
- image/tiff
調べたら一覧を用意してくれている人がいた。「Content-Type一覧」