Sie müssen keine Dateien in Amazon S3 veröffentlichen (sie sind nicht standardmäßig). Sie können jedoch spezielle Schlüssel generieren, um den Zugriff auf private Dateien zu ermöglichen. Diese Schlüssel werden über die URL weitergeleitet und können ablaufen.
$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( ($key $ipad) . $data )) )); return base64_encode($hmac); ) ) if(!function_exists('el_s3_getTemporaryLink'))( /** * Create temporary URLs to your protected Amazon S3 files. * * @param string $accessKey Your Amazon S3 access key * @param string $secretKey Your Amazon S3 secret key * @param string $bucket The bucket (bucket.s3.amazonaws.com) * @param string $path The target file path * @param int $expires In minutes * @return string Temporary Amazon S3 URL * @see http://awsdocs.s3.amazonaws.com/S3/20060301/s3-dg-20060301.pdf */ function el_s3_getTemporaryLink($accessKey, $secretKey, $bucket, $path, $expires = 5) ( // Calculate expiry time $expires = time() + intval(floatval($expires) * 60); // Fix the path; encode and sanitize $path = str_replace('%2F', '/', rawurlencode($path = ltrim($path, '/'))); // Path for signature starts with the bucket $signpath = '/'. $bucket .'/'. $path; // S3 friendly string to sign $signsz = implode("\n", $pieces = array('GET', null, null, $expires, $signpath)); // Calculate the hash $signature = el_crypto_hmacSHA1($secretKey, $signsz); // Glue the URL… $url = sprintf('http://%s.s3.amazonaws.com/%s', $bucket, $path); //… to the query string… $qs = http_build_query($pieces = array( 'AWSAccessKeyId' => $accessKey, 'Expires' => $expires, 'Signature' => $signature, )); //… and return the URL! return $url.'?'.$qs; ) ) ?>
Verwendung