3 * FileIO FTP 遠端儲存 API
\r
5 * 以遠端硬碟空間作為圖檔儲存的方式 (以 FTP 存取),並提供一套方法供程式管理圖片
\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
13 var $conn, $parameter, $thumbLocalPath;
\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
28 /* private 關閉 FTP 及儲存索引檔 */
\r
29 function _ftp_close(){
\r
30 if($this->conn) ftp_close($this->conn); // 有開啟 FTP 連線則關閉
\r
31 $this->IFS->saveIndex(); // 索引表更新
\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
47 [4] : 是否使用被動模式? (PASV: 使用, NOPASV: 不使用)
\r
50 [7] : 預覽圖是否上傳至遠端 (true: 是, false: 否,使用本機檔案)
\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
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
70 if(!ftp_delete($this->conn, $i)) return false;
\r
71 $this->IFS->delRecord($i); // 自索引中刪除
\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
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
89 $this->IFS->addRecord($imgname, $imgsize, ''); // 加入索引之中
\r
90 unlink($imgpath); // 確實上傳後刪除本機暫存
\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
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