高度なファイル管理

権限、キャッシュ、メタデータのオプション

場合によっては、ストリーム オプションを使用してファイルの書き込みを行う必要があります。その場合、ストリームの構成時に次のオプションを指定できます。

オプション 指定できる値 説明
acl 次のいずれかの値:
  • private
  • public-read
  • public-read-write
  • authenticated-read
  • bucket-owner-read
  • bucket-owner-full-control
  • project-private
これらの設定が 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 内で元のオブジェクトが変更されたかどうかを確認せずに、キャッシュからファイル オブジェクトを読み取ることができます。楽観的キャッシュは、書き込みが 1 回限りで何回も読み取りを行う場合に最適です。
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 = ['gs' => ['Content-Type' => 'text/plain']];
$context = stream_context_create($options);
file_put_contents("gs://${my_bucket}/hello_options.txt", $newFileContent, 0, $context);

上のスニペットで、$options は、新しいオブジェクトを書き込むときにストリームが使用する引数のセットです。stream_context_set_default を使用すると、これがデフォルトのオプションとして設定されます。

Google Cloud Storage で使用可能な PHP ファイル システム関数

ネイティブの 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 — ファイルまたは URL を開きます。 サポート対象 サポート対象のモード: rrbrtwwbwt
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_existsfilemtimefilesizefstatis_fileis_diris_writablestat)は、リクエストごとにキャッシュに保存されます。このキャッシュをクリアするには、clearstatcache を呼び出します。

また、次の PHP ディレクトリ読み取り関数がサポートされています。

関数名
opendir
readdir
rewinddir
closedir

PHP includerequire の使用

アプリケーションのセキュリティを維持するため、Cloud Storage ファイルの includerequire はデフォルトで無効になっていますが、次のように有効にすることもできます。

アプリケーションで Google Cloud Storage の PHP コードに include または require を設定するには、php.ini ファイルで google_app_engine.allow_include_gs_buckets ディレクティブを使用し、これらのファイルが含まれているバケットを指定する必要があります。

カスタム メタデータの読み取りと書き込み

Google Cloud Storage に書き込むファイルにカスタム メタデータを追加するには、file_put_contents 呼び出しに使用するストリーム コンテキストを作成する前に、$options にメタデータを追加します。

次の例では、foo という名前のメタデータに far という値を設定し、bar というメタデータに boo という値を設定しています。また、コンテンツ タイプを text/plain に設定しています。この情報を上の $options で使用してストリーム コンテキストを作成し、file_put_contents() とメタデータ、コンテンツ タイプを一緒に使用してファイルを Cloud Storage に書き込みます。

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

ファイルのカスタム メタデータとコンテンツ タイプを読み取るには、fopen でファイルを呼び出し、CloudStorageTools::getContentType() を使用してコンテンツ タイプを取得します。さらに、CloudStorageTools::getMetaData() を使用してメタデータを取得します。

fopen 呼び出しからファイル ポインタが返された後で、カスタム メタデータとコンテンツ タイプが使用可能になります。

$fp = fopen("gs://${my_bucket}/hello_metadata.txt", 'r');
$content_type = CloudStorageTools::getContentType($fp);
$metadata = CloudStorageTools::getMetaData($fp);

キャッシュに保存されたファイルの読み取り

デフォルトでは、Cloud Storage ストリーム ラッパーはファイルの読み取りを memcache に保存し、後続の読み取りパフォーマンスを向上させます。ストリーム コンテキストで enable_cache ディレクティブを使用すると、キャッシュへの保存はオフになります。

enable_optimistic_cache ディレクティブ(デフォルトは false)を使用して楽観的キャッシュを有効にすると、オブジェクトが最後にキャッシュに保存されてから Cloud Storage 内で元のオブジェクトが変更されたかどうかを確認せずに、キャッシュからファイル オブジェクトを読み取ることができます。これにより、パフォーマンスがさらに向上します。楽観的キャッシュは、書き込みが 1 回限りで何回も読み取りを行う場合に最適です。

read_cache_expiry_seconds を使用すると、キャッシュに保存されたオブジェクトの有効期間を変更できます。この有効期間が経過すると、オブジェクトが次の読み取り時に再度キャッシュに保存されます。デフォルトでは 1 時間(3600)に設定されています。

この例では、楽観的キャッシュが有効になっています。ファイル オブジェクトは、5 分後に Google Cloud Storage から再度キャッシュに保存されるように構成されています。

$options = [
    'gs' => [
        'enable_cache' => true,
        'enable_optimistic_cache' => true,
        'read_cache_expiry_seconds' => 300,
    ]
];
$context = stream_context_create($options);
file_put_contents("gs://${my_bucket}/hello_caching.txt", $newFileContent, 0, $context);
このページは役立ちましたか?評価をお願いいたします。

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

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