php ファイルの保存先のダイアログ表示

2011/12/09
readfile()を使う。

さんぷる

流れとしては「ヘッダを作成、ダイアログ表示して保存、オリジナルファイル削除」ってな感じ。

  1. /**
  2. * ファイルをローカルに保存
  3. * @param String $dataPath 保存したいファイル
  4. * @param String $saveName 保存時のファイル名
  5. * @param Boolean $delete 保存後のオリジナルファイルの削除処理
  6. */
  7. function dataSaveToLocal($dataPath, $saveName, $delete=FALSE)
  8. {
  9.   header("Content-Type : text/plain");
  10.   header("Content-Disposition:attachment; filename=\"" . $saveName . "\"");
  11.   header("Content-Length:" . filesize($dataPath));
  12.   header("Pragram:no-cache");
  13.   header("Cache-Control:nocache");
  14.   // ダイアログ表示で保存
  15.   readfile($dataPath);
  16.   //ダウンロード終了後にファイルを削除したい場合
  17.   //接続が切れたらファイル削除
  18.   if ($delete === TRUE)
  19.   {
  20.     if(!connection_aborted() || connection_status() != 0)
  21.     {
  22.       unlink($dataPath);
  23.     }
  24.   }
  25. }
  26.  
  27. // ▼呼び出し:ブラウザによっては拡張子を指定しても無駄になることがあるっぽい
  28. dataSaveToLocal("オリジナルファイルのパス", "保存時のデフォルトファイル名", FALSE);

めも

当初の予定では「ブラウザでURIをたたくとDBで取得したものをHDDに保存」ってな感じ。
「readfile()」にはすぐに辿りつけたんだけど、HDDに保存するとブラウザで表示されているものが保存されている。
※このときは、ブラウザにはDBに投げたクエリと、その結果を出力していた。

なんか…聞くところによると「そういうモノだよ」ってことらしい。
よい方法はあるかもしれないけど「ダウンロード」のボタンやリンクをつけて回避することにした。

コンテンツタイプ

よく使うと思われるコンテンツタイプは下記。

  1. text/plain
  2. text/richtext
  3. text/html
  4. text/css
  5. text/xml
  6. application/pdf
  7. application/zip
  8. application/xml
  9. image/jpeg
  10. image/gif
  11. image/tiff

調べたら一覧を用意してくれている人がいた。「Content-Type一覧

新着(ニュース関連以外)

2018-07-26
年賀状で「新春」とか書くけど・・・何故なんだろうと8月を目前にした今、疑問に思った。
2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい