/** * @param string object_id S3 object ID * @param int $expires Expiration timestamp * @param string $method HTTP method, default GET * @return string Signed URL */ function s3_signed_object_url($object_id, $expires, $method = 'GET') { $object_id_scrubbed = str_replace('+', '%20', str_replace('%2F', '/', rawurlencode($object_id))); $sign_string = s3_sign_auth_string(sprintf("%s\n\n\n%d\n/%s/%s", $method, $expires, S3_BUCKET_ID, $object_id_scrubbed)); return sprintf('http://%s.s3.amazonaws.com/%s?Signature=%s&AWSAccessKeyId=%s&Expires=%d', S3_BUCKET_ID, $object_id_scrubbed, urlencode(base64_encode($sign_string)), urlencode(AWS_ACCESS_KEY), urlencode($expires)); }
function s3_signed_object_url($bucket, $id, $more = array()) { $defaults = array('method' => 'GET', 'expires' => time() + 300); $args = array_merge($defaults, $more); $id = s3_enurlify_object_id($id); $path = "/{$bucket['id']}/{$id}"; $parts = array($args['method'], null, null, $args['expires'], $path); $raw = implode("\n", $parts); $sig = s3_sign_auth_string($bucket, $raw); $sig = base64_encode($sig); $query = array('Signature' => $sig, 'AWSAccessKeyId' => $bucket['key'], 'Expires' => $args['expires']); $query = http_build_query($query); $url = s3_unsigned_object_url($bucket, $id); return $url . "?" . $query; }