- Timestamp:
- 2007/08/24 22:21:44 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/feature-module-update/data/class/SC_UploadFile.php
r15080 r15358 7 7 8 8 $SC_UPLOADFILE_DIR = realpath(dirname( __FILE__)); 9 require_once($SC_UPLOADFILE_DIR . "/../lib/gdthumb.php"); 9 require_once($SC_UPLOADFILE_DIR . "/../lib/gdthumb.php"); 10 10 11 11 /* アップロードファイル管理クラス */ 12 12 class SC_UploadFile { 13 var $temp_dir; 14 var $save_dir; 15 var $keyname; // ファイルinputタグのname 16 var $width; // 横サイズ 17 var $height; // 縦サイズ 18 var $arrExt; // 指定する拡張子 19 var $temp_file; // 保存されたファイル名 20 var $save_file; // DBから読み出したファイル名 21 var $disp_name; // 項目名 22 var $size; // 制限サイズ 23 var $necessary; // 必須の場合:true 24 var $image; // 画像の場合:true 25 26 // ファイル管理クラス 27 function SC_UploadFile($temp_dir, $save_dir) { 28 $this->temp_dir = $temp_dir; 29 $this->save_dir = $save_dir; 30 $this->file_max = 0; 31 } 32 33 // ファイル情報追加 34 function addFile($disp_name, $keyname, $arrExt, $size, $necessary=false, $width=0, $height=0, $image=true) { 35 $this->disp_name[] = $disp_name; 36 $this->keyname[] = $keyname; 37 $this->width[] = $width; 38 $this->height[] = $height; 39 $this->arrExt[] = $arrExt; 40 $this->size[] = $size; 41 $this->necessary[] = $necessary; 42 $this->image[] = $image; 43 } 44 // サムネイル画像の作成 45 function makeThumb($src_file, $width, $height) { 46 // 一意なIDを取得する。 47 $uniqname = date("mdHi") . "_" . uniqid(""); 48 49 $dst_file = $this->temp_dir . $uniqname; 50 51 $objThumb = new gdthumb(); 52 $ret = $objThumb->Main($src_file, $width, $height, $dst_file); 53 54 if($ret[0] != 1) { 55 // エラーメッセージの表示 56 print($ret[1]); 57 exit; 58 } 59 60 return basename($ret[1]); 61 } 62 63 // アップロードされたファイルを保存する。 64 function makeTempFile($keyname, $rename = true) { 65 $objErr = new SC_CheckError(); 66 $cnt = 0; 67 $arrKeyname = array_flip($this->keyname); 68 69 if(!($_FILES[$keyname]['size'] > 0)) { 70 $objErr->arrErr[$keyname] = "※ " . $this->disp_name[$arrKeyname[$keyname]] . "がアップロードされていません。<br />"; 71 } else { 72 foreach($this->keyname as $val) { 73 // 一致したキーのファイルに情報を保存する。 74 if ($val == $keyname) { 75 // 拡張子チェック 76 $objErr->doFunc(array($this->disp_name[$cnt], $keyname, $this->arrExt[$cnt]), array("FILE_EXT_CHECK")); 77 // ファイルサイズチェック 78 $objErr->doFunc(array($this->disp_name[$cnt], $keyname, $this->size[$cnt]), array("FILE_SIZE_CHECK")); 79 // エラーがない場合 80 if(!isset($objErr->arrErr[$keyname])) { 81 // 画像ファイルの場合 82 if($this->image[$cnt]) { 83 $this->temp_file[$cnt] = $this->makeThumb($_FILES[$keyname]['tmp_name'], $this->width[$cnt], $this->height[$cnt]); 84 // 画像ファイル以外の場合 85 } else { 86 // 一意なファイル名を作成する。 87 if($rename) { 88 $uniqname = date("mdHi") . "_" . uniqid("")."."; 89 $this->temp_file[$cnt] = ereg_replace("^.*\.",$uniqname, $_FILES[$keyname]['name']); 90 } else { 91 $this->temp_file[$cnt] = $_FILES[$keyname]['name']; 92 } 93 $result = copy($_FILES[$keyname]['tmp_name'], $this->temp_dir. "/". $this->temp_file[$cnt]); 94 gfPrintLog($_FILES[$keyname]['name']." -> ".$this->temp_dir. "/". $this->temp_file[$cnt]); 95 } 96 } 97 } 98 $cnt++; 99 } 100 } 101 return $objErr->arrErr[$keyname]; 102 } 103 104 // 画像を削除する。 105 function deleteFile($keyname) { 106 $objImage = new SC_Image($this->temp_dir); 107 $cnt = 0; 108 foreach($this->keyname as $val) { 109 if ($val == $keyname) { 110 // 一時ファイルの場合削除する。 111 if($this->temp_file[$cnt] != "") { 112 $objImage->deleteImage($this->temp_file[$cnt], $this->save_dir); 113 } 114 $this->temp_file[$cnt] = ""; 115 $this->save_file[$cnt] = ""; 116 } 117 $cnt++; 118 } 119 } 120 121 // 一時ファイルパスを取得する。 122 function getTempFilePath($keyname) { 123 $cnt = 0; 124 $filepath = ""; 125 foreach($this->keyname as $val) { 126 if ($val == $keyname) { 127 if($this->temp_file[$cnt] != "") { 128 $filepath = $this->temp_dir . "/" . $this->temp_file[$cnt]; 129 } 130 } 131 $cnt++; 132 } 133 return $filepath; 134 } 135 136 // 一時ファイルを保存ディレクトリに移す 137 function moveTempFile() { 138 $cnt = 0; 139 $objImage = new SC_Image($this->temp_dir); 140 141 foreach($this->keyname as $val) { 142 if($this->temp_file[$cnt] != "") { 143 144 $objImage->moveTempImage($this->temp_file[$cnt], $this->save_dir); 145 // すでに保存ファイルがあった場合は削除する。 146 if($this->save_file[$cnt] != "" && !ereg("^sub/", $this->save_file[$cnt])) { 147 $objImage->deleteImage($this->save_file[$cnt], $this->save_dir); 148 } 149 } 150 $cnt++; 151 } 152 } 153 154 // HIDDEN用のファイル名配列を返す 155 function getHiddenFileList() { 156 $cnt = 0; 157 foreach($this->keyname as $val) { 158 if($this->temp_file[$cnt] != "") { 159 $arrRet["temp_" . $val] = $this->temp_file[$cnt]; 160 } 161 if($this->save_file[$cnt] != "") { 162 $arrRet["save_" . $val] = $this->save_file[$cnt]; 163 } 164 $cnt++; 165 } 166 return $arrRet; 167 } 168 169 // HIDDENで送られてきたファイル名を取得する 170 function setHiddenFileList($arrPOST) { 171 $cnt = 0; 172 foreach($this->keyname as $val) { 173 $key = "temp_" . $val; 174 if($arrPOST[$key] != "") { 175 $this->temp_file[$cnt] = $arrPOST[$key]; 176 } 177 $key = "save_" . $val; 178 if($arrPOST[$key] != "") { 179 $this->save_file[$cnt] = $arrPOST[$key]; 180 } 181 $cnt++; 182 } 183 } 184 185 // フォームに渡す用のファイル情報配列を返す 186 function getFormFileList($temp_url, $save_url, $real_size = false) { 187 188 $cnt = 0; 189 foreach($this->keyname as $val) { 190 if($this->temp_file[$cnt] != "") { 191 // ファイルパスチェック(パスのスラッシュ/が連続しないようにする。) 192 if(ereg("/$", $temp_url)) { 193 $arrRet[$val]['filepath'] = $temp_url . $this->temp_file[$cnt]; 194 } else { 195 $arrRet[$val]['filepath'] = $temp_url . "/" . $this->temp_file[$cnt]; 196 } 197 $arrRet[$val]['real_filepath'] = $this->temp_dir . $this->temp_file[$cnt]; 198 } elseif ($this->save_file[$cnt] != "") { 199 // ファイルパスチェック(パスのスラッシュ/が連続しないようにする。) 200 if(ereg("/$", $save_url)) { 201 $arrRet[$val]['filepath'] = $save_url . $this->save_file[$cnt]; 202 } else { 203 $arrRet[$val]['filepath'] = $save_url . "/" . $this->save_file[$cnt]; 204 } 205 $arrRet[$val]['real_filepath'] = $this->save_dir . $this->save_file[$cnt]; 206 } 207 if($arrRet[$val]['filepath'] != "") { 208 if($real_size){ 209 if(is_file($arrRet[$val]['real_filepath'])) { 210 list($width, $height) = getimagesize($arrRet[$val]['real_filepath']); 211 } 212 // ファイル横幅 213 $arrRet[$val]['width'] = $width; 214 // ファイル縦幅 215 $arrRet[$val]['height'] = $height; 216 }else{ 217 // ファイル横幅 218 $arrRet[$val]['width'] = $this->width[$cnt]; 219 // ファイル縦幅 220 $arrRet[$val]['height'] = $this->height[$cnt]; 221 } 222 // 表示名 223 $arrRet[$val]['disp_name'] = $this->disp_name[$cnt]; 224 } 225 $cnt++; 226 } 227 return $arrRet; 228 } 229 230 // DB保存用のファイル名配列を返す 231 function getDBFileList() { 232 $cnt = 0; 233 foreach($this->keyname as $val) { 234 if($this->temp_file[$cnt] != "") { 235 $arrRet[$val] = $this->temp_file[$cnt]; 236 } else { 237 $arrRet[$val] = $this->save_file[$cnt]; 238 } 239 $cnt++; 240 } 241 return $arrRet; 242 } 243 244 // DBで保存されたファイル名配列をセットする 245 function setDBFileList($arrVal) { 246 $cnt = 0; 247 foreach($this->keyname as $val) { 248 if($arrVal[$val] != "") { 249 $this->save_file[$cnt] = $arrVal[$val]; 250 } 251 $cnt++; 252 } 253 } 254 255 // 画像をセットする 256 function setDBImageList($arrVal) { 257 $cnt = 0; 258 foreach($this->keyname as $val) { 259 if($arrVal[$val] != "" && $val == 'tv_products_image') { 260 $this->save_file[$cnt] = $arrVal[$val]; 261 } 262 $cnt++; 263 } 264 } 265 266 // DB上のファイルの内削除要求があったファイルを削除する。 267 function deleteDBFile($arrVal) { 268 $objImage = new SC_Image($this->temp_dir); 269 $cnt = 0; 270 foreach($this->keyname as $val) { 271 if($arrVal[$val] != "") { 272 if($this->save_file[$cnt] == "" && !ereg("^sub/", $arrVal[$val])) { 273 $objImage->deleteImage($arrVal[$val], $this->save_dir); 274 } 275 } 276 $cnt++; 277 } 278 } 279 280 // 必須判定 281 function checkEXISTS($keyname = "") { 282 $cnt = 0; 283 $arrRet = array(); 284 foreach($this->keyname as $val) { 285 if($val == $keyname || $keyname == "") { 286 // 必須であればエラーチェック 287 if ($this->necessary[$cnt] == true) { 288 if($this->save_file[$cnt] == "" && $this->temp_file[$cnt] == "") { 289 $arrRet[$val] = "※ " . $this->disp_name[$cnt] . "がアップロードされていません。<br>"; 290 } 291 } 292 } 293 $cnt++; 294 } 295 return $arrRet; 296 } 297 298 // 拡大率を指定して画像保存 299 function saveResizeImage($keyname, $to_w, $to_h) { 300 $path = ""; 301 302 // keynameの添付ファイルを取得 303 $arrImageKey = array_flip($this->keyname); 304 $file = $this->temp_file[$arrImageKey[$keyname]]; 305 $filepath = $this->temp_dir . $file; 306 307 $path = $this->makeThumb($filepath, $to_w, $to_h); 308 309 // ファイル名だけ返す 310 return basename($path); 311 } 13 var $temp_dir; 14 var $save_dir; 15 var $keyname; // ファイルinputタグのname 16 var $width; // 横サイズ 17 var $height; // 縦サイズ 18 var $arrExt; // 指定する拡張子 19 var $temp_file; // 保存されたファイル名 20 var $save_file; // DBから読み出したファイル名 21 var $disp_name; // 項目名 22 var $size; // 制限サイズ 23 var $necessary; // 必須の場合:true 24 var $image; // 画像の場合:true 25 26 // ファイル管理クラス 27 function SC_UploadFile($temp_dir, $save_dir) { 28 $this->temp_dir = $temp_dir; 29 $this->save_dir = $save_dir; 30 $this->file_max = 0; 31 } 32 33 // ファイル情報追加 34 function addFile($disp_name, $keyname, $arrExt, $size, $necessary=false, $width=0, $height=0, $image=true) { 35 $this->disp_name[] = $disp_name; 36 $this->keyname[] = $keyname; 37 $this->width[] = $width; 38 $this->height[] = $height; 39 $this->arrExt[] = $arrExt; 40 $this->size[] = $size; 41 $this->necessary[] = $necessary; 42 $this->image[] = $image; 43 } 44 // サムネイル画像の作成 45 function makeThumb($src_file, $width, $height) { 46 // 一意なIDを取得する。 47 $uniqname = date("mdHi") . "_" . uniqid(""); 48 49 $dst_file = $this->temp_dir . $uniqname; 50 51 $objThumb = new gdthumb(); 52 $ret = $objThumb->Main($src_file, $width, $height, $dst_file); 53 54 if($ret[0] != 1) { 55 // エラーメッセージの表示 56 print($ret[1]); 57 exit; 58 } 59 60 return basename($ret[1]); 61 } 62 63 // アップロードされたファイルを保存する。 64 function makeTempFile($keyname, $rename = true) { 65 $objErr = new SC_CheckError(); 66 $cnt = 0; 67 $arrKeyname = array_flip($this->keyname); 68 69 if(!($_FILES[$keyname]['size'] > 0)) { 70 $objErr->arrErr[$keyname] = "※ " . $this->disp_name[$arrKeyname[$keyname]] . "がアップロードされていません。<br />"; 71 } else { 72 foreach($this->keyname as $val) { 73 // 一致したキーのファイルに情報を保存する。 74 if ($val == $keyname) { 75 // 拡張子チェック 76 $objErr->doFunc(array($this->disp_name[$cnt], $keyname, $this->arrExt[$cnt]), array("FILE_EXT_CHECK")); 77 // ファイルサイズチェック 78 $objErr->doFunc(array($this->disp_name[$cnt], $keyname, $this->size[$cnt]), array("FILE_SIZE_CHECK")); 79 // エラーがない場合 80 if(!isset($objErr->arrErr[$keyname])) { 81 // 画像ファイルの場合 82 if($this->image[$cnt]) { 83 $this->temp_file[$cnt] = $this->makeThumb($_FILES[$keyname]['tmp_name'], $this->width[$cnt], $this->height[$cnt]); 84 // 画像ファイル以外の場合 85 } else { 86 // 一意なファイル名を作成する。 87 if($rename) { 88 $uniqname = date("mdHi") . "_" . uniqid("")."."; 89 $this->temp_file[$cnt] = ereg_replace("^.*\.",$uniqname, $_FILES[$keyname]['name']); 90 } else { 91 $this->temp_file[$cnt] = $_FILES[$keyname]['name']; 92 } 93 $result = copy($_FILES[$keyname]['tmp_name'], $this->temp_dir. "/". $this->temp_file[$cnt]); 94 gfPrintLog($_FILES[$keyname]['name']." -> ".$this->temp_dir. "/". $this->temp_file[$cnt]); 95 } 96 } 97 } 98 $cnt++; 99 } 100 } 101 return $objErr->arrErr[$keyname]; 102 } 103 104 // 画像を削除する。 105 function deleteFile($keyname) { 106 $objImage = new SC_Image($this->temp_dir); 107 $cnt = 0; 108 foreach($this->keyname as $val) { 109 if ($val == $keyname) { 110 // 一時ファイルの場合削除する。 111 if($this->temp_file[$cnt] != "") { 112 $objImage->deleteImage($this->temp_file[$cnt], $this->save_dir); 113 } 114 $this->temp_file[$cnt] = ""; 115 $this->save_file[$cnt] = ""; 116 } 117 $cnt++; 118 } 119 } 120 121 // 一時ファイルパスを取得する。 122 function getTempFilePath($keyname) { 123 $cnt = 0; 124 $filepath = ""; 125 foreach($this->keyname as $val) { 126 if ($val == $keyname) { 127 if($this->temp_file[$cnt] != "") { 128 $filepath = $this->temp_dir . "/" . $this->temp_file[$cnt]; 129 } 130 } 131 $cnt++; 132 } 133 return $filepath; 134 } 135 136 // 一時ファイルを保存ディレクトリに移す 137 function moveTempFile() { 138 $cnt = 0; 139 $objImage = new SC_Image($this->temp_dir); 140 141 foreach($this->keyname as $val) { 142 if(isset($this->temp_file[$cnt]) && $this->temp_file[$cnt] != "") { 143 144 $objImage->moveTempImage($this->temp_file[$cnt], $this->save_dir); 145 // すでに保存ファイルがあった場合は削除する。 146 if($this->save_file[$cnt] != "" && !ereg("^sub/", $this->save_file[$cnt])) { 147 $objImage->deleteImage($this->save_file[$cnt], $this->save_dir); 148 } 149 } 150 $cnt++; 151 } 152 } 153 154 // HIDDEN用のファイル名配列を返す 155 function getHiddenFileList() { 156 $cnt = 0; 157 $arrRet = array(); 158 foreach($this->keyname as $val) { 159 if(isset($this->temp_file[$cnt]) && $this->temp_file[$cnt] != "") { 160 $arrRet["temp_" . $val] = $this->temp_file[$cnt]; 161 } 162 if(isset($this->save_file[$cnt]) && $this->save_file[$cnt] != "") { 163 $arrRet["save_" . $val] = $this->save_file[$cnt]; 164 } 165 $cnt++; 166 } 167 return $arrRet; 168 } 169 170 // HIDDENで送られてきたファイル名を取得する 171 function setHiddenFileList($arrPOST) { 172 $cnt = 0; 173 foreach($this->keyname as $val) { 174 $key = "temp_" . $val; 175 if(isset($arrPOST[$key]) && !empty($arrPOST[$key])) { 176 $this->temp_file[$cnt] = $arrPOST[$key]; 177 } 178 $key = "save_" . $val; 179 if(isset($arrPOST[$key]) && !empty($arrPOST[$key])) { 180 $this->save_file[$cnt] = $arrPOST[$key]; 181 } 182 $cnt++; 183 } 184 } 185 186 // フォームに渡す用のファイル情報配列を返す 187 function getFormFileList($temp_url, $save_url, $real_size = false) { 188 $arrRet = array(); 189 $cnt = 0; 190 foreach($this->keyname as $val) { 191 if(isset($this->temp_file[$cnt]) && $this->temp_file[$cnt] != "") { 192 // ファイルパスチェック(パスのスラッシュ/が連続しないようにする。) 193 if(ereg("/$", $temp_url)) { 194 $arrRet[$val]['filepath'] = $temp_url . $this->temp_file[$cnt]; 195 } else { 196 $arrRet[$val]['filepath'] = $temp_url . "/" . $this->temp_file[$cnt]; 197 } 198 $arrRet[$val]['real_filepath'] = $this->temp_dir . $this->temp_file[$cnt]; 199 } elseif (isset($this->save_file[$cnt]) && $this->save_file[$cnt] != "") { 200 // ファイルパスチェック(パスのスラッシュ/が連続しないようにする。) 201 if(ereg("/$", $save_url)) { 202 $arrRet[$val]['filepath'] = $save_url . $this->save_file[$cnt]; 203 } else { 204 $arrRet[$val]['filepath'] = $save_url . "/" . $this->save_file[$cnt]; 205 } 206 $arrRet[$val]['real_filepath'] = $this->save_dir . $this->save_file[$cnt]; 207 } 208 if(isset($arrRet[$val]['filepath']) && !empty($arrRet[$val]['filepath'])) { 209 if($real_size){ 210 if(is_file($arrRet[$val]['real_filepath'])) { 211 list($width, $height) = getimagesize($arrRet[$val]['real_filepath']); 212 } 213 // ファイル横幅 214 $arrRet[$val]['width'] = $width; 215 // ファイル縦幅 216 $arrRet[$val]['height'] = $height; 217 }else{ 218 // ファイル横幅 219 $arrRet[$val]['width'] = $this->width[$cnt]; 220 // ファイル縦幅 221 $arrRet[$val]['height'] = $this->height[$cnt]; 222 } 223 // 表示名 224 $arrRet[$val]['disp_name'] = $this->disp_name[$cnt]; 225 } 226 $cnt++; 227 } 228 return $arrRet; 229 } 230 231 // DB保存用のファイル名配列を返す 232 function getDBFileList() { 233 $cnt = 0; 234 foreach($this->keyname as $val) { 235 if(isset($this->temp_file[$cnt]) && $this->temp_file[$cnt] != "") { 236 $arrRet[$val] = $this->temp_file[$cnt]; 237 } else { 238 $arrRet[$val] = $this->save_file[$cnt]; 239 } 240 $cnt++; 241 } 242 return $arrRet; 243 } 244 245 // DBで保存されたファイル名配列をセットする 246 function setDBFileList($arrVal) { 247 $cnt = 0; 248 foreach($this->keyname as $val) { 249 if(isset($arrVal[$val]) && $arrVal[$val] != "") { 250 $this->save_file[$cnt] = $arrVal[$val]; 251 } 252 $cnt++; 253 } 254 } 255 256 // 画像をセットする 257 function setDBImageList($arrVal) { 258 $cnt = 0; 259 foreach($this->keyname as $val) { 260 if($arrVal[$val] != "" && $val == 'tv_products_image') { 261 $this->save_file[$cnt] = $arrVal[$val]; 262 } 263 $cnt++; 264 } 265 } 266 267 // DB上のファイルの内削除要求があったファイルを削除する。 268 function deleteDBFile($arrVal) { 269 $objImage = new SC_Image($this->temp_dir); 270 $cnt = 0; 271 foreach($this->keyname as $val) { 272 if($arrVal[$val] != "") { 273 if($this->save_file[$cnt] == "" && !ereg("^sub/", $arrVal[$val])) { 274 $objImage->deleteImage($arrVal[$val], $this->save_dir); 275 } 276 } 277 $cnt++; 278 } 279 } 280 281 // 必須判定 282 function checkEXISTS($keyname = "") { 283 $cnt = 0; 284 $arrRet = array(); 285 foreach($this->keyname as $val) { 286 if($val == $keyname || $keyname == "") { 287 // 必須であればエラーチェック 288 if ($this->necessary[$cnt] == true) { 289 if(isset($this->save_file[$cnt]) && $this->save_file[$cnt] == "" 290 && isset($this->temp_file[$cnt]) && $this->temp_file[$cnt] == "") { 291 $arrRet[$val] = "※ " . $this->disp_name[$cnt] . "がアップロードされていません。<br>"; 292 } 293 } 294 } 295 $cnt++; 296 } 297 return $arrRet; 298 } 299 300 // 拡大率を指定して画像保存 301 function saveResizeImage($keyname, $to_w, $to_h) { 302 $path = ""; 303 304 // keynameの添付ファイルを取得 305 $arrImageKey = array_flip($this->keyname); 306 $file = $this->temp_file[$arrImageKey[$keyname]]; 307 $filepath = $this->temp_dir . $file; 308 309 $path = $this->makeThumb($filepath, $to_w, $to_h); 310 311 // ファイル名だけ返す 312 return basename($path); 313 } 312 314 } 313 315 ?>
Note: See TracChangeset
for help on using the changeset viewer.