この投稿 https://css-tricks.com/snippets/php/generate-expiring-amazon-s3-link/ が役立ちます。コメントも忘れずにチェックしてください。
*** 編集
期限切れの Amazon S3 リンクを生成する
Amazon S3 のファイルを公開する必要はありません (デフォルトでは公開されていません)。ただし、プライベート ファイルへのアクセスを許可する特別なキーを生成できます。これらのキーは URL を介して渡され、期限切れにすることができます。
<?php
if( !function_exists( 'el_crypto_hmacSHA1' ) ) {
function el_crypto_hmacSHA1($key, $data, $blocksize = 64) {
if (strlen($key) > $blocksize) $key = pack('H*', sha1($key));
$key = str_pad($key, $blocksize, chr(0x00));
$ipad = str_repeat(chr(0x36), $blocksize);
$opad = str_repeat(chr(0x5c), $blocksize);
$hmac = pack( 'H*', sha1(
($key ^ $opad) . pack( 'H*', sha1(
($キー ^ $ipad) . $データ
)))
));
base64_encode($hmac) を返します。
}
}
if(!function_exists('el_s3_getTemporaryLink')){
function el_s3_getTemporaryLink($accessKey, $secretKey, $bucket, $path, $expires = 5) {
// 有効期限を計算する
$expires = time() + intval(floatval($expires) * 60);
// パスを修正します。エンコードしてサニタイズする
$path = str_replace('%2F', '/', rawurlencode($path = ltrim($path, '/')));
// 署名のパスはバケットで始まります
$signpath = '/'. $bucket .'/'. $パス;
// 署名する S3 フレンドリ文字列
$signsz = implode("\n", $pieces = array('GET', null, null, $expires, $signpath));
// ハッシュを計算する
$signature = el_crypto_hmacSHA1($secretKey, $signsz);
// URL を貼り付ける ...
$url = sprintf('http://%s.s3.amazonaws.com/%s', $bucket, $path);
// ... クエリ文字列に ...
$qs = http_build_query($pieces = 配列(
'AWSAccessKeyId' => $accessKey,
'Expires' => $expires,
'Signature' => $signature,
));
// ...そして URL を返します!
$url.'?'.$qs を返します。
}
}
使用法
<?php
echo el_s3_getTemporaryLink('your-access-key', 'your-secret-key', 'bucket-name', '/path/to/file.mov');