2009-09-02 6 views
1

Mon code fonctionnait très bien il y a quelques jours. Puis, tout à coup, BAM: ça a cessé de fonctionner. Mes PUT ont cessé de passer, avec une erreur SignatureDoesNotMatch. Aidez-moi?Tout à coup, mes requêtes HTTP Amazon S3 ne fonctionnent pas. L'erreur Signature ne correspond pas. Aidez-moi?

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(); 
    } 

Répondre

4

Exécutez votre signature sur le Amazon S3 JavaScript signature tester.

Si les deux signatures ne correspondent pas, vous savez que quelque chose ne va pas avec les clés ou la procédure de signature. Si les deux correspondent, vos clés et le processus de signature sont corrects et le problème est ailleurs.

Le testeur JS est inestimable pour le dépannage des problèmes de génération de signature.

+0

merci, c'est une ressource incroyable. –

Questions connexes