ネットサービスとかGoogleとか豆知識とか。

Index > プログラミング > PHP > AWS SDK for PHPを使ってAmazon S3の有効期限付きURLを生成
PHP
2013年06月20日 13:39

AWS SDK for PHPを使ってAmazon S3の有効期限付きURLを生成

  • このエントリーをはてなブックマークに追加
  • ... PV
スポンサード リンク

Amazon S3 で一定期間だけ有効な URL を生成する仕組みがあるらしいということで調べていました。

» Using Query String Authentication - Amazon Simple Storage Service

通常のオブジェクトの URL に Signature などのパラメータをつけて、プライベートなオブジェクトでも一定期間だけアクセス可能な状態にすることができるという仕組みです。

この Signature 付き URL を生成する方法は「Signing and Authenticating REST Requests - Amazon Simple Storage Service」にあるのですが、公式 SDK を使えば簡単にできるので今回はそっちを使ってみました。なお SDK のバージョンは 1.6 系のほうを使ってます。

» AWS SDK for PHP 1.6.2

ここにサンプル含め使い方が載ってます。

  require_once('sdk.class.php');

  $s3 = new AmazonS3();
  $url = $s3->get_object_url($bucket, $fileName, time() + 180);

  // 「5 minutes」のような指定でもよい
  // $url = $s3->get_object_url($bucket, $fileName, '5 minutes');

get_object_url()の第3引数に URL の有効期限として「UNIXタイムスタンプ」もしくは「strtotime関数が引数に取りうる形式の文字列」を与えると、自動的にクエリ付きの URL を返してくれます。

ところで、URL にアクセスされた際にファイルダウンロードのダイアログを開かせたいという場合もあるかと思いますが、その場合は HTTP ヘッダーをオプションで与えるといけます。

  $s3 = new AmazonS3();
  $opts = array(
    'response' => array(
      'content-disposition' => 'attachment; filename="hoge.mp4"',
      'content-type' => 'application/octet-stream',
    ),
  );
  $url = $s3->get_object_url($bucket, $fileName, '5 minutes', $opts);

このように Content-Disposition ヘッダー等をつけてあげるといいでしょう。

なお、SDKを使う際には config.inc.php を設置しないといけませんが、それについては以下のエントリーのほうで説明してますので分からない場合は参考にしてみてください。

» AWS SDK for PHPを使ってAmazon SESからメール送信