OssClient es el cliente de PHP para Object Storage Service (OSS). Con este cliente se gestionan los recursos de OSS, como los buckets y los archivos. Para enviar una solicitud a OSS mediante el kit de desarrollo de software (SDK) de PHP, debe crear una instancia de OssClient y modificar su configuración predeterminada según sus necesidades.
Crear un OssClient
Signature V4 (recomendado)
Utilice el algoritmo Signature V4, que ofrece mayor seguridad. Al inicializar un cliente con Signature V4, debe especificar un endpoint y un identificador de región de uso general de Alibaba Cloud. Este identificador señala la región desde donde se origina la solicitud; por ejemplo, especifique cn-hangzhou. También debe declarar OssClient::OSS_SIGNATURE_VERSION_V4. Las versiones 2.7.0 y posteriores del SDK de PHP para OSS son compatibles con Signature V4.
A continuación se muestra un ejemplo de cómo crear un OssClient mediante un nombre de dominio de OSS y Signature V4. Si necesita otros escenarios, como usar un nombre de dominio personalizado o Security Token Service (STS), modifique el código de este ejemplo.
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
try {
// Obtain access credentials from environment variables and save them to the provider. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
$provider = new EnvironmentVariableCredentialsProvider();
// Specify the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Specify the region that corresponds to the endpoint. For example, specify cn-hangzhou.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
return;
}
Signature V1 (no recomendado)
A partir del 1 de marzo de 2025, Object Storage Service (OSS) de Alibaba Cloud ya no ofrece la firma V1 a los usuarios nuevos (es decir, a los UID nuevos). Desde el 1 de septiembre de 2025, OSS dejará de actualizar y mantener la firma V1, y ya no estará available para los buckets de object storage nuevos. Cambie a la firma V4 lo antes posible para evitar interrupciones en el servicio. Para obtener más información, consulte Anuncio.
Crear un OssClient con un nombre de dominio de OSS
A continuación se muestra un ejemplo de cómo crear un OssClient mediante un nombre de dominio de OSS. Para conocer los nombres de dominio de OSS correspondientes a cada región, consulte Regions and endpoints.
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
$provider = new EnvironmentVariableCredentialsProvider();
// The endpoint of the China (Hangzhou) region is used as an example. Specify an endpoint based on your actual region.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}
Crear un OssClient con un nombre de dominio personalizado
A continuación se muestra un ejemplo de cómo crear un OssClient mediante un nombre de dominio personalizado. Para obtener más información sobre el acceso a OSS con un nombre de dominio personalizado, consulte Access OSS using a custom domain name.
No es posible utilizar el método listBuckets con un nombre de dominio personalizado.
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
$provider = new EnvironmentVariableCredentialsProvider();
// Specify a custom domain name. For example, http://example.com.
$endpoint = "http://example.com";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"cname" => true
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}
Crear un OssClient con STS
A continuación se muestra un ejemplo de cómo crear un OssClient mediante STS.
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
// Before you run this sample code, make sure that the AccessKey pair (AccessKey ID and AccessKey secret) and security token of STS are configured in the environment variables.
$provider = new EnvironmentVariableCredentialsProvider();
// The endpoint of the China (Hangzhou) region is used as an example. Specify an endpoint based on your actual region.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}
Crear un OssClient con un rol de RAM de instancia
Puede acceder a OSS desde una instancia de Elastic Compute Service (ECS) mediante un rol de RAM de instancia. Este tipo de rol permite asociar un rol a una instancia de ECS. De esta manera, se accede a OSS desde dentro de la instancia con las credenciales temporales de STS. El sistema genera y actualiza automáticamente dichas credenciales. Su aplicación puede recuperarlas desde una URL de metadatos de instancia específica.
Antes de crear un OssClient con un rol de RAM de instancia, ejecute el siguiente comando para instalar el SDK con Composer.
composer require alibabacloud/credentials
A continuación se muestra un ejemplo de cómo crear un OssClient mediante un rol de RAM de instancia.
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\CredentialsProvider;
use AlibabaCloud\Credentials\Credential;
use OSS\Credentials\StaticCredentialsProvider;
use OSS\Core\OssException;
use OSS\OssClient;
class AlibabaCloudCredentialsWrapper implements CredentialsProvider{
/**
* @var \OSS\Credentials\Credentials
*/
private $wrapper;
public function __construct($wrapper){
$this->wrapper = $wrapper;
}
public function getCredentials(){
$ak = $this->wrapper->getAccessKeyId();
$sk = $this->wrapper->getAccessKeySecret();
$token = $this->wrapper->getSecurityToken();
return new StaticCredentialsProvider($ak, $sk, $token);
}
}
$ecsRamRole = new Credential(array(
// Specify the credential type. The value is fixed to ecs_ram_role.
'type' => 'ecs_ram_role',
// Specify the role name.
'role_name' => 'EcsRamRoleOssTest',
));
$providerWarpper = new AlibabaCloudCredentialsWrapper($ecsRamRole);
$provider = $providerWarpper->getCredentials();
$config = array(
'provider' => $provider,
// The endpoint of the China (Hangzhou) region is used as an example. Set it to https://oss-cn-hangzhou.aliyuncs.com. For other regions, specify the actual endpoint.
'endpoint'=> 'https://oss-cn-hangzhou.aliyuncs.com'
);
try {
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}
Crear un OssClient con STSAssumeRole
Antes de crear un OssClient con STSAssumeRole, ejecute el siguiente comando para instalar el SDK con Composer.
composer require alibabacloud/credentials
A continuación se muestra un ejemplo de cómo crear un OssClient mediante STSAssumeRole.
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\CredentialsProvider;
use AlibabaCloud\Credentials\Credential;
use OSS\Credentials\StaticCredentialsProvider;
use OSS\Core\OssException;
use OSS\OssClient;
class AlibabaCloudCredentialsWrapper implements CredentialsProvider{
/**
* @var \OSS\Credentials\Credentials
*/
private $wrapper;
public function __construct($wrapper){
$this->wrapper = $wrapper;
}
public function getCredentials(){
$ak = $this->wrapper->getAccessKeyId();
$sk = $this->wrapper->getAccessKeySecret();
$token = $this->wrapper->getSecurityToken();
return new StaticCredentialsProvider($ak, $sk, $token);
}
}
$ramRoleArn = new Credential(array(
// Specify the credential type. The value is fixed to ram_role_arn.
'type' => 'ram_role_arn',
// Before you run this sample code, make sure that you have used the AccessKey pair of a RAM user to set the YOUR_ACCESS_KEY_ID and YOUR_ACCESS_KEY_SECRET environment variables.
'access_key_id' => getenv('YOUR_ACCESS_KEY_ID'),
'access_key_secret' => getenv('YOUR_ACCESS_KEY_SECRET'),
// Specify the Alibaba Cloud Resource Name (ARN) of the role to assume. The format is acs:ram::$accountID:role/$roleName.
'role_arn' => 'acs:ram::17464958********:role/ossststest',
// Specify a custom role session name to distinguish different tokens.
'role_session_name' => 'yourRoleSessionName',
// Specify a custom policy.
'policy' => '',
));
$providerWarpper = new AlibabaCloudCredentialsWrapper($ramRoleArn);
$provider = $providerWarpper->getCredentials();
$config = array(
'provider' => $provider,
// The endpoint of the China (Hangzhou) region is used as an example. Set it to https://oss-cn-hangzhou.aliyuncs.com. For other regions, specify the actual endpoint.
'endpoint'=> 'https://oss-cn-hangzhou.aliyuncs.com'
);
try {
$ossClient = new OssClient($config);
var_dump($ossClient);
} catch (OssException $e) {
print $e->getMessage();
}
Configurar un OssClient
En un OssClient se configuran diversos parámetros, como el servidor proxy, el tiempo de espera de conexión y el número máximo de conexiones.
|
Parámetro |
Descripción |
Método |
|
timeout |
Tiempo de espera para la transmisión de datos en la capa de socket. El valor predeterminado es 5184000. Unidad: segundos. |
$ossClient->setTimeout(60); |
|
connectTimeout |
Tiempo de espera para establecer una conexión. El valor predeterminado es 10. Unidad: segundos. |
$ossClient->setConnectTimeout(600); |
|
maxRetries |
Número máximo de reintentos cuando una solicitud termina con errores. El valor predeterminado es 3. |
$ossClient->setMaxTries(5); |
|
useSSL |
Indica si se habilita la verificación del certificado SSL. Valores válidos:
|
$ossClient->setUseSSL(true); |
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
$provider = new EnvironmentVariableCredentialsProvider();
// The endpoint of the China (Hangzhou) region is used as an example. Specify an endpoint based on your actual region.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Set the connection timeout period.
$ossClient->setConnectTimeout(300);
// Set the maximum number of retries for failed requests.
$ossClient->setMaxTries(5);
// Set the timeout period for data transmission at the socket layer.
$ossClient->setTimeout(30);
// Specify whether to enable SSL certificate verification.
$ossClient->setUseSSL(true);
} catch (OssException $e) {
print $e->getMessage();
}
Configurar un servidor proxy
Las versiones 5.3 y posteriores de PHP admiten la configuración de un servidor proxy.
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
// Before you run this sample code, make sure that the AccessKey pair (AccessKey ID and AccessKey secret) and security token of STS are configured in the environment variables.
$provider = new EnvironmentVariableCredentialsProvider();
// The endpoint of the China (Hangzhou) region is used as an example. Specify an endpoint based on your actual region.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Set the proxy server address. For example, http://<username>:<password>@<proxy_ip>:<proxy_port>.
$request_proxy = "yourRequestProxy"
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"request_proxy"=> $request_proxy,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}