• ベストアンサー

ファイル名を変更してアップロードする方法

お世話になります。 PHPでファイルをアップロードして管理するプログラムを作成していますが、日本語名がどうしても文字化けし、あまり日本語名を使わない方がいいという意見もあることから、どのようなファイル名でも指定できるようにして、保存するとき、プログラム側で、ファイル名を自動でYYYYMMDDHHII(例:200504160033.doc)みたいにしたいのですが、どこをいじったらよいのでしょうか。 (もし、日本語のファイル名が使えたとしても、同名のファイルだと、上書きされる問題もあるので。これだと、そういう問題もないと思います)何かアドバイスをいただけたらと思い、投稿しました。よろしくお願いいたします。 受け取る側のファイル.php $uploaddir = "./images/"; $uploadfile = $uploaddir. $_FILES['userfile']['name']; move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);

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

  • ベストアンサー
  • unimentai
  • ベストアンサー率70% (34/48)
回答No.2

$_FILES['userfile']['tmp_name'] は、phpで自動作成されたテンポラリファイル名ですので、 クライアントのファイル名を利用したいときは、 $_FILES['userfile']['name'] を指定します。 <?php $uploaddir = "./images/"; list($file_name,$file_type) = explode(".",$_FILES['userfile']['name']); $dateformat=date("Ymdhis"); $uploadfile = "$uploaddir$dateformat.$file_type"; move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile); ?>

tomofriend
質問者

お礼

まさにドンピシャでした! いろいろと勉強になりました。 本当にありがとうございます。

その他の回答 (1)

回答No.1

php4から標準的なアップロード機能では$uploadfileが保存先のファイルパス + ファイル名+拡張子となっています。 そのスクリプトを修正するのであれば保存先を変更するだけの話しとなります。 $dateformatはstrftime関数などでお好きな形式で整形してください。 $uploaddir = "./images/"; list($file_name,$file_type)=explode(",",$_FILES['tmp_name']); $dateformat="200504160033"; $uploadfile = $uploaddir.$dateformat.$file_type move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);

参考URL:
http://www.php.net/manual/ja/function.strftime.php
tomofriend
質問者

お礼

いろいろとお世話になりました。 list や、 explode の使い方とかも勉強になりました。ありがとうございました。

tomofriend
質問者

補足

ご回答ありがとうございます。 ただ、試してみたところ、ファイル名が200504160033となっただけで、拡張子が消えてしまいました。 今、いろいろといじっているのですが、まだ解決していません。よろしかったら拡張子はそのままに、保存できる方法はないでしょうか。よろしくお願いいたします。 今やったこと。 ■$dateformat=date("Ymdhi"); ■list($file_name,$file_type)=explode(",",$FILES['userfile']['tmp_name']); ←こんなふうにしたり、分割条件のカンマをピリオドにしたりしたのですが、うまくいきません・・・

関連するQ&A