source: branches/feature-module-update/data/class/SC_UploadFile.php @ 15358

Revision 15358, 11.8 KB checked in by nanasess, 17 years ago (diff)

リファクタリングと未定義変数の修正

  • Property svn:keywords set to Id
  • Property svn:mime-type set to application/x-httpd-php; charset=UTF-8
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8$SC_UPLOADFILE_DIR = realpath(dirname( __FILE__));
9require_once($SC_UPLOADFILE_DIR . "/../lib/gdthumb.php");
10
11/* アップロードファイル管理クラス */
12class 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(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    }
314}
315?>
Note: See TracBrowser for help on using the repository browser.