Example #1
0
 /**
  * Copy an object
  *
  * @param string $bucket Source bucket name
  * @param string $uri Source object URI
  * @param string $bucket Destination bucket name
  * @param string $uri Destination object URI
  * @param constant $acl ACL constant
  * @param array $metaHeaders Optional array of x-amz-meta-* headers
  * @param array $requestHeaders Optional array of request headers (content type, disposition, etc.)
  * @param constant $storageClass Storage class constant
  * @return mixed | false
  */
 public static function copyObject($srcBucket, $srcUri, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array(), $storageClass = self::STORAGE_CLASS_STANDARD)
 {
     $rest = new AEUtilsS3Request('PUT', $bucket, $uri, AEUtilAmazons3::getInstance()->defaultHost);
     $rest->setHeader('Content-Length', 0);
     foreach ($requestHeaders as $h => $v) {
         $rest->setHeader($h, $v);
     }
     foreach ($metaHeaders as $h => $v) {
         $rest->setAmzHeader('x-amz-meta-' . $h, $v);
     }
     if ($storageClass !== self::STORAGE_CLASS_STANDARD) {
         // Storage class
         $rest->setAmzHeader('x-amz-storage-class', $storageClass);
     }
     $rest->setAmzHeader('x-amz-acl', $acl);
     $rest->setAmzHeader('x-amz-copy-source', sprintf('/%s/%s', $srcBucket, rawurlencode($srcUri)));
     if (sizeof($requestHeaders) > 0 || sizeof($metaHeaders) > 0) {
         $rest->setAmzHeader('x-amz-metadata-directive', 'REPLACE');
     }
     $rest = $rest->getResponse();
     if ($rest->error === false && $rest->code !== 200) {
         $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
     }
     if ($rest->error !== false) {
         $o = self::getInstance();
         $o->setWarning(sprintf(__CLASS__ . "::copyObject({$srcBucket}, {$srcUri}, {$bucket}, {$uri}): [%s] %s", $rest->error['code'], $rest->error['message']));
         return false;
     }
     return true;
 }
Example #2
0
 public static function getBucket($bucket, $prefix = null, $marker = null, $maxKeys = null, $delimiter = null, $returnCommonPrefixes = false)
 {
     if (empty($bucket)) {
         $bucket = self::$__default_bucket;
     }
     $rest = new AEUtilsS3Request('GET', $bucket, '', AEUtilAmazons3::getInstance()->defaultHost);
     if ($prefix !== null && $prefix !== '') {
         $rest->setParameter('prefix', $prefix);
     }
     if ($marker !== null && $marker !== '') {
         $rest->setParameter('marker', $marker);
     }
     if ($maxKeys !== null && $maxKeys !== '') {
         $rest->setParameter('max-keys', $maxKeys);
     }
     if ($delimiter !== null && $delimiter !== '') {
         $rest->setParameter('delimiter', $delimiter);
     }
     $response = $rest->getResponse();
     if ($response->error === false && $response->code !== 200) {
         $response->error = array('code' => $response->code, 'message' => 'Unexpected HTTP status');
     }
     if ($response->error !== false) {
         self::getInstance()->setError(sprintf(__CLASS__ . "::getBucket(): [%s] %s", $response->error['code'], $response->error['message']));
         return false;
     }
     $results = array();
     $nextMarker = null;
     if (isset($response->body, $response->body->Contents)) {
         foreach ($response->body->Contents as $c) {
             $results[(string) $c->Key] = array('name' => (string) $c->Key, 'time' => strtotime((string) $c->LastModified), 'size' => (int) $c->Size, 'hash' => substr((string) $c->ETag, 1, -1));
             $nextMarker = (string) $c->Key;
         }
     }
     if ($returnCommonPrefixes && isset($response->body, $response->body->CommonPrefixes)) {
         foreach ($response->body->CommonPrefixes as $c) {
             $results[(string) $c->Prefix] = array('prefix' => (string) $c->Prefix);
         }
     }
     if (isset($response->body, $response->body->IsTruncated) && (string) $response->body->IsTruncated == 'false') {
         return $results;
     }
     if (isset($response->body, $response->body->NextMarker)) {
         $nextMarker = (string) $response->body->NextMarker;
     }
     // Loop through truncated results if maxKeys isn't specified
     if ($maxKeys == null && $nextMarker !== null && (string) $response->body->IsTruncated == 'true') {
         do {
             $rest = new AEUtilsS3Request('GET', $bucket, '', AEUtilAmazons3::getInstance()->defaultHost);
             if ($prefix !== null && $prefix !== '') {
                 $rest->setParameter('prefix', $prefix);
             }
             $rest->setParameter('marker', $nextMarker);
             if ($delimiter !== null && $delimiter !== '') {
                 $rest->setParameter('delimiter', $delimiter);
             }
             if (($response = $rest->getResponse(true)) == false || $response->code !== 200) {
                 break;
             }
             if (isset($response->body, $response->body->Contents)) {
                 foreach ($response->body->Contents as $c) {
                     $results[(string) $c->Key] = array('name' => (string) $c->Key, 'time' => strtotime((string) $c->LastModified), 'size' => (int) $c->Size, 'hash' => substr((string) $c->ETag, 1, -1));
                     $nextMarker = (string) $c->Key;
                 }
             }
             if ($returnCommonPrefixes && isset($response->body, $response->body->CommonPrefixes)) {
                 foreach ($response->body->CommonPrefixes as $c) {
                     $results[(string) $c->Prefix] = array('prefix' => (string) $c->Prefix);
                 }
             }
             if (isset($response->body, $response->body->NextMarker)) {
                 $nextMarker = (string) $response->body->NextMarker;
             }
         } while ($response !== false && (string) $response->body->IsTruncated == 'true');
     }
     return $results;
 }