すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:条件付きダウンロード (PHP SDK V1)

最終更新日:Nov 30, 2025

条件付きダウンロードでは、Object Storage Service (OSS) オブジェクトをダウンロードする際に 1 つ以上の条件を指定できます。指定した条件が満たされた場合にのみ、オブジェクトはローカルメモリまたはローカルファイルにダウンロードされます。条件が満たされない場合はエラーが返され、ダウンロードは開始されません。

注意事項

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。サポートされているリージョンとエンドポイントの詳細については、リージョンとエンドポイントをご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する場合は、OssClient の作成をご参照ください。

  • 条件付きダウンロードを実行するには、oss:GetObject 権限が必要です。詳細については、RAM ユーザーへのカスタムポリシーのアタッチをご参照ください。

条件

次の表に、OSS がサポートする条件をリストします。`If-Modified-Since` と `If-Unmodified-Since` は同時に使用できます。また、`If-Match` と `If-None-Match` も同時に使用できます。

パラメーター

説明

メソッド

If-Modified-Since

指定した時刻より後にオブジェクトが変更された場合、オブジェクトはダウンロードされます。それ以外の場合は、`304 Not modified` エラーが返されます。

OssClient::OSS_IF_MODIFIED_SINCE

If-Unmodified-Since

指定した時刻以前にオブジェクトが変更された場合、オブジェクトはダウンロードされます。それ以外の場合は、`412 Precondition failed` エラーが返されます。

OssClient::OSS_IF_UNMODIFIED_SINCE

If-Match

OSS オブジェクトの ETag が指定された ETag と一致する場合、オブジェクトはダウンロードされます。それ以外の場合は、`412 Precondition failed` エラーが返されます。

説明

オブジェクトの ETag は `$ossClient->getObjectMeta` メソッドを使用して取得します。

OssClient::OSS_IF_MATCH

If-None-Match

OSS オブジェクトの ETag が指定された ETag と一致しない場合、オブジェクトはダウンロードされます。それ以外の場合は、`304 Not modified` エラーが返されます。

OssClient::OSS_IF_NONE_MATCH

オブジェクトのローカルメモリへの条件付きダウンロード

次のコードは、条件を指定してオブジェクトをローカルメモリにダウンロードする方法を示しています:

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;

// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// 次の例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の値に置き換えてください。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// バケット名を指定します。
$bucket= "yourBucketName";
// オブジェクト名を指定します。オブジェクト名は、バケット名を含まないオブジェクトの完全なパスです (例: exampledir/exampleobject.txt)。
$object = "yourObjectName";

try{
    $options = array(
        OssClient::OSS_HEADERS => array(          
          // オブジェクトが Fri, 9 Apr 2021 14:47:53 GMT より後に変更された場合にダウンロードします。
          OssClient::OSS_IF_MODIFIED_SINCE => "Fri, 9 Apr 2021 14:47:53 GMT",
          // オブジェクトが Wed, 13 Oct 2021 14:47:53 GMT 以前に変更された場合にダウンロードします。
          OssClient::OSS_IF_UNMODIFIED_SINCE => "Fri, 13 Oct 2021 14:47:53 GMT",
          // ETag が指定された ETag と一致しない場合にオブジェクトをダウンロードします。
          OssClient::OSS_IF_NONE_MATCH => '"5B3C1A2E0563E1B002CC607C****"',
          // ETag が指定された ETag と一致する場合にオブジェクトをダウンロードします。
          OssClient::OSS_IF_MATCH => '"fba9dede5f27731c9771645a3986****"',
        )

    );

    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
    // オブジェクトをローカルメモリにダウンロードします。
    $content = $ossClient->getObject($bucket, $object, $options);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print ($content);
print(__FUNCTION__ . ": OK" . "\n");

オブジェクトのローカルファイルへの条件付きダウンロード

次のコードは、条件を指定してオブジェクトをローカルファイルにダウンロードする方法を示しています:

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;

// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// 次の例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の値に置き換えてください。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// バケット名を指定します。
$bucket= "yourBucketName";
// オブジェクト名を指定します。オブジェクト名は、バケット名を含まないオブジェクトの完全なパスです (例: exampledir/exampleobject.txt)。
$object = "yourObjectName";
// ローカルファイルの完全なパスを指定します。例: D:\\localpath\\examplefile.txt。
$localfile = "yourLocalFile";

try{
    $options = array(
        OssClient::OSS_HEADERS => array(          
           // オブジェクトが Fri, 9 Apr 2021 14:47:53 GMT より後に変更された場合にダウンロードします。
          OssClient::OSS_IF_MODIFIED_SINCE => "Fri, 9 Apr 2021 14:47:53 GMT",
          // オブジェクトが Wed, 13 Oct 2021 14:47:53 GMT 以前に変更された場合にダウンロードします。
          OssClient::OSS_IF_UNMODIFIED_SINCE => "Fri, 13 Oct 2021 14:47:53 GMT",
          // ETag が指定された ETag と一致しない場合にオブジェクトをダウンロードします。
          OssClient::OSS_IF_NONE_MATCH => '"5B3C1A2E0563E1B002CC607C****"',
          // ETag が指定された ETag と一致する場合にオブジェクトをダウンロードします。
          OssClient::OSS_IF_MATCH => '"fba9dede5f27731c9771645a3986****"',          
          OssClient::OSS_FILE_DOWNLOAD => $localfile
        )

    );

    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
    $ossClient->getObject($bucket, $object, $options);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}