- ベストアンサー
PHP 画像アップロード 重複防止
画像、ファイルをアップロードできるフォームを作成しています。 ---------------------- フォーム <FORM NAME="objform" action="yes.php" METHOD="POST" ENCTYPE="multipart/form-data"> <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="1000000"> <INPUT TYPE="file" NAME="img1" SIZE="40"><BR> <INPUT TYPE="submit" NAME="submit" VALUE="アップロードする!!"> </FORM> ーーーーーーーーーーーーーーーーーーーー yes.phpの中身 $updir = "./photo/"; $filename = $_FILES['upfile']['name']; //form の「upfile」の値 move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename); -------------------------- これでphoto のフォルダに格納されるようにしているのですが、 もし、同じファイル名でアップされた場合上書きされてしまいます。 IDをつけるか、もしくはその他の方法でファイル名が重複されないような設定にするにはどうすればよいでしょうか。 現在PHP勉強中です。 初歩的なことかもしれませんが、 よくわからないのでアドバイスを頂けると助かります。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、一つの案として参考までにご覧ください。 ファイル名の前に、ユニークな数字をつけることで解決するとします。例えば1つ目のファイルなら「ID_1_○○○.jpg」というようにです。 そのためにまず外部ファイルを用意します。ここでは「id.dat」とします。ここに、いま何個目までファイルがアップロードされているかを記録していきます。 -------id.dat------- 0 初回はまだ0個なので上のように「0」とだけ書いて予め保存しておきます。その上で、スクリプトをいじります。 -------yes.php------ $updir = "./photo/"; $filename = $_FILES['upfile']['name']; //追加分ここから //ファイルを指定 $id_file = "id.dat"; //ファイルを開く $fp = fopen($id_file,"r"); $id = fgets($fp); fclose($fp); //ファイルの数字に1を足します。 $id = $id + 1; $fp = fopen($id_file,"w"); //保存します。 fputs($fp, $id); fclose($fp); //名前の前に番号を追記します。 $file_name = 'ID_'.$id.'_'.$file_name; //追加分ここまで move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename); こんな感じで、ファイル名にユニークな番号を振って、move_uploaded_fileすればいけるのではないかと。何かのヒントになれば幸いです。
その他の回答 (1)
- bakenshibakenshi
- ベストアンサー率44% (13/29)
一意なファイルを作成するには こちらの方が簡単かと。 tempnam http://jp2.php.net/manual/ja/function.tempnam.php
お礼
ありがとうございます。 そういった考え方もあったのですね。 参考にさせていただきます。
お礼
うまくいきました。 丁寧なアドバイスどうもありがとうございました。