讀取及寫入檔案

在 Google App Engine PHP 5 標準環境中,部署應用程式的本機檔案系統為非寫入性質。這可為應用程式的安全性和可擴充性帶來保障。

不過,如果您的應用程式需要在執行階段寫入及讀取檔案,PHP 5 標準環境會提供內建的 Google Cloud Storage 串流包裝函式,讓您能夠使用多數的標準 PHP 檔案系統函式來讀取及寫入檔案。

將檔案寫入 Google Cloud Storage 的方法有兩種:

  • 從應用程式寫入檔案
    • 簡易檔案寫入
    • 串流檔案寫入
  • 讓使用者上傳檔案至 Google Cloud Storage

從應用程式寫入檔案

如要從應用程式寫入檔案,您可以一次寫入整個檔案,也可以透過串流方式寫入檔案。

Cloud Storage 適用的 App Engine 串流包裝函式內建在執行階段中,會在您提供名稱開頭為 gs:// 的檔案時使用。包裝函式規定值區或檔案物件的名稱需採以下格式:

gs://bucket_name/desired_object_name

簡易檔案寫入

如要從應用程式將資料寫入 Google Cloud Storage,請使用 file_put_contents,並使用有效的 Cloud Storage URL。例如:

file_put_contents("gs://${my_bucket}/hello.txt", $newFileContent);

其中 my_bucket經過妥善設定的 Google Cloud Storage 值區

或者,如果您想使用串流選項來提供權限、快取和/或中繼資料選項,您可以依以下方式寫入檔案:

$options = ['gs' => ['Content-Type' => 'text/plain']];
$context = stream_context_create($options);
file_put_contents("gs://${my_bucket}/hello_options.txt", $newFileContent, 0, $context);

串流檔案寫入

或者,您也可以使用 fopen/fwrite 以串流方式寫入資料:

$fp = fopen("gs://${my_bucket}/hello_stream.txt", 'w');
fwrite($fp, $newFileContent);
fclose($fp);

請注意,使用串流時,資料會以較小的區塊沖洗至 Google Cloud Storage。您不需要事先知道待寫入資料的總長度,系統會在檔案資源關閉時計算。

以上是寫入檔案的基本方式。如需特殊應用實例和更進階的檔案管理方式,請參閱列在後續步驟一節中的主題。

刪除檔案

如果您想刪除檔案本身,請使用 PHP unlink() 函式。

使用者上傳

如要進一步瞭解這個檔案寫入選項,請參閱讓使用者上傳檔案一文。

讀取檔案

如要進一步瞭解如何從 Google Cloud Storage 讀取檔案,請參閱提供檔案的公開存取權一文。

設定和需求

您必須啟用 Google Cloud Storage 並建立值區。詳情請參閱設定一文。

支援的 PHP 5 檔案系統函式

您可以使用許多常用的 PHP 5 檔案函式和檔案資訊與目錄函式。如需受支援 PHP 函式的完整清單,請參閱 PHP 5 檔案系統函式支援一文。

Cloud Storage Tools API 提供的擴充功能

Google Cloud Storage 串流包裝函式可讓您使用 PHP 檔案系統呼叫。不過,如要充分利用 Cloud Storage,您可能需要使用擴充功能。您可以透過 Cloud Storage Tools API 使用這些擴充功能。

這個 API 提供一組函式,不但可用來提供檔案和圖片,而且支援其他實用公用程式。我們會在其他主題頁面說明其中幾種函式。

是否有其他方法可讀取及寫入檔案?

App Engine PHP 5 應用程式必須使用 Cloud Storage 串流包裝函式,在執行階段寫入檔案。不過,如果應用程式需要「讀取」檔案,且這些檔案屬於靜態性質,您可以選擇使用 PHP 檔案系統函式 (例如 file_get_contents),讀取透過應用程式上傳的靜態檔案。

例如:

$fileContents = file_get_contents($filePath);

其中,指定的路徑必須是相對於存取用指令碼的路徑。

將應用程式部署到 App Engine 時,您必須上傳應用程式子目錄中的檔案,並且設定 app.yaml 檔案,這樣應用程式才能存取這些檔案。詳情請參閱「使用 app.yaml 設定 PHP 5 應用程式」。

請注意,如果您在 app.yaml 設定中使用靜態檔案或目錄處理常式 (static_filesstatic_dir),您必須將 application_readable 設為 true,否則應用程式無法讀取檔案。不過,如果檔案是由 script 處理常式提供,則不必這樣做,因為這些檔案預設可供指令碼處理常式讀取。

後續步驟

請參閱下列主題,進一步瞭解如何使用 Cloud Storage Tools API:

  • 設定:快速設定操作說明。
  • 提供檔案的公開存取權:瞭解如何讓使用者透過瀏覽器下載檔案。
  • 讓使用者上傳檔案:瞭解如何直接透過瀏覽器上傳檔案,略過您的應用程式。
  • 處理圖片檔案:瞭解管理及提供圖片的最佳方式。
  • 進階檔案管理一文涵蓋下列內容:
    • 權限、快取和中繼資料串流選項。
    • PHP 檔案系統函式支援。
    • 使用 PHP includerequire
    • 讀取及寫入自訂中繼資料。
    • 快取檔案讀取。