You can clone with HTTPS or SSH.
$client = array( 'key' => '<key>', 'secret' => '<secret>');$expires = 5; // In minutes // output signed URL stringecho el_s3_getTemporaryLink($client['key'], $client['secret'], 'bucket', '<path:file-MD5>', '<filename>', $expires); /*** Calculate the HMAC SHA1 hash of a string.** @param string $key The key to hash against* @param string $data The data to hash* @param int $blocksize Optional blocksize* @return string HMAC SHA1*/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( ($key ^ $ipad) . $data )) )); return base64_encode($hmac);} /*** 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, $filename = '', $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, '/'))); if($filename) { $path .= '?response-content-disposition=attachment; filename="'. $filename. '"'; } // 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 ($filename) ? $url.'&'.$qs : $url.'?'.$qs ;}