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

App Engine では、アプリケーションがデプロイされているローカルファイル システムに書き込みを行うことはできません。これにより、アプリケーションのセキュリティとスケーラビリティが維持されます。

ランタイムにアプリケーションでファイルの読み取りや書き込みが必要になる場合は、App Engine の Google Cloud Storage ストリームラッパーを使用します。これにより、標準の PHP ファイル システム関数を使用して、App Engine PHP アプリでファイルの読み取りと書き込みを行うことができます。

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

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

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

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

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

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 ファイル システム関数

ファイル情報関数やディレクトリ関数とともに、よく使用されている多くの PHP ファイル関数がサポートされています。サポートされている PHP 関数の一覧については、PHP ファイル システム関数のサポートをご覧ください。

Cloud Storage Tools API で提供される拡張機能

Google Cloud Storage ストリーム ラッパーを使用すると、PHP ファイル システム呼び出しを使用します。ただし、Google Cloud Storage を最適に使用するために必要な拡張機能があります。これらの拡張機能は、Cloud Storage Tools API で提供されています。

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

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

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

例:

$fileContents = file_get_contents($filePath);

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

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

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

次のステップ

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

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

フィードバックを送信...

PHP の App Engine スタンダード環境