FileIO API 規格

規格版本

Version 0.3 : 2011/02/26
Version 0.2 : 2006/12/04 by scribe (物件導向化)
Version 0.1 : 2006/09/04 by RT

方法一覽

public class FileIO

init

imageExists

deleteImage

uploadImage

getImageFilesize

getImageURL

getImageLocalURL

remoteImageExists

getCurrentStorageSize

updateStorageSize

resolveThumbName

方法細節

0.3 更動點

全面使用索引

以前只有檔案存放在外部空間才需要使用索引,現在存放在本機的檔案也使用索引來加速。

新增 getCurrentStorageSize

將原本 total_size() 的計算圖檔總大小的任務收回,由 FileIO 親自處理。使用索引內記載的檔案大小值來加總,省去實際 I/O 操作的步驟。

修改 deleteImage 回傳值

deleteImage 現在如果刪除成功會回傳已刪除的圖檔總大小值,如果刪除失敗則回傳 0。

0.2 更動點

物件導向化

使用 $FileIO->getImageURL('1.jpg') 方式存取 (變數 $FileIO 在 FileIO 載入後自動建立),辨別 PHP 內建函式和 FileIO 更為容易。而也新增 fileio 資料夾,其內存放 fileio.XXX.php,仿照 PIO 方式以 Kernel Switcher 切換,可以自由擴充。

定義圖像索引檔

為了知道檔案的資訊,首先要先建立圖像索引檔,記錄檔名、檔案大小、對應 URL,以下是範例:

1.jpg 210235 http://img214.imageshack.us/img214/7053/creative0cj.jpg
1_s.jpg 21523 http://img214.imageshack.us/img214/7053/creative0cj.th.jpg

而利用索引方式,以檔名去對應實體圖檔位置 (類似別名、 Symlink 的觀念)。刪除索引記錄就等於刪除檔案 (FTP 模式會去要求刪除遠端檔案),以索引為主的一種做法。

註:儲存在本機的檔案不需要此索引檔。 (0.3 版修改)

廢除 file_func('imgsize')

目前資料來源儲存結構已利用 $imgw, $imgh, $tw, $th 儲存尺寸相關資訊。

增加 getImageURL 方法

一方面用以相容 ImageShack,一方面也可以在此套入 CoralCDN 的網址,不必再委由主程式。
如果 XMLAPI 盛行之後,用這種方法可以對應很多網路/貼圖空間。

init

public void init()

初始化圖像索引檔 (記錄檔名、檔案大小、對應 URL 等資訊)

imageExists

public boolean imageExists(String $imgname)

檢查圖檔是否存在,如果不存在回傳 false,如果存在回傳 true。

參數:
$imgname - 圖檔檔名 (ex: 1234567890123.jpg)
回傳值: 圖檔是否存在

deleteImage

public int deleteImage(String $imgname)
public int deleteImage(array $imgname)

刪除圖檔。 $imgname 支援單一字串檔名及字串陣列檔名。

參數:
$imgname - 圖檔檔名 (ex: 1234567890123.jpg)
回傳值: 刪除的圖檔總大小值 (單位 byte)。如果沒有刪除則回傳 0。

uploadImage

public boolean uploadImage(String $imgname='', String $imgpath='', int $imgsize=0)

上傳圖檔,同時寫入圖像索引檔。如果沒有指定 $imgname 則是詢問 FileIO 是否支援圖檔上傳步驟。

參數:
$imgname - 圖檔檔名 (ex: 1234567890123.jpg)
$imgpath - 圖檔實體路徑,上傳前的暫存檔案會留在主機內,上傳完後再刪除
$imgsize - 圖檔檔案 byte 大小
回傳值: ($imgname 為空) 是否支援上傳 / 是否上傳成功

getImageFilesize

public mixed getImageFilesize(String $imgname)

取得圖檔的檔案大小,其單位是 byte 。如果圖檔不存在會回傳 false。

參數:
$imgname - 圖檔檔名 (ex: 1234567890123.jpg)
回傳值: 圖檔檔案大小 / 圖檔不存在 (false)

getImageURL

public String getImageURL(String $imgname)

取得圖檔 URL 位置以供 <img> 和 <a> 標籤取得檔案位置

參數:
$imgname - 圖檔檔名 (ex: 1234567890123.jpg)
回傳值: 圖檔 URL 位置

getImageLocalURL

public String getImageLocalURL(String $imgname)

取得本機端圖檔完整 URL 位置。 (尚未上傳至遠端主機,暫存在本機端檔案的可存取 URL)

參數:
$imgname - 圖檔檔名 (ex: 1234567890123.jpg)
回傳值: 本機端圖檔 URL 位置

remoteImageExists

public boolean remoteImageExists(String $img)

實際查詢圖檔是否存在於外部空間。以 file_get_contents() 嘗試請求遠端圖檔看看是否存在。

參數:
$img - 圖檔檔名 (ex: 1234567890123.jpg)
回傳值: 外部空間圖檔是否實際存在

getCurrentStorageSize

public int getCurrentStorageSize()

取得圖檔儲存總大小值。

回傳值: 圖檔儲存總大小值 (單位 KB)

updateStorageSize

public void updateStorageSize($delta)

更新圖檔儲存總大小值。刪除圖檔或新增圖檔時,會有檔案大小的變動值 $delta,將此值更新到儲存的總大小值以確保符合目前的容量狀態。

參數:
$delta - 檔案大小變動值 (刪除檔案為負;新增檔案為正。單位 byte)

resolveThumbName

public mixed resolveThumbName($thumbPattern)

取得圖檔預覽圖之完整檔名。因為預覽圖可支援不同格式,因此無法一開始就得知完整檔名,而須透過此方法先行查詢。而後從系統中找出符合的完整檔名回傳。如果預覽圖檔不存在則會回傳 false。

參數:
$thumbPattern - 附加圖檔預覽圖檔主名稱 (通常是一串數字)
回傳值: 圖檔預覽圖之完整檔名 (一串數字s.XXX) / 圖檔不存在 (false)

討論

新增一則回應
登入為 Wikidot 使用者
(將不會發佈)
- +
除非特別註明,本頁內容採用以下授權方式: Creative Commons Attribution-Noncommercial-Share Alike 2.5 License.