質問: ### 前提・実現したいこと * フォーム入力→確認画面→完了(完了メール) * 確認画面にアップロードしたファイル名(複数)を表示。 * 確認画面で「履歴バック」をされたときには、ファイルを削除。 ### 試したこと PHPを書いたことがなく、下記サイトを参考にファイルアップロード付きメールフォームを作ってます。 https://gray-code.com/php/make-the-form-vol8/ それに改変していますが、これで一応最低限の一連はできています。 確認画面(複数ファイル表示)、ファイルアップロード、確認メール。 改変したこと: * 一時ファイルディレクトリと正式ディレクトリを用意。 * ファイル名の頭にユーザー名を加えました。 ###### 例外について対処したい 今回やったやり方だと良くも悪くも「一旦ファイルをサーバにアップロード」しています。 フォームを入力し確認画面に進む。 その後ユーザーが「(履歴)戻る」をする。 そして“違う”ファイルを選択し再び確認画面に進み完了させる。 こうなるとサーバーには2つアップロードされることになります。 今はとにかく処理を成功させるために、 ファイル名にユーザー名を追加して、そのファイル名にユーザー名を含んでいるファイルは正式ディレクトリへ移動するという行為を踏んでいます。 この場合受け取った側が「どちらが正しいファイル」なのか?わからなくなってしまいます。 またユーザーにしてみれば、それはキャンセルしたつもりになってますよね。 参考にしたプログラムの書き方だと、グローバル変数とローカル変数の関係で?変数を引き継げません。 最初の段階でファイル名に何かコード名を付けて、それを含んでなければ削除ってことをすれば良さそうですが、さっぱりわかりません。 代わりにJqueryを使ってJavaScriptでやることも考えたのですが、 今度はc:\fakepath\が表示されてしまったり、スマートに行きません。 ※確認画面にも「ファイル名を表示」させたいです。 サーバーはCentOS6 PHP7です。 よろしくお願いします。
回答: > > 確認画面で「履歴バック」をされたときには、ファイルを削除。 > > > これはブラウザの仕様によるけど、キャッシュが表示されると思うので無理じゃないかなぁ。。。 再投稿されたタイミングで削除できるように、セッションにアップロードの時のステータスを記録しておくと、登録前情報の削除はできるように思います。 *ちょっと仕様を勘違いしているかも^^; 参考にしたサイトの内容を斜めに読みましたが、いくつかのセキュリティ的な問題点を抱えています。 特に画像ファイルであることの確認をしていないことは致命的です。 もし現在インターネット上に公開中であればすぐに中止してサイト内のファイルにおかしな変化がないか確認したほうが良いです。 *雑にリスクを説明すると、php ファイルのアップロードが可能なので、php でできることが何でもできるようになります。(別のアップローダの設置、DB への接続、スパムの発射台、マイニングスクリプトの設置等々) 少し古い記事ですが、こちらを参考にしたほうが良いです。 ファイルアップロードの例外処理はこれぐらいしないと気が済まない