]> 4ch.mooo.com Git - test.git/blob - lib/fileio/fileio.ftp.php
new file: ChangeLog
[test.git] / lib / fileio / fileio.ftp.php
1 <?php\r
2 /**\r
3  * FileIO FTP 遠端儲存 API\r
4  *\r
5  * 以遠端硬碟空間作為圖檔儲存的方式 (以 FTP 存取),並提供一套方法供程式管理圖片\r
6  *\r
7  * @package PMCLibrary\r
8  * @version $Id: fileio.ftp.php 636 2008-05-19 07:54:19Z scribe $\r
9  * @date $Date: 2008-05-19 15:54:19 +0800 (星期一, 19 五月 2008) $\r
10  */\r
11 \r
12 class FileIO{\r
13         var $conn, $parameter, $thumbLocalPath;\r
14         var $IFS;\r
15 \r
16         /* private 登入 FTP */\r
17         function _ftp_login(){\r
18                 if($this->conn) return true;\r
19                 $this->conn = ftp_connect($this->parameter[0], $this->parameter[1]);\r
20                 if($result = @ftp_login($this->conn, $this->parameter[2], $this->parameter[3])){\r
21                         if($this->parameter[4]=='PASV') ftp_pasv($this->conn, true); // 被動模式\r
22                         ftp_set_option($this->conn, FTP_TIMEOUT_SEC, 120); // 延長 Timeout 至 120 秒\r
23                         @ftp_chdir($this->conn, $this->parameter[5]);\r
24                 }\r
25                 return $result;\r
26         }\r
27 \r
28         /* private 關閉 FTP 及儲存索引檔 */\r
29         function _ftp_close(){\r
30                 if($this->conn) ftp_close($this->conn); // 有開啟 FTP 連線則關閉\r
31                 $this->IFS->saveIndex(); // 索引表更新\r
32         }\r
33 \r
34         function FileIO($parameter, $ENV){\r
35                 require($ENV['IFS.PATH']);\r
36                 $this->IFS = new IndexFS($ENV['IFS.LOG']); // IndexFS 物件\r
37                 $this->IFS->openIndex();\r
38                 register_shutdown_function(array($this, '_ftp_close')); // 設定解構元 (PHP 結束前執行)\r
39                 set_time_limit(120); // 執行時間 120 秒 (FTP 傳輸過程可能很長)\r
40                 $this->thumbLocalPath = $ENV['PATH'].$ENV['THUMB']; // 預覽圖本機位置\r
41                 $this->parameter = $parameter;\r
42                 /*\r
43                         [0] : FTP 伺服器位置\r
44                         [1] : FTP 伺服器埠號\r
45                         [2] : FTP 使用者帳號\r
46                         [3] : FTP 使用者密碼\r
47                         [4] : 是否使用被動模式? (PASV: 使用, NOPASV: 不使用)\r
48                         [5] : FTP 預設工作目錄\r
49                         [6] : 工作目錄對應 URL\r
50                         [7] : 預覽圖是否上傳至遠端 (true: 是, false: 否,使用本機檔案)\r
51                 */\r
52         }\r
53 \r
54         function init(){\r
55                 return true;\r
56         }\r
57 \r
58         function imageExists($imgname){\r
59                 if(!$this->parameter[7] && substr($imgname, -5) == 's.jpg') return file_exists($this->thumbLocalPath.$imgname);\r
60                 return $this->IFS->beRecord($imgname);\r
61         }\r
62 \r
63         function deleteImage($imgname){\r
64                 if(!$this->_ftp_login()) return false;\r
65                 if(is_array($imgname)){\r
66                         foreach($imgname as $i){\r
67                                 if(!$this->parameter[7] && substr($i, -5) == 's.jpg'){\r
68                                         @unlink($this->thumbLocalPath.$i);\r
69                                 }else{\r
70                                         if(!ftp_delete($this->conn, $i)) return false;\r
71                                         $this->IFS->delRecord($i); // 自索引中刪除\r
72                                 }\r
73                         }\r
74                         return true;\r
75                 }\r
76                 else{\r
77                         if(!$this->parameter[7] && substr($imgname, -5) == 's.jpg') return @unlink($this->thumbLocalPath.$imgname);\r
78                         if($result = ftp_delete($this->conn, $imgname)) $this->IFS->delRecord($imgname);\r
79                         return $result;\r
80                 }\r
81         }\r
82 \r
83         function uploadImage($imgname='', $imgpath='', $imgsize=0){\r
84                 if($imgname=='') return true; // 支援上傳方法\r
85                 if(!$this->parameter[7] && substr($imgname, -5) == 's.jpg') return false; // 不處理預覽圖\r
86                 if(!$this->_ftp_login()) return false;\r
87                 $result = ftp_put($this->conn, $imgname, $imgpath, FTP_BINARY);\r
88                 if($result){\r
89                         $this->IFS->addRecord($imgname, $imgsize, ''); // 加入索引之中\r
90                         unlink($imgpath); // 確實上傳後刪除本機暫存\r
91                 }\r
92                 return $result;\r
93         }\r
94 \r
95         function getImageFilesize($imgname){\r
96                 if(!$this->parameter[7] && substr($imgname, -5) == 's.jpg') return @filesize($this->thumbLocalPath.$imgname);\r
97                 if($rc = $this->IFS->getRecord($imgname)) return $rc['imgSize'];\r
98                 return false;\r
99         }\r
100 \r
101         function getImageURL($imgname){\r
102                 if(!$this->parameter[7] && substr($imgname, -5) == 's.jpg') return $this->getImageLocalURL($imgname);\r
103                 return $this->IFS->beRecord($imgname) ? $this->parameter[6].$imgname : false;\r
104         }\r
105 }\r
106 ?>