質問: phpでzipファイルダウンロード後の削除について 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などに変えて見ても結果は同じでした。 アドバイスを頂ければと思い質問させていただきました。 よろしくお願いします。
回答: いけますね。readfileではなく、freadで一旦変数に格納してファイル本体はすぐに削除。 それから出力すれば、ダウンロード完了でもキャンセルでも、ファイルは削除されていることになります。(ファイルサイズがあまりに大きすぎると厳しいかもしれませんが) 万一不明なときは補足してください。