s3put.php:
Note: This file requires:
pear install Crypt_HMAC
pear install HTTP_Request
#!/usr/bin/php -q
<?php
require_once 'Crypt/HMAC.php';
require_once 'HTTP/Request.php'; // see sample code for note on bug in this package
$bucket = "[a bucket name you already created to store these files]";
$keyId = "[your public key]";
$secretKey = "[your s3 secret key]";
$S3_URL = "https://s3.amazonaws.com/";
$file = $argv[1];
if ( !is_readable($file) )
die("'$file' is not readable.\nUsage: {$_SERVER['_']} <path_to_file>");
$contentType = "application/binary";
$verb = "PUT";
$httpDate = gmdate("D, d M Y H:i:s T");
$basename = basename($file);
$resource = "$bucket/$basename";
$acl = "private";
$stringToSign = "$verb\n\n$contentType\n$httpDate\nx-amz-acl:$acl\n/$resource";
$hasher =& new Crypt_HMAC($secretKey, "sha1?);
$signature = hex2b64($hasher->hash($stringToSign));
$req =& new HTTP_Request($S3_URL . $resource);
$req->setMethod($verb);
$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($file));
$req->sendRequest();
if ($req->getResponseCode() == 200) {
print "File '$file' was PUT\n";
} else {
print "An error occured\n";
exit(1);
// something bad happened
}
function hex2b64($str) {
$raw = ";
for ($i=0; $i < strlen($str); $i+=2) {
$raw .= chr(hexdec(substr($str, $i, 2)));
}
return base64_encode($raw);
}
?>
This was my first stab at this. Better articles are coming soon.
Dave.





















