• ベストアンサー

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勉強中です。 初歩的なことかもしれませんが、 よくわからないのでアドバイスを頂けると助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • manimani2
  • ベストアンサー率70% (12/17)
回答No.1

とりあえず、一つの案として参考までにご覧ください。 ファイル名の前に、ユニークな数字をつけることで解決するとします。例えば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すればいけるのではないかと。何かのヒントになれば幸いです。

basicisee
質問者

お礼

うまくいきました。 丁寧なアドバイスどうもありがとうございました。

その他の回答 (1)

回答No.2

一意なファイルを作成するには こちらの方が簡単かと。 tempnam http://jp2.php.net/manual/ja/function.tempnam.php

basicisee
質問者

お礼

ありがとうございます。 そういった考え方もあったのですね。 参考にさせていただきます。