- ベストアンサー
画像のアップロード時に古い画像を削除する方法は?
- 画像をアップロードする度に古い画像を削除する方法を教えてください。
- 画像のリアルタイムプレビューを作成しましたが、アップロードする度に増えてしまう問題があります。
- unlinkを使用して削除を考えましたが、削除とアップロードの両立ができませんでした。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 仕様を確定する必要があると思います。 現状、サーバ上でのファイル名はローカルでのファイル名になっています。 これを同じファイル名にしてしまえばどんどん上書きされ、最後にアップロードしたファイルが正となります。 そうすれば削除する必要がありません。 ファイル名をローカルのファイル名にする場合、前回のアップロードしたファイル名をどこかに持っておく必要があります。 例えばセッションに持ちます。 でJavaScriptの修正も必要です。 現状はファイルがアップロードされるごとに追加されていきますのでサーバー上のファイルが消えたとしても画面上は表示されたままになります。 insertAfter(this)になっている為です。 ファイル名はローカルの名称を使う場合以下のような感じになると思います。 ==== JavaScript <script type="text/javascript"> $(function() { $('#file_id').change(function() { $(this).upload('upload.php', function(res) { $('#thumbarea').html ( res ); }, 'html'); }); }); </script> ==== HTML <input type="file" name="upload_file" id="file_id"> <div id="thumbarea"></div> ==== PHP <?php session_start(); if ( !is_uploaded_file( $_FILES['upload_file']['tmp_name'] ) ) { echo '<div>ファイルが選択されていません。</div>'; exit(); } // ファイル名 $fileName = $_FILES["upload_file"]["name"]; // セッション上にファイル名が存在するか if ( $_SESSION['fileName'] !== '' ) { // 存在した場合、ファイルの存在を確認して削除実行 $filePath = 'files/' . $_SESSION['fileName']; if ( is_file($filePath) ) { unlink ( $filePath ); } } // セッションにアップロードされたファイル名を保管 $_SESSION['fileName'] = $fileName; move_uploaded_file($_FILES["upload_file"]["tmp_name"], "files/" . $fileName ); echo '<div>'.$_FILES["upload_file"]["name"].'をアップロードしました</div>'; echo '<img class="thumb" src="files/' . $fileName . '">'; ?> ファイル名をどうするかで話は変わってきますので参考までに。
その他の回答 (1)
- Qpt00000
- ベストアンサー率0% (0/1)
スクリプトの検証はしていないので、ご参考までのご意見です。 アップロードする先のフォルダをクリーンアップする処理と htmlのimgタグを削除する処理を検討してはどうでしょう。 具体的なスクリプトの提示は、ちょっとお時間の関係でご自身で調査して欲しいのですが。 アップロード先のフォルダさえわかれば、php側は (1)ディレクトリを読み取る(opendirやreaddir等) (2)ディレクトリにある、画像ファイルをすべて削除(unlink) … move_uploaded_file以降の処理 (echoでクロスサイトスクリプティング(XSS)対策はした方が良いと思いました。) また、js側は、 おそらくjqueryで、imgのタグを削除する処理があると思います。 (タグというより、DOMにおいてはエレメントという表現が適切かもしれません。) ご参考になると幸いです。 見当違いでしたら申し訳ございません。