ダウンロード後のファイルを削除したい - PHPプロ!Q&A掲示板

1339

  • 0P

ダウンロード後のファイルを削除したい

質問日時 / 2008年7月28日 10:43    回答数 / 3件

Questioner:  shiomi  このエントリーをはてなブックマークに追加 

キーワード / file    ダウンロード    削除   

PHPで、ファイル変換ツールを作成しました

①クライアントのファイルをアップロード
②サーバにて変換、ダウンロードボタンを表示
③ボタン押下で、クライアントにダウンロード

この後、サーバ上のファイルを削除したいのですが、どうやっていいかわかりません。

③ダウンロードは、
以下の記述で実現しています。
 $file = "test.txt";
 header("Content-type: text/plain");
 header("Content-Disposition: attachment; filename=$file");
 readfile($file);

ここで削除処理を入れると、ダウンロード後に②の画面に戻るため、
まだ表示されているダウンロードボタンを押されてしまうと変なことになってしまいます。

②の画面を閉じたら削除されるとか?
③ダウンロードが終了したら、②のボタンが消えるとか?


よいやり方があったら教えてください。
初心者向けに説明していただけると嬉しいです。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01yakou850あまり詳しくはないですが、一応うかんだやり方を残し
┃┗A01-1shiomifile_exists関数で制御できました。 ありがとうござ
┗A02NurseAngel「画面を閉じたら削除」というのはPHPでは出来ません

回答一覧

並び替え:

A01 満足
answereryakou850 [7月28日 12:28]

あまり詳しくはないですが、一応うかんだやり方を残しておきます。参考程度に。

・ファイルの出力をしたら同じプログラムで削除
header関数&ファイル内容の出力後にファイルを削除してしまいます。
>まだ表示されているダウンロードボタンを押されてしまうと変なことになってしまいます。
これを解決するために
1.ダウンロードプログラムにfile_exists関数を通すようにして
  ファイルがなければエラー画面へ

・一定時間がすぎたら削除
cronなどのような一定時間ごとに動かせるアプリケーションなどを通して
ファイルの作成から1日以上過ぎたものがあれば削除
(ファイルの作成日時などは簡単に取れたと思いますので
 それを使ってunlink発行します)
# この場合も上のfile_existsは通しておいたほうがいいでしょう

ようは
「ファイルがあるならばダウンロードを許可する」という前提をつけてあげたほうがいいかと思います。

この意見に回答する

ツリーへ TOPへ

A01-1
replyershiomi [7月28日 15:40]

file_exists関数で制御できました。
ありがとうございました!

この意見に回答する

ツリーへ TOPへ

A02
answererNurseAngel [7月28日 15:41]

「画面を閉じたら削除」というのはPHPでは出来ません。


・先にボタンのないDL完了画面を表示させてからonLoadとかでダウンロードさせる
・Ajaxとかでボタンを消しつつDLさせる


まあ面倒です。

一番手っ取り早いのはJavaScriptでボタン連打の禁止でしょう。
<input type="submit" onclick="this.disabled=true;">

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
マジッククォートとmysql_real_escape_string
 このエントリーをはてなブックマークに追加 
A
magic_quotes_gpcでは、SQLインジェクション対処は十分できません。主な理由として、以下が上げられます。 ・magic_quotes_gpcは文字コードを考慮しないで処理するので、Shift_JISを使っている場合、SQLインジェ...

>>続きを読む

SQLインジェクション対策は時と場合で使う関数が変わります。その時にあったものを使いましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)