FileIO : Pixmicat! File I/O
有關舊版FileIO (v1)請瀏覽這裡

概述

FileIO 主要從祭典版的分支 FTP 版中所移植強化,並為 PIO 版本的標準使用函式庫之一。藉由此一函式庫可以自由切換圖檔儲存的位置是遠端主機還是本機,並提供一套方法來操作圖檔。

技術細節

運作方式

config.php 設定檔內有 FILEIO_BACKEND 和 FILEIO_PARAMETER 常數設定,依其設定引入位於 fileio 目錄下不同的函式庫。而後便可以利用定義好的 API 存取圖檔,而不必再為連接 FTP 或是取得檔案資訊費心。

取得 FileIO 物件則可以透過 PMCLibrary 來取得。

<?php
require './lib/pmclibrary.php';
 
$FileIO = PMCLibrary::getFileIOInstance();
?>

IndexFS

FileIO Index File Sytem, FileIO 索引式檔案系統

IndexFS,常簡稱 IFS。是 FileIO 的核心部分,為了將儲存在其他主機的圖檔視為本機圖檔並自由操作,構思出以索引方式連結圖檔並以此索引表當作圖檔本身來操作。其觀念有點像電腦的捷徑或鏈結檔案。

而這個索引背負著相當重要的任務,為了使索引表在讀寫時不是發生漏失狀況,預設會使用 SQLite 資料庫來儲存索引。而為了相容性考量,舊有的文字檔記錄方式仍然存在,但建議能打開 PHP 對 SQLite 的支援以使用 SQLite。

儲存的除了檔名以外,尚有檔案大小及檔案位置。在計算圖檔總容量時,能減少 I/O 詢問快速自索引計算得出結果。

API 列表

完整列表請參見 FileIO API 規格 條目。

使用範例

先取得 $FileIO 物件,再直接使用如 $FileIO->getImageFilesize('1.jpg') 方式呼叫即可。

config.php 參數設定

FILEIO_BACKEND

此項目為設定 FileIO 使用的後端儲存方式。預設是 'normal' 也就是利用本機儲存。以下是目前支援的:

  • normal : 本機端儲存
  • ftp : 同祭典版 FTP 分支,利用 FTP 將圖檔傳至遠端伺服器,再要求遠端圖片
  • imageshack : ImageShack 存圖網站,如果有申請帳號將可以上傳於個人頁面內集中管理
  • satellite : 原衛星計畫版本,利用一個檔案較小的衛星 PHP / Perl CGI 負責將圖存到遠端伺服器並管理

FILEIO_INDEXLOG

此項目為儲存遠端檔案對應的索引記錄檔案檔名,一般來說保留預設值即可。

FILEIO_PARAMETER

此項目為設定 FileIO 後端一些設定的參數,以序列化過的陣列儲存,以下介紹各個後端需要的參數:

normal 情況

不需設定,可以留空反正後端會自動忽視。
像這樣:define("FILEIO_PARAMETER", '');

ftp 情況

以下為陣列結構:
[0] : FTP 伺服器位置
[1] : FTP 伺服器埠號
[2] : FTP 使用者帳號
[3] : FTP 使用者密碼
[4] : 是否使用被動模式? (PASV: 使用, NOPASV: 不使用)
[5] : FTP 預設工作目錄
[6] : 工作目錄對應 URL
[7] : 預覽圖是否上傳至遠端 (true: 是, false: 否,使用本機檔案)

以下為例子:
define("FILEIO_PARAMETER", serialize(array('ftp.example.com', 21, 'demo', 'demo', 'PASV', '/pwd/', 'http://www.example.com/~demo/pwd/', false)));

可參考專頁 FileIO: FTP 說明。

imageshack 情況

以下為陣列結構:
[0] : ImageShack 註冊金鑰 (即登入頁面 setlogin.php 網址後面附帶一串編碼)

以下為例子:
define("FILEIO_PARAMETER", serialize(array('00000000000000000000000000000000')));

satellite 情況

以下為陣列結構:
[0] : 衛星程式遠端 URL 位置
[1] : 是否使用 Transload 方式要求衛星程式抓取圖檔 (true:是 false:否,使用傳統 HTTP 上傳)
[2] : 傳輸認證金鑰
[3] : 遠端目錄對應 URL
[4] : 預覽圖是否上傳至遠端 (true: 是, false: 否,使用本機檔案)

以下為例子:
define("FILEIO_PARAMETER", serialize(array('http://www.example.com/~demo/satellite.cgi', true, '12345678', 'http://www.example.com/~demo/src/', true)));

參見

討論

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