• 締切済み

複数ファイルのアップロードの際の拡張子

複数のファイルを一度にアップロードするプログラムを作成しています。 同じ拡張子のファイルは、問題なくアップロードすることができましたが 異なる拡張子のファイルをアップロードすると 全てのファイルが最後にアップロードしたファイルと同じ拡張子になってしまいます。 拡張子を$kakuに入れる位置が間違っているような気もするのですが 移動させてみましたが結果は同じでした。 アドバイス頂けると助かります。 よろしくお願い致します。 //拡張子チェック if(strlen($_FILES["att"]["name"])>0){ foreach($_FILES["att"]["error"] as $key => $error_a){ if($error_a == UPLOAD_ERR_OK){ $att_na = $_FILES['att']['name'][$key]; //ローカルファイル名 $att_tmp = $_FILES["att"]["tmp_name"][$key]; //テンポラリファイルの名前 $att_size = $_FILES["att"]["size"][$key]; //ファイルサイズ $att_type = $_FILES["att"]["type"][$key]; //ファイルタイプ if(strlen($att_na)>0) { if(is_uploaded_file($att_tmp)) { if(strlen($att_size)==0) {$error = "ファイルが不正です";} if($att_size>10000000) {$error = "ファイルのサイズが大きすぎます({$att_size}バイト)";} //ファイルタイプのチェック if($att_type=="application/msword") {$kaku="doc";} if($att_type=="application/vnd.ms-excel") {$kaku="xls";} if($att_type=="application/vnd.ms-powerpoint") {$kaku="ppt";} if($att_type=="application/pdf") {$kaku="pdf";} if($att_type=="text/plain") {$kaku="txt";} if($att_type=="application/zip") {$kaku="zip";} if($att_type=="image/gif") {$kaku="gif";} if($att_type=="image/jpeg") {$kaku="jpg";} if($kaku==""){$error="添付できないファイル形式です";} } } } } } (略) //登録 foreach($_FILES["att"]["error"] as $key => $error_a){ if($error_a == UPLOAD_ERR_OK){ $att_na = $_FILES["att"]["name"][$key]; $att_tmp = $_FILES["att"]["tmp_name"][$key]; $att_type = $_FILES["att"]["type"][$key]; if(strlen($att_na)>0) { list($att_nam,$k) = explode(".",$att_na); $ymdhis = date("YmdHis"); $att_no++; $att_name = "{$my_no}-{$log_no}-{$att_no}-{$ymdhis}.{$kaku}"; $att_name_a = "{$att_nam}-{$my_no}-{$log_no}-{$att_no}-{$ymdhis}.{$kaku}"; move_uploaded_file($att_tmp, "$att_path/$att_name"); $att_name_ar[] = $att_name; $att_name_im = implode(",",$att_name_ar); $att_name_aar[] = $att_name_a; $att_name_aim = implode(",",$att_name_aar); } } }

みんなの回答

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.2

使う変数を初期化していないからでは? それに、判定の仕方もおかしいです。

quakeandb
質問者

お礼

回答ありがとうございます。 スクリプトは一部分だけ取り出してますので 略してしまっているとことで初期化はしています。 やはり判定の仕方がおかしいでしょうか? その辺りは本にのっていたスクリプトを元にしているので 取り入れ方が正しいかどうか自信がなかったのです。 今回は$kを$kakuとすることで解決しましたが もう少し勉強したいと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • koke29
  • ベストアンサー率58% (114/196)
回答No.1

拡張子の配列を作ればよいのではないでしょうか ファイルタイプのチェックで最後に該当するものが $kakuになってしまうのが原因ですよね?? foreach内で拡張子の配列を作って、あとで入れてけば うまくいきそうな気がしますよー

quakeandb
質問者

お礼

回答ありがとうございます。 そうなんです、$kakuのところで上書きされてしまうようです。 foreachで配列を作ろうと思っていたのですが explodeしている箇所の$kを$kakuとしたら うまくいき自己解決しました。

すると、全ての回答が全文表示されます。

関連するQ&A