アプリ版:「スタンプのみでお礼する」機能のリリースについて

画像、ファイルをアップロードできるフォームを作成しています。

----------------------
フォーム

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

よろしくお願いします。

A 回答 (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すればいけるのではないかと。何かのヒントになれば幸いです。
    • good
    • 0
この回答へのお礼

うまくいきました。

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

お礼日時:2009/04/19 18:37

一意なファイルを作成するには


こちらの方が簡単かと。
tempnam
http://jp2.php.net/manual/ja/function.tempnam.php
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

お礼日時:2009/05/04 21:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!