Amazon S3のワンタイムURLを作成

Amazon S3のワンタイムURLを作成するPHPコードです。
生成された時間から一定の期間が経つとリンクは無効になります。

<?php 
  
class S3Download { 
  
    public function generateOnetimeURL($bucketName, $objectName) { 
  
        if (empty($bucketName)) { 
            die("バケット名が空です"); 
        } 
  
        if (empty($objectName)) { 
            die("ダウンロードするファイル名が空です"); 
        } 
  
        // AWSのACCESSKEY 
        $keyId = 'AWS_ACCESS_KEY'; 
        // AWSのSECRETKEY 
        $secretKey = 'AWS_SECRET_KEY'; 
        $request = $this->_makeRequestHeader($bucketName, "/".$bucketName."/".$objectName, $keyId, $secretKey); 
        $qs = http_build_query($request["header"]); 
        $url = sprintf('https://%s.s3.amazonaws.com/%s', $bucketName, $objectName); 
  
        return $url."?".$qs;
    } 
  
    private function _makeRequestHeader($bucketName, $resource, $accessKey="", $secretKey="") { 
  
        $httpVerb = 'GET' . "\n"; 
        $contentMd5 = "\n"; 
        $contentType = "\n"; 
  
        // Expireする分設定 
        // 5分を設定した 
  
        $expires = time() + intval(5) * 60; 
        $expires_str = $expires . "\n";
        $canonicalizedAmzHeaders = '';  
        $canonicalizedResource = $resource; 
        $stringToSign = $httpVerb . $contentMd5 . $contentType . $expires_str
                . $canonicalizedAmzHeaders . $canonicalizedResource;
        $hash = hash_hmac('sha1', $stringToSign, $secretKey, true); 
        $signature = base64_encode($hash); 
  
        $request = array("header" => 
            array( 
                "Expires" => $expires, 
                "AWSAccessKeyId" => $accessKey, 
                "Signature" => $signature, 
            ), 
        ); 
  
        return $request; 
    } 
  
} 
  
$s3obj = new S3Download(); 
// s3testhogeバケット直下のhoge.zipをダウンロードするURL生成 
$s3obj->generateOnetimeURL('s3testhoge','hoge.zip'); 
// ファイルがサブディレクトリ(正確には違うが…)に入ってる場合 
$s3obj->generateOnetimeURL('s3testhoge','hoge/fuga/foobar.zip');