權限、快取與中繼資料選項
Cloud Storage 適用的 App Engine 串流包裝函式提供下列串流設定選項:
選項 | 可能的值 | 說明 |
---|---|---|
acl |
值為下列其中之一:
|
想瞭解這些設定在 Cloud Storage 中的作用,請參閱預先定義的 ACL 一節。如果您未設定 acl ,Cloud Storage 會將這項參數設為 null,並使用與檔案所在值區相關聯的預設物件 ACL。 |
Content-Type |
任何有效的 MIME 類型 | 如果您在上傳物件時未指定內容類型,Google Cloud Storage 系統會在提供物件時預設為 binary/octet-stream 。 |
Content-Disposition |
任何有效的內容配置值 | 您可針對物件設定的標頭,用於指定物件資料如何傳送的陳述資訊。 |
Content-Encoding |
任何有效的壓縮演算法 | 物件的壓縮演算法,例如 gzip。請注意,Google Cloud Storage 不會依據這個標頭自動壓縮或解壓縮物件。 |
Content-Language |
任何有效的 ISO 639-1 語言代碼 | 內容的 ISO 639-1 語言代碼 (如需完整清單,請參閱表示語言名稱的代碼表)。 |
enable_cache |
true 或 false (預設為 true) | 系統會將從 Cloud Storage 讀取的檔案快取到記憶體 (請參閱 Memcache 總覽) 以提高效能。如要關閉快取,請在串流結構定義中使用 enable_cache 指令。 |
enable_optimistic_cache |
true 或 false (預設為 false) | 您可以啟用樂觀快取,從快取中讀取檔案物件,無需檢查 Cloud Storage 中的基礎物件自前次快取後是否發生變更。樂觀快取非常適合一次寫入、多次讀取的情境。 |
metadata |
關聯陣列,例如 | ['foo' => 'far', 'bar' => 'boo'] 請參閱「讀取及寫入自訂中繼資料」一文。 |
read_cache_expiry_seconds |
物件在快取中保持有效的秒數。 | 您可以使用 read_cache_expiry_seconds directive 變更快取物件有效時間長度。這個選項會指定時間值,經過指定時間值後,系統會在下次嘗試讀取時重新快取物件。預設值為 1 小時 (3600)。 |
writable_cache_expiry_seconds |
快取值區可寫入狀態的秒數。 | Cloud Storage 串流包裝函式會快取值區的可寫入狀態,以提高效能。這表示當值區的 ACL 變更時,各種 stat() 相關函式傳回的可寫入位元可能會暫時無法同步。預設值為 10 分鐘 (600)。 |
下列程式碼片段顯示如何使用串流選項:
在上方的程式碼片段中,$options
是串流在寫入新物件時使用的一組引數,您可以使用 stream_context_set_default
將其設為預設選項。
Cloud Storage 上的 PHP 5 檔案系統函式支援
Cloud Storage 適用的 App Engine 串流包裝函式支援許多原生的 PHP 檔案系統函式,但部分函式不受支援,還有部分函式經過修改後支援。下表列出各個原生函式,並指出系統是否支援。如果函式受到支援但需修改或有所限制,亦會提供說明。
檔案系統函式 | 是否支援? | 說明 |
---|---|---|
basename - 傳回路徑的後置名稱元件。 | 支援。 | |
chgrp - 變更檔案群組。 | 不支援。 | 一律會傳回 false 。 |
chmod - 變更檔案模式。 | 不支援。 | 一律會傳回 false 。 |
chown - 變更檔案擁有者。 | 不支援。 | 一律會傳回 false 。 |
clearstatcache - 清除檔案狀態快取。 | 支援。 | |
copy - 複製檔案。 | 支援。 | |
dirname - 傳回上層目錄路徑。 | 支援。 | 支援,但包含 gs:// 前置字串。 |
disk_free_space - 傳回檔案系統或磁碟分區中的可用空間。 | 不支援。 | 已停用。 |
disk_total_space - 傳回檔案系統或磁碟分區的總大小。 | 不支援。 | 已停用。 |
diskfreespace - disk_free_space 的別名。 | ||
fclose - 關閉開啟的檔案指標。 | 支援。 | |
feof - 測試檔案指標的檔案結尾。 | 支援。 | |
fflush - 將輸出排清到檔案。 | 支援。 | 沒有影響 (一律傳回 true )。 |
fgetc - 從檔案指標取得字元。 | 支援。 | |
fgetcsv - 從檔案指標取得行並剖析 CSV 欄位。 | 支援。 | |
fgets - 從檔案指標取得行。 | 支援。 | |
fgetss - 從檔案指標取得行,並去除 HTML 標記。 | 支援。 | |
file_exists - 檢查檔案或目錄是否存在。 | 支援。 | |
file_get_contents - 將整個檔案讀入字串。 | 支援。 | |
file_put_contents - 將字串寫入檔案。 | 支援。 | |
file - 將整個檔案讀入陣列。 | 支援。 | |
fileatime - 取得檔案的前次存取時間。 | 不支援。 | 一律傳回 0。 |
filectime - 取得檔案的 inode 變更時間。 | 不支援。 | 一律傳回 0。 |
filegroup - 取得檔案群組。 | 不支援。 | 一律傳回 0。 |
fileinode - 取得檔案 inode。 | 不支援。 | 一律傳回 0。 |
filemtime - 取得檔案修改時間。 | 支援。 | |
fileowner - 取得檔案擁有者。 | 不支援。 | 一律傳回 0。 |
fileperms - 取得檔案權限。 | 支援。 | 執行位元一律關閉。 |
filesize - 取得檔案大小。 | 支援。 | |
filetype - 取得檔案類型。 | 支援。 | |
flock - 可攜性建議檔案鎖定。 | 不支援。 | 一律會傳回 false 。 |
fopen - 開啟檔案或網址。 | 支援。 | 僅支援以下模式:r 、rb 、rt 、w 、wb 、wt 。 |
fpassthru - 輸出檔案指標的所有剩餘資料。 | 支援。 | |
fputcsv - 將行格式化為 CSV 並寫入檔案指標。 | 支援。 | |
fputs - fwrite 的別名。 | ||
fread - 讀取二進位安全檔案。 | 支援。 | |
fscanf - 依據格式剖析檔案的輸入。 | 支援。 | |
fseek - 使用檔案指標搜尋。 | 支援。 | 只支援使用讀取模式開啟的檔案。 |
fstat - 使用開啟的檔案指標取得檔案相關資訊。 | 支援。 | |
ftell - 傳回檔案讀取/寫入指標的當前位置。 | 支援。 | |
ftruncate - 將檔案截斷成指定長度。 | 不支援。 | 一律會傳回 false 。 |
fwrite - 二進位安全檔案寫入。 | 支援。 | |
glob - 尋找符合模式的路徑名稱。 | 支援。 | |
is_dir - 告知檔案名稱是否為目錄。 | 支援。 | |
is_executable - 告知檔案名稱是否為可執行檔。 | 不支援。 | 一律會傳回 false 。 |
is_file - 告知檔案名稱是否為一般檔案。 | 支援。 | |
is_link - 告知檔案名稱是否為符號連結。 | 不支援。 | 一律會傳回 false 。 |
is_readable - 告知檔案是否存在,以及是否可以讀取。 | 支援。 | |
is_uploaded_file - 告知是否透過 HTTP POST 上傳檔案。 | 支援。 | |
is_writable - 告知檔案名稱是否可寫入。 | 支援。 | 系統會快取值,但該值未必能立即反映權限變更。 |
is_writeable - is_writable 的別名。 | ||
lchgrp - 變更符號連結的群組擁有權。 | 不支援。 | 已停用。 |
lchown - 變更符號連結的使用者擁有權。 | 不支援。 | 已停用。 |
link - 建立硬連結。 | 不支援。 | 已停用。 |
linkinfo - 取得連結的相關資訊。 | 不支援。 | 一律會傳回 -1 。 |
lstat - 提供檔案或符號連結的相關資訊。 | 支援。 | |
mkdir - 建立目錄。 | 支援。 | |
move_uploaded_file - 將上傳的檔案移至新位置。 | 支援。 | |
parse_ini_file - 剖析設定檔。 | 支援。 | |
pathinfo - 傳回檔案路徑的相關資訊。 | 支援。 | |
pclose - 關閉處理檔案指標。 | 不支援。 | 已停用。 |
popen - 開啟處理檔案指標。 | 不支援。 | 已停用。 |
readfile - 輸出檔案。 | 支援。 | |
readlink - 傳回符號連結的目標。 | 不支援。 | 一律會傳回 false 。 |
realpath - 傳回標準化絕對路徑名稱。 | 不支援。 | 一律會傳回 false 。 |
rename - 重新命名檔案或目錄。 | 支援。 | |
rewind - 倒轉檔案指標的位置。 | 支援。 | 僅支援讀取模式。 |
rmdir - 移除目錄。 | 支援。 | |
set_file_buffer - stream_set_write_buffer 的別名。 | ||
stat - 提供檔案相關資訊。 | 支援。 | |
symlink - 建立符號連結。 | 不支援。 | 已停用。 |
tempnam - 使用不重複的檔案名稱建立檔案。 | 支援。 | 請參閱這些附註。 |
tmpfile - 建立暫存檔案。 | 支援。 | 傳回類似 php://memory 的記憶體備份檔案。 |
touch - 設定檔案的存取和修改時間。 | 不支援。 | 一律會傳回 false 。 |
umask - 變更當前的 umask。 | 支援。 | 不適用於 Cloud Storage 檔案。 |
unlink - 刪除檔案。 | 支援。 |
請注意,上表中的檔案統計資料函式 (file_exists
、filemtime
、filesize
、fstat
、is_file
、is_dir
、is_writable
和 stat
) 會根據個別要求進行快取。您可以呼叫 clearstatcache
清除此快取。
此外,系統也支援以下 PHP 目錄讀取函式:
函式名稱 |
---|
opendir |
readdir |
rewinddir |
closedir |
使用 PHP 5 include
和 require
為協助維持應用程式的安全性,系統會停用 Cloud Storage 檔案的 include
或 require
功能,但您可以按照下列指示啟用:
如要在應用程式中從 Google Cloud Storage include
或 require
取得 PHP 程式碼,您必須在 php.ini
檔案中使用 google_app_engine.allow_include_gs_buckets
指令,指定哪些值區包含這些檔案。
讀取及寫入自訂中繼資料
如要將自訂中繼資料附加至要寫入 Google Cloud Storage 的檔案,請先將中繼資料新增至 $options
,然後再建立用於 file_put_contents 呼叫的串流結構定義。
在這個範例中,名為 foo
的中繼資料會獲得 far
值,另一個名為 bar
的中繼資料則會獲得 boo
值。本例也會將內容類型設為 text/plain
。如圖所示,系統會使用 $options
中的這項資訊建立串流內容,並使用 file_put_contents()
將檔案寫入 Cloud Storage,同時提供中繼資料和內容類型:
如要讀取檔案的自訂中繼資料和內容類型,請對檔案呼叫 fopen
,然後使用 CloudStorageTools::getContentType()
取得內容類型,並使用 CloudStorageTools::getMetaData()
取得中繼資料。
只要 fopen
呼叫傳回檔案指標,您就能取得自訂中繼資料和內容類型。
快取檔案讀取
根據預設,Cloud Storage 適用的 App Engine 串流包裝函式會將檔案讀取內容快取至 Memcache,以提高後續讀取的效能。如要關閉快取,請在串流結構定義中使用 enable_cache
指令。
如要進一步改善效能,您也可以啟用樂觀快取功能,這樣系統就會使用 enable_optimistic_cache
指令 (預設為 false
) 從快取中讀取檔案物件,而不會查看基礎物件是否在 Google Cloud Storage 中自上次快取後有所變更。樂觀快取非常適合一次寫入、多次讀取的情境。
您也可以使用 read_cache_expiry_seconds
指令,變更快取物件有效時間長度,在指定時間過後,系統會在下次讀取嘗試時重新快取物件。預設值為 1 小時 (3600
)。
在本例中,樂觀快取已開啟,檔案物件設定為標示在 5 分鐘後從 Google Cloud Storage 重新快取。