2009-09-02 6 views
1

내 코드는 며칠 전부터 정상적으로 작동하고있었습니다. 그런 다음 갑자기 BAM : 작동이 중지되었습니다. 내 PUT이 SignatureDoesNotMatch 오류와 함께 중단되었습니다. 도움?갑자기 내 Amazon S3 HTTP 요청이 작동하지 않습니다. 서명이 오류와 일치하지 않습니다. 도움?

require_once 'Crypt/HMAC.php'; 
require_once 'HTTP/Request.php'; 


function uploadFile($path_to_file, $store_file_as, $bucket, $debugmode = false) { 

     $S3_URL = "http://s3.amazonaws.com/"; 
     $filePath = $path_to_file; 
     $contentType = 'audio/mpeg'; 
     $keyId = 'THISISMYKEY, YES I DOUBLE CHECKED IT'; 
     $secretKey = 'THIS IS MYSECRET, YES I DOUBLED CHECKED IT'; 
     $key = $store_file_as; 
     $resource = $bucket . "/" . $key; 
     $acl = "public-read"; 
     $verb = "PUT"; 
    $httpDate = gmdate("D, d M Y H:i:s T"); 
    $stringToSign = "PUT\n\naudio/mpeg\n$httpDate\nx-amz-acl:$acl\n/$resource"; 
    $hasher =& new Crypt_HMAC($secretKey, "sha1"); 
    $str = $hasher->hash($stringToSign); 
    $raw = ''; 
    for ($i=0; $i < strlen($str); $i+=2) { 
     $raw .= chr(hexdec(substr($str, $i, 2))); 
    } 
    $signature = base64_encode($raw); 

    $req =& new HTTP_Request($S3_URL . $resource); 
    $req->setMethod('PUT'); 
    $req->addHeader("content-type", $contentType); 
    $req->addHeader("Date", $httpDate); 
    $req->addHeader("x-amz-acl", $acl); 
    $req->addHeader("Authorization", "AWS " . $keyId . ":" . $signature); 
    $req->setBody(file_get_contents($filePath)); 
    $req->sendRequest(); 
    echo $req->getResponseBody(); 
    } 

답변

4

Amazon S3 JavaScript signature tester에 대해 서명을 실행하십시오.

두 서명이 일치하지 않으면 키 또는 서명 절차에 문제가 있음을 알게됩니다.

두 항목이 일치하면 키와 서명 절차가 정확하고 문제가 다른 곳에서 발생합니다.

JS 테스터는 서명 생성 문제를 해결하는 데 매우 중요합니다.

+0

감사합니다. 이것은 놀라운 리소스입니다. –

관련 문제