1
我編寫了以下函數來編碼我的S3鏈接,以便它們處理Amazon的S3編碼系統以保護鏈接。麻煩的是,它只有在文件在存儲桶中時才起作用。如果我將一個子文件夾放到存儲桶中,並將文件粘貼在那裏,則不起作用。我究竟做錯了什麼?如何讓我的Amazon S3編碼功能瞭解存儲桶內的子文件夾?
function encodeS3($sURL,$sAccessKey,$sSecretKey,$nExpireMinutes = 5) {
$sFile = basename($sURL);
$sBucket = basename(str_replace('/' . $sFile,'',$sURL));
$asQuery = array(
'AWSAccessKeyId' => $sAccessKey,
);
$nExpireSecs = absint($nExpireMinutes) * 60;
$nExpireSecs = time() + absint($nExpireSecs);
$asQuery[ 'Expires' ] = $nExpireSecs;
$sAmazonText = "GET\n\n\n{$nExpireSecs}\n/{$sBucket}/{$sFile}";
$asQuery[ 'Signature' ] = urlencode(base64_encode((hash_hmac('sha1', utf8_encode($sAmazonText), $sSecretKey, TRUE))));
$s = add_query_arg($asQuery, "https://s3.amazonaws.com/{$sBucket}/{$sFile}");
return esc_url($s);
}