
phpでzipファイルダウンロード後の削除について
phpにおいて、ボタンをクリックしたときに、サーバ内の
ディレクトリの中身をzip圧縮してダウンロードを行う処理を
作成し、ダウンロード後はサーバ内のzipファイルを
削除したいと考え、下記のような流れでプログラムを作成しました。
//1.zipファイルの作成
shell_exec("zip -r file.zip targetdir");
//2.HTMLヘッダ
Content-type ・・・
//3.readfileでファイル読み込み
readfile(file.zip);
//4.ファイル削除
shell_exec("rm -f file.zip");
3.までは上手く動作して、意図したzipファイルを
ダウンロードできるのですが、
4.の動作が、3.でのダウンロードダイアログで
・「保存」してダウンロードすると動作して削除する。
・「キャンセル」してダウンロードせずダイアログを
閉じると削除されずサーバに残ってしまう。
となってしまいます。
ちなみに一旦「保存」を選択して、ダウンロード途中に
「キャンセル」を選択して中断しても削除されませんでした。
ダウンロードダイアログでの操作に関わらず作成した
zipファイルを削除したいのですが、どのようにすればいいか
わかりません。
shell_exec関数をunlinkなどに変えて見ても結果は同じでした。
アドバイスを頂ければと思い質問させていただきました。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
いけますね。
readfileではなく、freadで一旦変数に格納してファイル本体はすぐに削除。それから出力すれば、ダウンロード完了でもキャンセルでも、ファイルは削除されていることになります。(ファイルサイズがあまりに大きすぎると厳しいかもしれませんが)
万一不明なときは補足してください。
この回答への補足
アドバイスありがとうございます。
自宅では環境がありませんので、
月曜日に教えて頂いた方法を試してみようと思います。
ただファイルサイズが250Mぐらいまで対応する必要がありますので
処理時間やスペックの問題が発生するかもしれません。
試した結果についても報告させて頂きます。
また、質問に書き損ねていたのですが、readfileを用いたとき
ファイルサイズが1Kぐらいのテキストファイルで試すと
ダウンロードダイアログでの操作に関わらず削除することが
できます。
ファイルサイズが大きいとなにかとややこしそうですね・・・
お礼遅くなってしまい申し訳ありません。
教えていただいた方法はやはり大きいファイルのときには
厳しいようで、結局作業後削除するのを諦め、作業前にファイル
があるときには削除するという処理を記述することにしました。
作業後次の作業までサーバにファイルが残るのが少し気持ち悪い
のですが、HDDには余裕がありますのでこのようにしました。
貴重なアドバイスありがとうございました。
No.1
- 回答日時:
ダウンロードダイアログはローカルでのお話しなので、きちんと完了したかどうか直接PHP側で感知することは不可能でしょう。
やるなら JavaScriptの window.onunload あたりを使用して当該ページから離れたタイミングで Ajaxで感知して削除するしかないかと。
あるいは気持ち悪いのに耐えられるなら、zipファイルの作成時点で一定時間を過ぎた過去分を削除するしかないと思いますよ。
Ajaxでの結果は信用できないので、現実的には両方併用でしょうかね。
また、余計なお世話かもしれませんが、バックアップ等で管理者だけが使用するならかまいませんが、もし不特定多数が使用する場合、ファイル名も考慮しないと、だれかさんの途中で削除してしまうかも。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
zip圧縮の種類について
-
DelphiのURLDownloadToFile関数...
-
HTTPダウンロード後に自動削除
-
phpのheader("Location:#pos")...
-
.htaccessにphp_valueが使用できな
-
*.php、*.php3、*.phtmlの違い
-
mysql→EUC-JP、php→UTF-8の時の...
-
phpでメール送信できません 原...
-
phpのextension_dirを複数指定...
-
phpの中でphpを書けないか
-
PHP PDOライブラリが読み込まれ...
-
mamp環境でのcronの使い方で困...
-
PHPでメールを受信するには?
-
再度、xamppにおけるjpgraphの...
-
セッションについての設定なの...
-
2つの画像ファイルが異なるファ...
-
require_once()でファイルが読...
-
PHP版のPDFlibのインストール
-
PHPのif文でその処理を途中で抜...
-
header(Location:~)で$_SESS...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで複数ファイルのダウン...
-
zip圧縮の種類について
-
VB.NETのFTPダウンロードについて
-
libxml2のインストール
-
PHPでファイルのダウンロードす...
-
ftp_getでローカルにファイルが...
-
xamppファイルのダウンロードに...
-
phpでzipファイルダウンロード...
-
CSVファイルのダウンロード
-
wgetの使い方
-
PDF ダウンロード
-
複数ファイルを連続でダウンロード
-
ダウンロードダイアログなしで...
-
ファイルダウンロードについて
-
csvをダウンロードする際、いき...
-
【PHP】ダウンロードサイト作成...
-
PHPでダウンロードしたファイル...
-
HTTPダウンロード後に自動削除
-
PHPでネット上のPDFファイルを保存
-
PHPでファイルのダウンロード判...
おすすめ情報