/** * 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; }
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; }