public function copyObject($scrBucketName, $srcObject, $destBucketName, $destObject, array $requestHeaders = null, $versionId = null)
{
$result = null;
$options = array('_subdomain' => (string) $destBucketName, 'x-amz-copy-source' => sprintf("/%s/%s" . ($versionId !== null ? "?versionId=%s" : ''), $scrBucketName, self::escapeObjectName($srcObject), self::escape($versionId)));
$allowedHeaders = array('x-amz-metadata-directive', 'x-amz-copy-source-if-match', 'x-amz-copy-source-if-none-match', 'x-amz-copy-source-if-unmodified-since', 'x-amz-copy-source-if-modified-since', 'x-amz-server-side-encryption', 'x-amz-storage-class', 'x-amz-website-redirect-location');
$allowedHeaders = array_merge($allowedHeaders, self::$xamzAclAllowedHeaders);
if (!empty($requestHeaders)) {
$requestHeaders = $this->getFilteredArray($allowedHeaders, $requestHeaders);
$options = array_merge($options, $requestHeaders);
}
$response = $this->getClient()->call('PUT', $options, sprintf('/%s', self::escapeObjectName($destObject)));
if ($response->getError() === false) {
$sxml = simplexml_load_string($response->getRawContent());
$result = new CopyObjectResponseData();
$result->setS3($this->s3);
$result->setBucketName((string) $destBucketName)->setObjectName((string) $destObject)->setHeaders($response->getHeaders())->setETag((string) $sxml->ETag)->setLastModified(new DateTime((string) $sxml->LastModified, new DateTimeZone('UTC')));
}
return $result;
}