ファイルの読み取りと書き込み

Google App Engine PHP 5 スタンダード環境では、アプリケーションがデプロイされるローカルのファイル システムが書き込み可能になりません。これは、アプリケーションのセキュリティとスケーラビリティを維持するためです。

ただし、アプリケーションが実行時にファイルを読み書きする必要がある場合、PHP 5 スタンダード環境により、組み込みの Google Cloud Storage ストリーム ラッパーが提供され、それにより標準の PHP ファイルシステムの機能の多くを使用してファイルへの読み書きが可能になります。

Google Cloud Storage にファイルを書き込む場合、次の 2 つの方法があります。

  • アプリからファイルを書き込む
    • シンプルなファイルの書き込み
    • ストリーミングされたファイルの書き込み
  • ユーザーが Google Cloud Storage にファイルをアップロードする

アプリからファイルを書き込む

アプリからファイルを書き込む場合、ファイル全体を一度に書き込むことも、ストリーミングでファイルを書き込むこともできます。

Cloud Storage 用の App Engine ストリーム ラッパーはランタイムに組み込まれており、gs:// で始まるファイル名を指定すると使用されます。このラッパーを使用するには、バケットまたはファイル オブジェクトの名前を次の形式で記述する必要があります。

gs://bucket_name/desired_object_name

シンプルなファイルの書き込み

アプリから Google Cloud Storage にデータを書き込むには、Cloud Storage の有効な URL を指定して file_put_contents を使用します。次に例を示します。

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 ファイル システム呼び出しを使用できます。ただし、Google Cloud Storage を最適に使用するために拡張機能が必要となる場合があります。これらの拡張機能は、Cloud Storage Tools API で提供されています。

この API は、他の有用なユーティリティとともに、ファイルや画像の提供をサポートする一連の関数を提供します。詳細については、他のトピックページをご覧ください。

ファイルを読み書きする別の方法

App Engine PHP 5 アプリで実行時にファイルを書き込むには、Cloud Storage ストリーム ラッパーを使用する必要があります。ただし、アプリでファイルを読み取る必要があり、対象のファイルが静的である場合、file_get_contents などの PHP ファイル システム関数を使用して、アプリでアップロードされた静的ファイルを読み取ることもできます。

次に例を示します。

$fileContents = file_get_contents($filePath);

パスにアクセスするスクリプトからの相対パスを指定する必要があります。

App Engine にアプリをデプロイするときに、アプリケーションのサブディレクトリにファイルをアップロードし、アプリがこれらのファイルにアクセスできるように app.yaml ファイルを構成する必要があります。詳細については、app.yaml を使用した PHP 5 アプリケーションの構成をご覧ください。

app.yaml の構成で、静的ファイルやディレクトリ ハンドラ(static_files または static_dir)を使用する場合は、application_readable を true に設定する必要があります。この設定を行わないと、アプリからファイルを読み取ることができません。ファイルが script ハンドラによって処理されている場合は、デフォルトでこれらのファイルをスクリプト ハンドラから読み取り可能であるため、この設定を行う必要はありません。

次のステップ

Cloud Storage Tools API の使用方法については、次のトピックをご覧ください。

  • 設定。簡単な設定手順を説明します。
  • ファイルへの公開アクセスの設定。ユーザーがブラウザ経由でファイルをダウンロードできるようにする方法を説明します。
  • ユーザーによるファイル アップロードの許可。アプリを回避し、ブラウザから直接ファイルをアップロードする方法を説明します。
  • 画像ファイルの処理。画像の管理と提供の最適な方法を説明します。
  • 高度なファイル管理。次の内容について説明します。
    • 権限、キャッシュ、メタデータのストリーム オプション
    • PHP ファイル システム関数のサポート
    • PHP includerequire の使用
    • カスタム メタデータの読み取りと書き込み
    • ファイル読み取りのキャッシュ保存