import v1.1.0_RC2 | 2009-09-20
This commit is contained in:
@ -15,9 +15,9 @@
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon_S3
|
||||
* @copyright Copyright (c) 2009, Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: S3.php 14190 2009-02-28 04:32:18Z jplock $
|
||||
* @version $Id: S3.php 16971 2009-07-22 18:05:45Z mikaelkael $
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -36,9 +36,9 @@ require_once 'Zend/Crypt/Hmac.php';
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Amazon_S3
|
||||
* @copyright Copyright (c) 2005-2008, Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @see http://docs.amazonwebservices.com/AmazonS3/2006-03-01/
|
||||
* @see http://docs.amazonwebservices.com/AmazonS3/2006-03-01/
|
||||
*/
|
||||
class Zend_Service_Amazon_S3 extends Zend_Service_Amazon_Abstract
|
||||
{
|
||||
@ -48,13 +48,14 @@ class Zend_Service_Amazon_S3 extends Zend_Service_Amazon_Abstract
|
||||
* @var array
|
||||
*/
|
||||
protected static $_wrapperClients = array();
|
||||
/**
|
||||
* Endpoint for the service
|
||||
*
|
||||
* @var Zend_Uri_Http
|
||||
*/
|
||||
protected $_endpoint;
|
||||
|
||||
|
||||
/**
|
||||
* Endpoint for the service
|
||||
*
|
||||
* @var Zend_Uri_Http
|
||||
*/
|
||||
protected $_endpoint;
|
||||
|
||||
const S3_ENDPOINT = 's3.amazonaws.com';
|
||||
|
||||
const S3_ACL_PRIVATE = 'private';
|
||||
@ -65,42 +66,53 @@ class Zend_Service_Amazon_S3 extends Zend_Service_Amazon_Abstract
|
||||
const S3_REQUESTPAY_HEADER = 'x-amz-request-payer';
|
||||
const S3_ACL_HEADER = 'x-amz-acl';
|
||||
const S3_CONTENT_TYPE_HEADER = 'Content-Type';
|
||||
|
||||
|
||||
/**
|
||||
* Set S3 endpoint to use
|
||||
*
|
||||
* @param string|Zend_Uri_Http $endpoint
|
||||
* @return Zend_Service_Amazon_S3
|
||||
*/
|
||||
public function setEndpoint($endpoint)
|
||||
public function setEndpoint($endpoint)
|
||||
{
|
||||
if(!($endpoint instanceof Zend_Uri_Http)) {
|
||||
$endpoint = Zend_Uri::factory($endpoint);
|
||||
}
|
||||
if(!$endpoint->valid()) {
|
||||
require_once 'Zend/Service/Amazon/S3/Exception.php';
|
||||
throw new Zend_Service_Amazon_S3_Exception("Invalid endpoint supplied");
|
||||
}
|
||||
$this->_endpoint = $endpoint;
|
||||
return $this;
|
||||
if (!($endpoint instanceof Zend_Uri_Http)) {
|
||||
$endpoint = Zend_Uri::factory($endpoint);
|
||||
}
|
||||
if (!$endpoint->valid()) {
|
||||
/**
|
||||
* @see Zend_Service_Amazon_S3_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Amazon/S3/Exception.php';
|
||||
throw new Zend_Service_Amazon_S3_Exception('Invalid endpoint supplied');
|
||||
}
|
||||
$this->_endpoint = $endpoint;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get current S3 endpoint
|
||||
*
|
||||
* @return Zend_Uri_Http
|
||||
*/
|
||||
public function getEndpoint()
|
||||
public function getEndpoint()
|
||||
{
|
||||
return $this->_endpoint;
|
||||
return $this->_endpoint;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $accessKey
|
||||
* @param string $secretKey
|
||||
* @param string $region
|
||||
*/
|
||||
public function __construct($accessKey=null, $secretKey=null, $region=null)
|
||||
{
|
||||
parent::__construct($accessKey, $secretKey, $region);
|
||||
$this->setEndpoint("http://".self::S3_ENDPOINT);
|
||||
parent::__construct($accessKey, $secretKey, $region);
|
||||
|
||||
$this->setEndpoint('http://'.self::S3_ENDPOINT);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Verify if the bucket name is valid
|
||||
*
|
||||
@ -133,10 +145,10 @@ class Zend_Service_Amazon_S3 extends Zend_Service_Amazon_Abstract
|
||||
require_once 'Zend/Service/Amazon/S3/Exception.php';
|
||||
throw new Zend_Service_Amazon_S3_Exception("Bucket name \"$bucket\" cannot be an IP address");
|
||||
}
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Add a new bucket
|
||||
*
|
||||
* @param string $bucket
|
||||
@ -144,19 +156,20 @@ class Zend_Service_Amazon_S3 extends Zend_Service_Amazon_Abstract
|
||||
*/
|
||||
public function createBucket($bucket, $location = null)
|
||||
{
|
||||
$this->_validBucketName($bucket);
|
||||
|
||||
$this->_validBucketName($bucket);
|
||||
|
||||
if($location) {
|
||||
$data = "<CreateBucketConfiguration><LocationConstraint>$location</LocationConstraint></CreateBucketConfiguration>";
|
||||
} else {
|
||||
$data = null;
|
||||
$data = '<CreateBucketConfiguration><LocationConstraint>'.$location.'</LocationConstraint></CreateBucketConfiguration>';
|
||||
}
|
||||
else {
|
||||
$data = null;
|
||||
}
|
||||
$response = $this->_makeRequest('PUT', $bucket, null, array(), $data);
|
||||
|
||||
return ($response->getStatus() == 200);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
/**
|
||||
* Checks if a given bucket name is available
|
||||
*
|
||||
* @param string $bucket
|
||||
@ -295,6 +308,12 @@ class Zend_Service_Amazon_S3 extends Zend_Service_Amazon_Abstract
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure the object name is valid
|
||||
*
|
||||
* @param string $object
|
||||
* @return string
|
||||
*/
|
||||
protected function _fixupObjectName($object)
|
||||
{
|
||||
$nameparts = explode('/', $object);
|
||||
@ -302,27 +321,28 @@ class Zend_Service_Amazon_S3 extends Zend_Service_Amazon_Abstract
|
||||
$this->_validBucketName($nameparts[0]);
|
||||
|
||||
$firstpart = array_shift($nameparts);
|
||||
if(count($nameparts) == 0) {
|
||||
if (count($nameparts) == 0) {
|
||||
return $firstpart;
|
||||
}
|
||||
|
||||
return $firstpart.'/'.join("/", array_map('rawurlencode',$nameparts));
|
||||
return $firstpart.'/'.join('/', array_map('rawurlencode', $nameparts));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an object
|
||||
*
|
||||
* @param string $object
|
||||
* @param bool $paidobject This is "requestor pays" object
|
||||
* @param bool $paidobject This is "requestor pays" object
|
||||
* @return string|false
|
||||
*/
|
||||
public function getObject($object, $paidobject = false)
|
||||
public function getObject($object, $paidobject=false)
|
||||
{
|
||||
$object = $this->_fixupObjectName($object);
|
||||
if($paidobject) {
|
||||
$response = $this->_makeRequest('GET', $object, null, array(self::S3_REQUESTPAY_HEADER => "requester"));
|
||||
} else {
|
||||
$response = $this->_makeRequest('GET', $object);
|
||||
if ($paidobject) {
|
||||
$response = $this->_makeRequest('GET', $object, null, array(self::S3_REQUESTPAY_HEADER => 'requester'));
|
||||
}
|
||||
else {
|
||||
$response = $this->_makeRequest('GET', $object);
|
||||
}
|
||||
|
||||
if ($response->getStatus() != 200) {
|
||||
@ -435,24 +455,26 @@ class Zend_Service_Amazon_S3 extends Zend_Service_Amazon_Abstract
|
||||
// build the end point out
|
||||
$parts = explode('/', $path, 2);
|
||||
$endpoint = clone($this->_endpoint);
|
||||
if($parts[0]) {
|
||||
// prepend bucket name to the hostname
|
||||
$endpoint->setHost($parts[0].".".$endpoint->getHost());
|
||||
if ($parts[0]) {
|
||||
// prepend bucket name to the hostname
|
||||
$endpoint->setHost($parts[0].'.'.$endpoint->getHost());
|
||||
}
|
||||
if(!empty($parts[1])) {
|
||||
$endpoint->setPath('/'.$parts[1]);
|
||||
} else {
|
||||
$endpoint->setPath('/');
|
||||
if($parts[0]) {
|
||||
$path = $parts[0]."/";
|
||||
}
|
||||
if (!empty($parts[1])) {
|
||||
$endpoint->setPath('/'.$parts[1]);
|
||||
}
|
||||
|
||||
else {
|
||||
$endpoint->setPath('/');
|
||||
if ($parts[0]) {
|
||||
$path = $parts[0].'/';
|
||||
}
|
||||
}
|
||||
|
||||
self::addSignature($method, $path, $headers);
|
||||
|
||||
|
||||
$client = self::getHttpClient();
|
||||
|
||||
$client->resetParameters();
|
||||
$client->setAuth(false);
|
||||
// Work around buglet in HTTP client - it doesn't clean headers
|
||||
// Remove when ZHC is fixed
|
||||
$client->setHeaders(array('Content-MD5' => null,
|
||||
@ -460,7 +482,7 @@ class Zend_Service_Amazon_S3 extends Zend_Service_Amazon_Abstract
|
||||
'Range' => null,
|
||||
'x-amz-acl' => null));
|
||||
|
||||
$client->setUri($endpoint);
|
||||
$client->setUri($endpoint);
|
||||
$client->setHeaders($headers);
|
||||
|
||||
if (is_array($params)) {
|
||||
|
Reference in New Issue
Block a user