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.1
- 回答日時:
ダウンロードダイアログはローカルでのお話しなので、きちんと完了したかどうか直接PHP側で感知することは不可能でしょう。
やるなら JavaScriptの window.onunload あたりを使用して当該ページから離れたタイミングで Ajaxで感知して削除するしかないかと。
あるいは気持ち悪いのに耐えられるなら、zipファイルの作成時点で一定時間を過ぎた過去分を削除するしかないと思いますよ。
Ajaxでの結果は信用できないので、現実的には両方併用でしょうかね。
また、余計なお世話かもしれませんが、バックアップ等で管理者だけが使用するならかまいませんが、もし不特定多数が使用する場合、ファイル名も考慮しないと、だれかさんの途中で削除してしまうかも。
No.3ベストアンサー
- 回答日時:
いけますね。
readfileではなく、freadで一旦変数に格納してファイル本体はすぐに削除。それから出力すれば、ダウンロード完了でもキャンセルでも、ファイルは削除されていることになります。(ファイルサイズがあまりに大きすぎると厳しいかもしれませんが)
万一不明なときは補足してください。
この回答への補足
アドバイスありがとうございます。
自宅では環境がありませんので、
月曜日に教えて頂いた方法を試してみようと思います。
ただファイルサイズが250Mぐらいまで対応する必要がありますので
処理時間やスペックの問題が発生するかもしれません。
試した結果についても報告させて頂きます。
また、質問に書き損ねていたのですが、readfileを用いたとき
ファイルサイズが1Kぐらいのテキストファイルで試すと
ダウンロードダイアログでの操作に関わらず削除することが
できます。
ファイルサイズが大きいとなにかとややこしそうですね・・・
お礼遅くなってしまい申し訳ありません。
教えていただいた方法はやはり大きいファイルのときには
厳しいようで、結局作業後削除するのを諦め、作業前にファイル
があるときには削除するという処理を記述することにしました。
作業後次の作業までサーバにファイルが残るのが少し気持ち悪い
のですが、HDDには余裕がありますのでこのようにしました。
貴重なアドバイスありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- マルウェア・コンピュータウイルス トロイの木馬が検出されました。 1 2022/06/12 22:09
- ノートパソコン パソコンでZIPファイルをダウンロードしたいとき、 このような表示が出てダウンロードができないときは 2 2023/06/20 15:37
- Google Drive Googleドライブで削除できないファイルがある。 5 2023/05/11 09:39
- その他(セキュリティ) PDFファイルのパスワード設定について 1 2022/06/25 10:10
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- その他(IT・Webサービス) サンプルファイルのダウンロードについて 2 2023/02/11 02:46
- Windows 10 e-Gov 電子申請について 回答お願いします。 社会保険保険証加入手続きを電子申請しました。 返戻 3 2022/10/02 09:05
- その他(セキュリティ) ZIPというファイルでパスワード付きPDFファイルが送られてきたのですが、 パスワードを入力▶︎ファ 3 2022/07/26 19:44
- WordPress(ワードプレス) [BuddyPress]試したいのですが! 3 2022/06/01 13:36
- Google Drive USB内の圧縮フォルダが開けません。教えて下さい! 1 2022/07/26 18:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル一覧を表示しその画面...
-
PHPでgz形式のファイルをダウン...
-
ファイルのダウンロードのイベ...
-
phpでzipファイルダウンロード...
-
CSVファイルのダウンロード
-
phpでうまく画像がダウンロード...
-
PHPで複数ファイルのダウン...
-
サーバー上のファイルをブラウ...
-
ダウンロードダイアログなしで...
-
こちらはただの直列処理ですか?
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
form actionで二つ送信先を指定...
-
シェルスクリプトからphpファイ...
-
FTPコマンドでディレクトリごと...
-
PHPのif文でその処理を途中で抜...
-
存在しないメールアドレスかど...
-
.htaccessにphp_valueが使用できな
-
PHP8を使うと、大量のWarningが...
-
PHPでfatal errorが出ても無視...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで複数ファイルのダウン...
-
phpでうまく画像がダウンロード...
-
ブラウザでExcelをダウンロード...
-
zip圧縮の種類について
-
PHPでファイルのダウンロードす...
-
VB.NETのFTPダウンロードについて
-
生成したHTMLをボタンクリック...
-
eclipseでコメントアウトができ...
-
【PHP】ダウンロードサイト作成...
-
複数ファイルを連続でダウンロード
-
phpでzipファイルダウンロード...
-
libxml2のインストール
-
PHPのFTP関数ftp_fgetエラーに...
-
ダウンロードファイル名の文字...
-
PHPでダウンロードしたファイル...
-
PHPでgz形式のファイルをダウン...
-
phpでの帯域制御、ダウンロード...
-
ファイルダウンロードについて
-
PHPでネット上のPDFファイルを保存
-
csvダウンロードについて
おすすめ情報