人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでCSVをサーバー上に作成し、セキュリティの関係上、ユーザーにダウンロードさせた後に、ファイルを削除したいと思っております。

ただ、ダウンロード直後にファイルを削除すると、ダウンロード前にファイルがなくなってしまうためか、Not Foundになってしまいます。
良い対策はございませんか?

●質問者: makocan
●カテゴリ:インターネット ウェブ制作
✍キーワード:NOT FOUND PHP サーバー セキュリティ ダウンロード
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● t_shiono
●23ポイント

csvファイルをPHPを経由してダウンロードさせるのはいかがでしょうか?

つまり、download.php(仮称)を作成し、

http://XXXX/download.php?file=sample.csv

などとしてアクセスさせます。


download.phpでは、fileパラメタで受け取ったファイル名からファイルを探し、存在すれば、それをCSVとしてのヘッダとともに返す。という感じです。

一度出力したファイルについては、データを返した後、または、バッファに読み込んだあとファイル自体を削除してしまえばよいかと思います。


きちんと排他制御も行えば、完全に1度しかダウンロードできない仕組みができると思います。

何かの参考になれば。

◎質問者からの返答

現状は、download.php?=test.csvのように渡し、header('Location:test.csv')のようにしておりますが、これとはまた別の方法でしょうか??


2 ● tomo_k
●23ポイント

PHPでなくJava Servletで使った方法ですが参考までに。

同じ方法が適用できるかわかりません。

CSVやExcelファイルを生成しユーザにダウンロードさせるのにファイルをいったん吐き出すのではなくて、ServletOutputStreamを取得しそこにCSVを流し込んであげるという方法が使えました。

つまり、通常レスポンスとしてHTMLなどを返すところにCSVを動的に生成してあげればユーザから見たらダウンロードに見えるがサーバにはCSVの実体は残らないことになると思います。

http://www.ingrid.org/jajakarta/servletapi/servletapi-4.0/docs-j...


3 ● t_shiono
●22ポイント
header('Location:test.csv')

はブラウザに対して、test.csvを読みに行くように指示をする処理となります。そのため、

1.ブラウザ → サーバ 「download.php?file=test.csvというデータをくれ」

2.サーバ → ブラウザ 「test.csvにデータがあるよ」

3.ブラウザ → サーバ 「test.csvというデータをくれ」

というやり取りになります。

1の処理の最後でtest.csvを削除してしまうと、3のアクセスの際にはファイルは存在しないので、FILE NOT FOUNDになります。


1.の処理の時点で、

/** ファイル名の取得 */
$filename = $_GET['file'];

/** HTTPヘッダの出力 */
header("Content-disposition: attachment; filename=$filename");
header("Content-type: application/octet-stream; name=$filename");

/** ファイルデータの書き出し */
readfile($filename);

/** ファイルの削除 */
unlink($filename);

などとしてあげてください。

http://dummy

◎質問者からの返答

ありがとうございました。

解決いたしました。


4 ● GoldenDawn
●22ポイント

ファイルを作らずに直接出力するのはダメなんでしょうか。

3番の回答を借りると

/** HTTPヘッダの出力 */
header("Content-disposition: attachment; filename=$filename");
header("Content-type: application/octet-stream; name=$filename");

/** CSV データの書き出し */
echo $csvdata ;

みたいな感じで。


http://q.hatena.ne.jp

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ