Todos los productos
Search
Centro de documentos

Object Storage Service:Copia de objetos con OSS SDK para PHP 2.0

Última actualización: Sep 05, 2026

Este tema describe cómo usar el método CopyObject de OSS SDK para PHP 2.0 para copiar un objeto de menos de 5 GiB desde un bucket de origen a un bucket de destino en la misma región. El bucket de destino puede ser el mismo que el de origen u otro diferente.

Notas

  • El código de ejemplo de este tema usa el ID de región cn-hangzhou correspondiente a la región China (Hangzhou). De forma predeterminada, se usa un endpoint público para acceder a los recursos de un bucket. Si desea acceder a los recursos del bucket desde otros servicios de Alibaba Cloud en la misma región, use un endpoint interno. Para obtener más información sobre las regiones y endpoints compatibles, consulte OSS regions and endpoints.

  • Para copiar un objeto, debe tener permisos de lectura sobre el objeto de origen y permisos de lista de control de acceso (ACL) en el bucket de destino.

  • No se admite la copia entre regiones. Por ejemplo, no es posible copiar un objeto desde un bucket en la región China (Hangzhou) a un bucket en la región China (Qingdao).

  • Al copiar un objeto, asegúrese de que no haya ninguna política de retención configurada en el bucket de origen ni en el de destino. De lo contrario, se devolverá el siguiente error: The object you specified is immutable.

  • En este tema, las credenciales de acceso se obtienen de variables de entorno. Para ver más ejemplos sobre cómo configurar las credenciales de acceso, consulte Configure access credentials (PHP SDK V2).

Código de ejemplo

Use el siguiente código de ejemplo para copiar un objeto de menos de 5 GiB desde un bucket de origen a un bucket de destino:

<?php

// Include the autoload file to load dependencies.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Define and describe command-line parameters.
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // (Required) Specify the region in which the bucket is located.
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // (Optional) Specify the endpoint.
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // (Required) Specify the name of the destination bucket.
    "key" => ['help' => 'The name of the object', 'required' => True], // (Required) Specify the name of the destination object.
    "src-bucket" => ['help' => 'The name of the source bucket', 'required' => False], // (Optional) Specify the name of the source bucket.
    "src-key" => ['help' => 'The name of the source object', 'required' => True], // (Required) Specify the name of the source object.
];

// Convert the descriptions to a list of long options required by getopt.
// Add a colon (:) to the end of each parameter to indicate that a value is required. 
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Parse the command-line parameters.
$options = getopt("", $longopts);

// Check whether the required parameters are configured.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // Obtain help information for the parameters.
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // Exit the program if a required parameter is missing.
    }
}

// Assign the values parsed from the command-line parameters to the corresponding variables.
$region = $options["region"]; // Region in which the bucket is located.
$bucket = $options["bucket"]; // Name of the destination bucket.
$key = $options["key"];       // Name of the destination object.
$srcKey = $options["src-key"]; // Name of the source object.

// Load access credentials from environment variables.
// Use EnvironmentVariableCredentialsProvider to retrieve the AccessKey ID and AccessKey secret from environment variables.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Use the default configuration of the SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Specify the credential provider.
$cfg->setRegion($region); // Specify the region in which the bucket is located.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // Specify the endpoint if one is provided.
}

// Create an OSSClient instance.
$client = new Oss\Client($cfg);

// Create a CopyObjectRequest object to copy the source object.
$request = new Oss\Models\CopyObjectRequest(
            bucket: $bucket,
            key: $key);

if (!empty($options["src-bucket"])) {
    $request->sourceBucket = $options["src-bucket"]; // If the source bucket name is provided, specify the sourceBucket parameter.
}
$request->sourceKey = $srcKey; // Specify the name of the source object.

// Copy the source object.
$result = $client->copyObject($request);

// Output the result.
printf(
    'status code:' . $result->statusCode . PHP_EOL . // The HTTP status code. For example, HTTP status code 200 indicates that the request succeeded.
    'request id:' . $result->requestId . PHP_EOL     // The request ID, which is used to debug or trace a request.
);

Referencias

  • Para consultar el código de ejemplo completo para copiar un objeto, visite GitHub.