source: branches/feature-module-paygent/data/class/SC_UploadFile.php @ 14676

Revision 14676, 14.9 KB checked in by adati, 17 years ago (diff)

1.4.0a-betaのマージ

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");
10require_once($SC_UPLOADFILE_DIR . "/../include/ftp.php");
11
12/* ¥¢¥Ã¥×¥í¡¼¥É¥Õ¥¡¥¤¥ë´ÉÍý¥¯¥é¥¹ */
13class SC_UploadFile {
14    var $temp_dir;                  // °ì»þ¥Õ¥¡¥¤¥ëÊݸ¥Ç¥£¥ì¥¯¥È¥ê
15    var $save_dir;                  // ¥Õ¥¡¥¤¥ëÊݸ¥Ç¥£¥ì¥¯¥È
16    var $ftp_temp_dir;              // FTPÀè°ì»þ¥Ç¥£¥ì¥¯¥È¥ê(Éé²Ùʬ»¶»þ»ÈÍÑ)
17    var $ftp_save_dir;              // FTPÀè¥Õ¥¡¥¤¥ëÊݸ¥Ç¥£¥ì¥¯¥È¥ê(Éé²Ùʬ»¶»þ»ÈÍÑ)
18    var $multi_web_server_mode;     // Éé²Ùʬ»¶¥Õ¥é¥°(Éé²Ùʬ»¶»þ»ÈÍÑ)
19    var $keyname;                   // ¥Õ¥¡¥¤¥ëinput¥¿¥°¤Îname
20    var $width;                     // ²£¥µ¥¤¥º
21    var $height;                    // ½Ä¥µ¥¤¥º
22    var $arrExt;                    // »ØÄꤹ¤ë³ÈÄ¥»Ò
23    var $temp_file;                 // Êݸ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë̾
24    var $save_file;                 // DB¤«¤éÆɤ߽Ф·¤¿¥Õ¥¡¥¤¥ë̾
25    var $disp_name;                 // ¹àÌÜ̾
26    var $size;                      // À©¸Â¥µ¥¤¥º
27    var $necessary;                 // ɬ¿Ü¤Î¾ì¹ç:true
28    var $image;                     // ²èÁü¤Î¾ì¹ç:true
29
30    // ¥Õ¥¡¥¤¥ë´ÉÍý¥¯¥é¥¹
31    function SC_UploadFile($temp_dir, $save_dir, $ftp_temp_dir = "", $ftp_save_dir = "", $multi_web_server_mode = false) {
32        $this->temp_dir = $temp_dir;
33        $this->save_dir = $save_dir;
34        $this->ftp_temp_dir = $ftp_temp_dir;
35        $this->ftp_save_dir = $ftp_save_dir;
36        $this->multi_web_server_mode = $multi_web_server_mode;
37        $this->file_max = 0;
38    }
39
40    // ¥Õ¥¡¥¤¥ë¾ðÊóÄɲÃ
41    function addFile($disp_name, $keyname, $arrExt, $size, $necessary=false, $width=0, $height=0, $image=true) {
42        $this->disp_name[] = $disp_name;
43        $this->keyname[] = $keyname;
44        $this->width[] = $width;
45        $this->height[] = $height;
46        $this->arrExt[] = $arrExt;
47        $this->size[] = $size;
48        $this->necessary[] = $necessary;
49        $this->image[] = $image;
50    }
51    // ¥µ¥à¥Í¥¤¥ë²èÁü¤ÎºîÀ®
52    function makeThumb($src_file, $width, $height) {
53        // °ì°Õ¤ÊID¤ò¼èÆÀ¤¹¤ë¡£
54        $uniqname = date("mdHi") . "_" . uniqid("");
55       
56        $objThumb = new gdthumb();
57       
58        // WEB¥µ¡¼¥ÐÉé²Ùʬ»¶´Ä¶­¤Î¾ì¹ç
59        if($this->multi_web_server_mode === true) {
60           
61            // FTPÍÑ¥Õ¥¡¥¤¥ë°ì»þ³ÊǼÍѥǥ£¥ì¥¯¥È¥êºîÀ®
62            $ftp_temp_dir = $this->makeFtpTempDir($this->temp_dir);
63            $dst_file = $ftp_temp_dir . $uniqname;
64            $ret = $objThumb->Main($src_file, $width, $height, $dst_file);
65            $this->ftpMoveFile($this->ftp_temp_dir . basename($ret[1]), $ret[1], true);
66        } else {
67            $dst_file = $this->temp_dir . $uniqname;
68            $ret = $objThumb->Main($src_file, $width, $height, $dst_file);         
69        }
70       
71        if($ret[0] != 1) {
72            // ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Îɽ¼¨
73            print($ret[1]);
74            exit;
75        }
76       
77        return basename($ret[1]);
78    }
79       
80    // ¥¢¥Ã¥×¥í¡¼¥É¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤òÊݸ¤¹¤ë¡£
81    function makeTempFile($keyname, $rename = true) {
82        $objErr = new SC_CheckError();
83        $cnt = 0;
84        $arrKeyname = array_flip($this->keyname);
85       
86        if(!($_FILES[$keyname]['size'] > 0)) {
87            $objErr->arrErr[$keyname] = "¢¨ " . $this->disp_name[$arrKeyname[$keyname]] . "¤¬¥¢¥Ã¥×¥í¡¼¥É¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£<br />";
88        } else {
89            foreach($this->keyname as $val) {
90                // °ìÃפ·¤¿¥­¡¼¤Î¥Õ¥¡¥¤¥ë¤Ë¾ðÊó¤òÊݸ¤¹¤ë¡£
91                if ($val == $keyname) {
92                    // ³ÈÄ¥»Ò¥Á¥§¥Ã¥¯
93                    $objErr->doFunc(array($this->disp_name[$cnt], $keyname, $this->arrExt[$cnt]), array("FILE_EXT_CHECK"));
94                    // ¥Õ¥¡¥¤¥ë¥µ¥¤¥º¥Á¥§¥Ã¥¯
95                    $objErr->doFunc(array($this->disp_name[$cnt], $keyname, $this->size[$cnt]), array("FILE_SIZE_CHECK"));
96                    // ¥¨¥é¡¼¤¬¤Ê¤¤¾ì¹ç
97                    if(!isset($objErr->arrErr[$keyname])) {
98                        // ²èÁü¥Õ¥¡¥¤¥ë¤Î¾ì¹ç
99                        if($this->image[$cnt]) {
100                            $this->temp_file[$cnt] = $this->makeThumb($_FILES[$keyname]['tmp_name'], $this->width[$cnt], $this->height[$cnt]);
101                        // ²èÁü¥Õ¥¡¥¤¥ë°Ê³°¤Î¾ì¹ç
102                        } else {
103                            // °ì°Õ¤Ê¥Õ¥¡¥¤¥ë̾¤òºîÀ®¤¹¤ë¡£
104                            if($rename) {
105                                $uniqname = date("mdHi") . "_" . uniqid("").".";
106                                $this->temp_file[$cnt] = ereg_replace("^.*\.",$uniqname, $_FILES[$keyname]['name']);
107                            } else {
108                                $this->temp_file[$cnt] = $_FILES[$keyname]['name'];   
109                            }
110                            $result  = copy($_FILES[$keyname]['tmp_name'], $this->temp_dir. "/". $this->temp_file[$cnt]);
111                            gfPrintLog($_FILES[$keyname]['name']." -> ".$this->temp_dir. "/". $this->temp_file[$cnt]);
112                        }
113                    }
114                }
115                $cnt++;
116            }
117        }
118        return $objErr->arrErr[$keyname];
119    }
120
121    // ²èÁü¤òºï½ü¤¹¤ë¡£
122    function deleteFile($keyname) {
123        $objImage = new SC_Image($this->temp_dir);
124        $cnt = 0;
125        foreach($this->keyname as $val) {
126            if ($val == $keyname) {
127                // °ì»þ¥Õ¥¡¥¤¥ë¤Î¾ì¹çºï½ü¤¹¤ë¡£
128                if($this->temp_file[$cnt] != "") {
129                    // Éé²Ùʬ»¶»þ¤Ï¤¹¤Ù¤Æ¤Î¥µ¡¼¥Ð¤«¤éºï½ü
130                    if($this->multi_web_server_mode === true) {
131                        $this->ftpDeleteFile($this->ftp_temp_dir . $this->temp_file[$cnt]);
132                    } else {
133                        $objImage->deleteImage($this->temp_file[$cnt], $this->save_dir);
134                    }
135                }
136                $this->temp_file[$cnt] = "";
137                $this->save_file[$cnt] = "";
138            }
139            $cnt++;
140        }
141    }
142   
143    // °ì»þ¥Õ¥¡¥¤¥ë¥Ñ¥¹¤ò¼èÆÀ¤¹¤ë¡£
144    function getTempFilePath($keyname) {
145        $cnt = 0;
146        $filepath = "";
147        foreach($this->keyname as $val) {
148            if ($val == $keyname) {
149                if($this->temp_file[$cnt] != "") {
150                    $filepath = $this->temp_dir . "/" . $this->temp_file[$cnt];
151                }
152            }
153            $cnt++;
154        }
155        return $filepath;
156    }
157   
158    // °ì»þ¥Õ¥¡¥¤¥ë¤òÊݸ¥Ç¥£¥ì¥¯¥È¥ê¤Ë°Ü¤¹
159    function moveTempFile() {
160        $cnt = 0;
161        $objImage = new SC_Image($this->temp_dir);
162       
163        foreach($this->keyname as $val) {
164            if($this->temp_file[$cnt] != "") {
165                // Éé²Ùʬ»¶»þ¤Ï¤¹¤Ù¤Æ¤Î¥µ¡¼¥Ð¤Ç°ÜÆ°¤ò¼Â¹Ô
166                if($this->multi_web_server_mode === true) {
167                    $dist_path = $this->ftp_save_dir . $this->temp_file[$cnt];
168                    $src_path = $this->temp_dir . $this->temp_file[$cnt];
169                    $this->ftpMoveFile($dist_path, $src_path);
170                } else {
171                    $objImage->moveTempImage($this->temp_file[$cnt], $this->save_dir);
172                }
173               
174                // ¤¹¤Ç¤ËÊݸ¥Õ¥¡¥¤¥ë¤¬¤¢¤Ã¤¿¾ì¹ç¤Ïºï½ü¤¹¤ë¡£
175                if($this->save_file[$cnt] != "" && !ereg("^sub/", $this->save_file[$cnt])) {
176                    // Éé²Ùʬ»¶»þ¤Ï¤¹¤Ù¤Æ¤Î¥µ¡¼¥Ð¤Ç¥Õ¥¡¥¤¥ëºï½ü
177                    if($this->multi_web_server_mode === true) {
178                        $this->ftpDeleteFile($this->ftp_save_dir . $this->save_file[$cnt]);
179                    } else {
180                        $objImage->deleteImage($this->save_file[$cnt], $this->save_dir);
181                    }
182                }
183            }
184            $cnt++;
185        }
186    }
187   
188    // HIDDENÍѤΥե¡¥¤¥ë̾ÇÛÎó¤òÊÖ¤¹
189    function getHiddenFileList() {
190        $cnt = 0;
191        foreach($this->keyname as $val) {
192            if($this->temp_file[$cnt] != "") {
193                $arrRet["temp_" . $val] = $this->temp_file[$cnt];
194            }
195            if($this->save_file[$cnt] != "") {
196                $arrRet["save_" . $val] = $this->save_file[$cnt];
197            }
198            $cnt++;
199        }
200        return $arrRet;
201    }
202   
203    // HIDDEN¤ÇÁ÷¤é¤ì¤Æ¤­¤¿¥Õ¥¡¥¤¥ë̾¤ò¼èÆÀ¤¹¤ë
204    function setHiddenFileList($arrPOST) {
205        $cnt = 0;
206        foreach($this->keyname as $val) {
207            $key = "temp_" . $val;
208            if($arrPOST[$key] != "") {
209                $this->temp_file[$cnt] = $arrPOST[$key];
210            }
211            $key = "save_" . $val;
212            if($arrPOST[$key] != "") {
213                $this->save_file[$cnt] = $arrPOST[$key];
214            }
215            $cnt++;
216        }
217    }
218   
219    // ¥Õ¥©¡¼¥à¤ËÅϤ¹ÍѤΥե¡¥¤¥ë¾ðÊóÇÛÎó¤òÊÖ¤¹
220    function getFormFileList($temp_url, $save_url, $real_size = false) {
221
222        $cnt = 0;
223        foreach($this->keyname as $val) {
224            if($this->temp_file[$cnt] != "") {
225                // ¥Õ¥¡¥¤¥ë¥Ñ¥¹¥Á¥§¥Ã¥¯(¥Ñ¥¹¤Î¥¹¥é¥Ã¥·¥å/¤¬Ï¢Â³¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¡£)
226                if(ereg("/$", $temp_url)) {
227                    $arrRet[$val]['filepath'] = $temp_url . $this->temp_file[$cnt];
228                } else {
229                    $arrRet[$val]['filepath'] = $temp_url . "/" . $this->temp_file[$cnt];
230                }
231                $arrRet[$val]['real_filepath'] = $this->temp_dir . $this->temp_file[$cnt];
232            } elseif ($this->save_file[$cnt] != "") {
233                // ¥Õ¥¡¥¤¥ë¥Ñ¥¹¥Á¥§¥Ã¥¯(¥Ñ¥¹¤Î¥¹¥é¥Ã¥·¥å/¤¬Ï¢Â³¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¡£)
234                if(ereg("/$", $save_url)) {
235                    $arrRet[$val]['filepath'] = $save_url . $this->save_file[$cnt];
236                } else {
237                    $arrRet[$val]['filepath'] = $save_url . "/" . $this->save_file[$cnt];
238                }
239                $arrRet[$val]['real_filepath'] = $this->save_dir . $this->save_file[$cnt];
240            }
241            if($arrRet[$val]['filepath'] != "") {
242                if($real_size){
243                    if(is_file($arrRet[$val]['real_filepath'])) {
244                        list($width, $height) = getimagesize($arrRet[$val]['real_filepath']);
245                    }
246                    // ¥Õ¥¡¥¤¥ë²£Éý
247                    $arrRet[$val]['width'] = $width;
248                    // ¥Õ¥¡¥¤¥ë½ÄÉý
249                    $arrRet[$val]['height'] = $height;
250                }else{
251                    // ¥Õ¥¡¥¤¥ë²£Éý
252                    $arrRet[$val]['width'] = $this->width[$cnt];
253                    // ¥Õ¥¡¥¤¥ë½ÄÉý
254                    $arrRet[$val]['height'] = $this->height[$cnt];
255                }
256                // ɽ¼¨Ì¾
257                $arrRet[$val]['disp_name'] = $this->disp_name[$cnt];
258            }
259            $cnt++;
260        }
261        return $arrRet;
262    }
263   
264    // DBÊݸÍѤΥե¡¥¤¥ë̾ÇÛÎó¤òÊÖ¤¹
265    function getDBFileList() {
266        $cnt = 0;
267        foreach($this->keyname as $val) {
268            if($this->temp_file[$cnt] != "") {
269                $arrRet[$val] = $this->temp_file[$cnt];
270            } else  {
271                $arrRet[$val] = $this->save_file[$cnt];
272            }
273            $cnt++;
274        }
275        return $arrRet;
276    }
277   
278    // DB¤ÇÊݸ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë̾ÇÛÎó¤ò¥»¥Ã¥È¤¹¤ë
279    function setDBFileList($arrVal) {
280        $cnt = 0;
281        foreach($this->keyname as $val) {
282            if($arrVal[$val] != "") {
283                $this->save_file[$cnt] = $arrVal[$val];
284            }
285            $cnt++;
286        }
287    }
288   
289    // ²èÁü¤ò¥»¥Ã¥È¤¹¤ë
290    function setDBImageList($arrVal) {
291        $cnt = 0;
292        foreach($this->keyname as $val) {
293            if($arrVal[$val] != "" && $val == 'tv_products_image') {
294                $this->save_file[$cnt] = $arrVal[$val];
295            }
296            $cnt++;
297        }
298    }
299   
300    // DB¾å¤Î¥Õ¥¡¥¤¥ë¤ÎÆâºï½üÍ׵᤬¤¢¤Ã¤¿¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë¡£
301    function deleteDBFile($arrVal) {
302        $objImage = new SC_Image($this->temp_dir);
303        $cnt = 0;
304        foreach($this->keyname as $val) {
305            if($arrVal[$val] != "") {
306                if($this->save_file[$cnt] == "" && !ereg("^sub/", $arrVal[$val])) {
307                   
308                    // Éé²Ùʬ»¶»þ¤Ï¤¹¤Ù¤Æ¤Î¥µ¡¼¥Ð¤Ç¥Õ¥¡¥¤¥ëºï½ü
309                    if($this->multi_web_server_mode === true) {
310                        $this->ftpDeleteFile($this->ftp_save_dir . $arrVal[$val]);
311                    } else {
312                        $objImage->deleteImage($arrVal[$val], $this->save_dir);
313                    }
314                }
315            }
316            $cnt++;
317        }
318    }
319   
320    // ɬ¿ÜȽÄê
321    function checkEXISTS($keyname = "") {
322        $cnt = 0;
323        $arrRet = array();
324        foreach($this->keyname as $val) {
325            if($val == $keyname || $keyname == "") {
326                // ɬ¿Ü¤Ç¤¢¤ì¤Ð¥¨¥é¡¼¥Á¥§¥Ã¥¯
327                if ($this->necessary[$cnt] == true) {
328                    if($this->save_file[$cnt] == "" && $this->temp_file[$cnt] == "") {
329                        $arrRet[$val] = "¢¨ " . $this->disp_name[$cnt] . "¤¬¥¢¥Ã¥×¥í¡¼¥É¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£<br>";
330                    }
331                }
332            }
333            $cnt++;
334        }
335        return $arrRet;
336    }
337       
338    // ³ÈÂçΨ¤ò»ØÄꤷ¤Æ²èÁüÊݸ
339    function saveResizeImage($keyname, $to_w, $to_h) {
340        $path = "";
341       
342        // keyname¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤ò¼èÆÀ
343        $arrImageKey = array_flip($this->keyname);
344        $file = $this->temp_file[$arrImageKey[$keyname]];
345        $filepath = $this->temp_dir . $file;
346       
347        $path = $this->makeThumb($filepath, $to_w, $to_h);
348       
349        // ¥Õ¥¡¥¤¥ë̾¤À¤±ÊÖ¤¹
350        return basename($path);
351    }
352
353    /**         
354     * ¥Õ¥¡¥¤¥ë¤òÁ´¤Æ¤ÎWEB¥µ¡¼¥Ð¤Ø¥³¥Ô¡¼
355     *
356     * @param string $dst_path ¥³¥Ô¡¼Àè¥Õ¥¡¥¤¥ë¥Ñ¥¹(ÁêÂХѥ¹)
357     * @param string $src_path ¥³¥Ô¡¼¸µ¥Õ¥¡¥¤¥ë¥Ñ¥¹(ÀäÂХѥ¹)
358     * @param boolean $del_flag °ÜÆ°¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë¥Õ¥é¥°
359     * @return void
360     */
361    function ftpMoveFile($dst_path, $src_path, $del_flag = false) {
362        global $arrWEB_SERVERS;
363
364        // Á´¤Æ¤Î¥µ¡¼¥Ð¤Ë¥Õ¥¡¥¤¥ë¤ò¥³¥Ô¡¼¤¹¤ë
365        foreach($arrWEB_SERVERS as $array) {
366            sfFtpCopy($array['host'], $array['user'], $array['pass'], $dst_path, $src_path);
367        }
368        // °ÜÆ°¸å¤Ï¥Õ¥¡¥¤¥ë¤òºï½ü
369        if($del_flag === true) {
370            @unlink($src_path);
371        }
372    }
373
374    /**         
375     * ¥Õ¥¡¥¤¥ë¤òÁ´¤Æ¤ÎWEB¥µ¡¼¥Ð¾å¤«¤éºï½ü
376     *
377     * @param string $dst_path ¥³¥Ô¡¼Àè¥Õ¥¡¥¤¥ë¥Ñ¥¹(ÁêÂХѥ¹)
378     * @return void
379     */
380    function ftpDeleteFile($dst_path) {
381        global $arrWEB_SERVERS;
382
383        // Á´¤Æ¤Î¥µ¡¼¥Ð¤Ë¥Õ¥¡¥¤¥ë¤ò¥³¥Ô¡¼¤¹¤ë
384        foreach($arrWEB_SERVERS as $array) {
385            sfFtpDelete($array['host'], $array['user'], $array['pass'], $dst_path);
386        }
387    }
388
389
390    /**
391     * FTPÍÑ¥Õ¥¡¥¤¥ë°ì»þ³ÊǼ¥Ç¥£¥ì¥¯¥È¥êºîÀ®
392     *
393     * @param string $dir ºîÀ®¥Ç¥£¥ì¥¯¥È¥ê
394     * @return string $ftp_temp_dir ºîÀ®°ì»þ³ÊǼ¥Ç¥£¥ì¥¯¥È¥ê¥Ñ¥¹
395     */
396    function makeFtpTempDir($dir) {
397        // FTPÍÑ¥Õ¥¡¥¤¥ë°ì»þ³ÊǼÍѥǥ£¥ì¥¯¥È¥ê
398        $ftp_temp_dir = $this->temp_dir . "ftp_temp/";
399        // ¥Ç¥£¥ì¥¯¥È¥ê¤¬Â¸ºß¤·¤Ê¤«¤Ã¤¿¤éºîÀ®
400        if(!file_exists($ftp_temp_dir)) {
401            mkdir($ftp_temp_dir);
402            chmod($ftp_temp_dir, 0777);
403        }
404       
405        return $ftp_temp_dir;
406    }
407}
408?>
Note: See TracBrowser for help on using the repository browser.