前提・実現したいこと
PHPで画像ファイルをアップロードし、アップロードされた画像に一意のシステム名を割り振りURLを生成して表示できるようにするプログラムを書いています。
現在、アップロードするためのフォームを6つ用意しており、それぞれにファイルを指定してアップロードボタンを押すときちんとDBへ書き込みがされるのですが、ファイル名や拡張子などの情報はきちんと取得できているもののURLがあげたものとは別の画像と同じものになってしまいます。
また、その現象は同時にアップロードする枚数によって複製される画像は異なります。
例:アップロード時
1.〇2.△3.□4.◎5.▽6.◆
↓
理想 現状(同時にアップロードする枚数で変化あり)
1.〇2.△3.□4.◎5.▽6.◆ 1.〇2.〇3.□4.◎5.◎6.◎
アップロードされたファイルは一度、別階層のfileディレクトリに一意のシステム名をつけて保管します。(タイムスタンプ等)ですが、本来あがっているべきである画像はfileフォルダには入っていませんでした。
(上記の例の場合fileフォルダには〇と□と◎のファイルしか格納されていない状態)
※文字数制限のため以下のソースコードは3つ分までに省略しています。
upload.php アップロードされた時の処理
php
1 2 3if($file_category == 1){ 4 $upload_No1 = $_FILES['upload_1']['name']; 5 $upload_No2 = $_FILES['upload_2']['name']; 6 $upload_No3 = $_FILES['upload_3']['name']; 7}else{ 8 $upload_No7 = $_FILES['upload_7']['name']; 9} 10 11if($_SESSION['company_ID'] == ""){?> 12<SCRIPT LANGUAGE="JavaScript"> 13 location.href = "../../index_timeout.php?<?php echo $time;?>"; 14</SCRIPT> 15<?php 16exit(); 17} 18 19if($upload_No1 !== ""){ 20 if($file_category == 1){ 21 $category = pathinfo($_FILES['upload_1']['name'], PATHINFO_EXTENSION); 22 $category = strtolower($category); 23 if($category=="png"){ 24 $category = "1"; 25 }elseif($category=="jpeg"){ 26 $category = "2"; 27 }elseif($category=="jpg"){ 28 $category = "3"; 29 }elseif($category=="pdf"){ 30 $category = "4"; 31 } 32 ?> 33 34 35 <?php 36 $tempfile_1 = $_FILES['upload_1']['tmp_name']; 37 $filename = '../../file/'.$company_ID.$category.$timestamp.".".pathinfo($_FILES['upload_1']['name'], PATHINFO_EXTENSION); 38 39 if (is_uploaded_file($tempfile_1)) { 40 if ( move_uploaded_file($tempfile_1 , $filename )) { 41 } else { 42 } 43 } else { 44 } 45 46 47 $file_name = $_FILES['upload_1']['name']; 48 $system_name = $company_ID.$category.$timestamp.".".pathinfo($_FILES['upload_1']['name'], PATHINFO_EXTENSION); 49 50 $file_url = "http://sample.com/test/maika/dss/mediamanagement/file/".$system_name; 51 $class = 1; 52 $media_No = 1; 53 54 try{ 55 $pdo = new PDO('mysql:dbname=DSS; host=localhost; charset=utf8','maika','powerB1234', 56 array(PDO::ATTR_EMULATE_PREPARES => false)); 57 } catch (PDOException $e) { 58 exit('データベース接続失敗。'.$e->getMessage()); 59 } 60 //プリペアドステートメント 61 $stmt = $pdo -> prepare("INSERT INTO T_FILE(company_ID,pattern,class,media_No,file_name,system_name,other,extension,touroku_date) VALUES (:company_ID,:pattern,:class,:media_No,:file_name,:system_name,:other,:extension,:touroku_date)"); 62 //プレースホルダへ実際の値を設定する 63 if ($stmt===false){ 64 // エラー処理 65 } 66 $stmt->bindparam(':company_ID',$company_ID, PDO::PARAM_STR); 67 $stmt->bindparam(':pattern',$pattern, PDO::PARAM_STR); 68 $stmt->bindparam(':class', $class, PDO::PARAM_STR); 69 $stmt->bindparam(':media_No', $media_No, PDO::PARAM_STR); 70 $stmt->bindparam(':file_name', $file_name, PDO::PARAM_STR); 71 $stmt->bindparam(':system_name', $system_name, PDO::PARAM_STR); 72 $stmt->bindparam(':other', $other, PDO::PARAM_STR); 73 $stmt->bindparam(':extension', $category, PDO::PARAM_STR); 74 $stmt->bindparam(':touroku_date', $time, PDO::PARAM_STR); 75 76 $stmt->execute(); 77 78 // 使用を終了したので、閉じます 79 $stmt = null; 80 $pdo = null; 81 }else{ 82 } 83 84}else{ 85 86} 87 88if($upload_No2 !== ""){ 89 if($file_category == 1){ 90 $category = pathinfo($_FILES['upload_2']['name'], PATHINFO_EXTENSION); 91 $category = strtolower($category); 92 if($category=="png"){ 93 $category = "1"; 94 }elseif($category=="jpeg"){ 95 $category = "2"; 96 }elseif($category=="jpg"){ 97 $category = "3"; 98 }elseif($category=="pdf"){ 99 $category = "4"; 100 } 101 ?> 102 103 104 <?php 105 $tempfile_2 = $_FILES['upload_2']['tmp_name']; 106 $filename = '../../file/'.$company_ID.$category.$timestamp.".".pathinfo($_FILES['upload_2']['name'], PATHINFO_EXTENSION); 107 108 if (is_uploaded_file($tempfile_2)) { 109 if ( move_uploaded_file($tempfile_2 , $filename )) { 110 } else { 111 } 112 } else { 113 } 114 115 116 $file_name = $_FILES['upload_2']['name']; 117 $system_name = $company_ID.$category.$timestamp.".".pathinfo($_FILES['upload_2']['name'], PATHINFO_EXTENSION); 118 119 $file_url = "http://sample.com/test/maika/dss/mediamanagement/file/".$system_name; 120 $class = 1; 121 $media_No = 2; 122 123 try{ 124 $pdo = new PDO('mysql:dbname=DSS; host=localhost; charset=utf8','maika','powerB1234', 125 array(PDO::ATTR_EMULATE_PREPARES => false)); 126 } catch (PDOException $e) { 127 exit('データベース接続失敗。'.$e->getMessage()); 128 } 129 //プリペアドステートメント 130 $stmt = $pdo -> prepare("INSERT INTO T_FILE(company_ID,pattern,class,media_No,file_name,system_name,other,extension,touroku_date) VALUES (:company_ID,:pattern,:class,:media_No,:file_name,:system_name,:other,:extension,:touroku_date)"); 131 //プレースホルダへ実際の値を設定する 132 if ($stmt===false){ 133 // エラー処理 134 } 135 $stmt->bindparam(':company_ID',$company_ID, PDO::PARAM_STR); 136 $stmt->bindparam(':pattern',$pattern, PDO::PARAM_STR); 137 $stmt->bindparam(':class', $class, PDO::PARAM_STR); 138 $stmt->bindparam(':media_No', $media_No, PDO::PARAM_STR); 139 $stmt->bindparam(':file_name', $file_name, PDO::PARAM_STR); 140 $stmt->bindparam(':system_name', $system_name, PDO::PARAM_STR); 141 $stmt->bindparam(':other', $other, PDO::PARAM_STR); 142 $stmt->bindparam(':extension', $category, PDO::PARAM_STR); 143 $stmt->bindparam(':touroku_date', $time, PDO::PARAM_STR); 144 145 $stmt->execute(); 146 147 // 使用を終了したので、閉じます 148 $stmt = null; 149 $pdo = null; 150 }else{ 151 } 152 153}else{ 154 155} 156 157if($upload_No3 !== ""){ 158 if($file_category == 1){ 159 $category = pathinfo($_FILES['upload_3']['name'], PATHINFO_EXTENSION); 160 $category = strtolower($category); 161 if($category=="png"){ 162 $category = "1"; 163 }elseif($category=="jpeg"){ 164 $category = "2"; 165 }elseif($category=="jpg"){ 166 $category = "3"; 167 }elseif($category=="pdf"){ 168 $category = "4"; 169 } 170 ?> 171 172 173 <?php 174 $tempfile_3 = $_FILES['upload_3']['tmp_name']; 175 $filename = '../../file/'.$company_ID.$category.$timestamp.".".pathinfo($_FILES['upload_3']['name'], PATHINFO_EXTENSION); 176 177 if (is_uploaded_file($tempfile_3)) { 178 if ( move_uploaded_file($tempfile_3 , $filename )) { 179 } else { 180 } 181 } else { 182 } 183 184 185 $file_name = $_FILES['upload_3']['name']; 186 $system_name = $company_ID.$category.$timestamp.".".pathinfo($_FILES['upload_3']['name'], PATHINFO_EXTENSION); 187 188 $file_url = "http://sample.com/test/maika/dss/mediamanagement/file/".$system_name; 189 $class = 1; 190 $media_No = 3; 191 192 try{ 193 $pdo = new PDO('mysql:dbname=DSS; host=localhost; charset=utf8','maika','powerB1234', 194 array(PDO::ATTR_EMULATE_PREPARES => false)); 195 } catch (PDOException $e) { 196 exit('データベース接続失敗。'.$e->getMessage()); 197 } 198 //プリペアドステートメント 199 $stmt = $pdo -> prepare("INSERT INTO T_FILE(company_ID,pattern,class,media_No,file_name,system_name,other,extension,touroku_date) VALUES (:company_ID,:pattern,:class,:media_No,:file_name,:system_name,:other,:extension,:touroku_date)"); 200 //プレースホルダへ実際の値を設定する 201 if ($stmt===false){ 202 // エラー処理 203 } 204 $stmt->bindparam(':company_ID',$company_ID, PDO::PARAM_STR); 205 $stmt->bindparam(':pattern',$pattern, PDO::PARAM_STR); 206 $stmt->bindparam(':class', $class, PDO::PARAM_STR); 207 $stmt->bindparam(':media_No', $media_No, PDO::PARAM_STR); 208 $stmt->bindparam(':file_name', $file_name, PDO::PARAM_STR); 209 $stmt->bindparam(':system_name', $system_name, PDO::PARAM_STR); 210 $stmt->bindparam(':other', $other, PDO::PARAM_STR); 211 $stmt->bindparam(':extension', $category, PDO::PARAM_STR); 212 $stmt->bindparam(':touroku_date', $time, PDO::PARAM_STR); 213 214 $stmt->execute(); 215 216 // 使用を終了したので、閉じます 217 $stmt = null; 218 $pdo = null; 219 }else{ 220 } 221 222}else{ 223 224} 225
file.php ファイルをアップロードする画面
php
1<h1>画像アップロード</h1> 2<form method="post" enctype="multipart/form-data" action="upload_execute.php"> 3 4 <li> 5 <input type="file" name="upload_1" accept=".png, .jpg, .jpeg, .pdf" > 6 <input type="hidden" name="file_category" value="1"> 7 備考 8 <textarea name="other" class="textarea"></textarea> 9 </li> 10 11 <li> 12 <input type="file" name="upload_2" accept=".png, .jpg, .jpeg, .pdf" > 13 <input type="hidden" name="file_category" value="1"> 14 備考 15 <textarea name="other" class="textarea"></textarea> 16 </li> 17 18 <li> 19 <input type="file" name="upload_3" accept=".png, .jpg, .jpeg, .pdf" > 20 <input type="hidden" name="file_category" value="1"> 21 備考 22 <textarea name="other" class="textarea"></textarea> 23 </li> 24 25 <button type="submit" class="button">アップロード</button> 26</form> 27