![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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で質問しましょう!
似たような質問が見つかりました
- マルウェア・コンピュータウイルス トロイの木馬が検出されました。 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ランキング
-
複数ファイルを連続でダウンロード
-
CSV出力時の”0”表示(電話番号...
-
PHPでファイルのダウンロードす...
-
複数ファイルのダウンロード
-
【PHP】ダウンロードサイト作成...
-
zip圧縮の種類について
-
Excelファイルをダウンロード
-
ダウンロード処理について
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
別ファイルの変数を呼び出した...
-
PHPのif文でその処理を途中で抜...
-
CFileDialogの最初のディレクト...
-
.phpと.incファイルの違いはな...
-
「警告:ページの有効期限切れ...
-
「@$変数」の「@の意味は?」
-
リンク先を隠す方法はないでし...
-
2つの画像ファイルが異なるファ...
-
現在位置より2つ上のディレク...
-
Subversionのリポジトリの削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
zip圧縮の種類について
-
PHPで複数ファイルのダウン...
-
phpでzipファイルダウンロード...
-
eclipseでコメントアウトができ...
-
PHPでファイルのダウンロードす...
-
PHP 検索結果のCSVダウンロード
-
PDF ダウンロード
-
PHPでCSVファイルの任意の行だ...
-
ファイル一覧を表示しその画面...
-
PHPでファイルをダウンロードさ...
-
libxml2のインストール
-
PHPでGoogle TTSからMP3ダウン...
-
ブラウザでExcelをダウンロード...
-
wgetの使い方
-
CSV出力時の”0”表示(電話番号...
-
【PHP】ダウンロードサイト作成...
-
PHPで複数ファイルをZIPで圧縮...
-
VB.NETのFTPダウンロードについて
-
DelphiのURLDownloadToFile関数...
-
ファイルのアップロードとダウ...
おすすめ情報