OssClient é o cliente PHP para o Object Storage Service (OSS). Com ele, gerencie recursos do OSS, como buckets e arquivos. Para enviar uma solicitação do OSS usando o kit de desenvolvimento de software (SDK) PHP, inicialize uma instância do OssClient e modifique suas configurações padrão conforme necessário.
crie um OssClient
Signature V4 (Recomendado)
Use o algoritmo Signature V4, que é mais seguro. Ao inicializar um cliente com o Signature V4, especifique um endpoint e um ID de região de uso geral do Alibaba Cloud. O ID da região identifica a região de onde a solicitação se origina. Por exemplo, especifique cn-hangzhou. Você também deve declarar OssClient::OSS_SIGNATURE_VERSION_V4. As versões 2.7.0 e posteriores do OSS PHP SDK suportam o Signature V4.
O código a seguir fornece um exemplo de como criar um OssClient usando um nome de domínio do OSS e o Signature V4. Para outros cenários, como criar um OssClient usando um nome de domínio personalizado ou o Security Token Service (STS), modifique o código neste exemplo.
<?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 (Não recomendado)
A partir de 1º de março de 2025, o Object Storage Service (OSS) do Alibaba Cloud não oferecerá mais a assinatura V1 para novos usuários (ou seja, novos UIDs). A partir de 1º de setembro de 2025, o OSS interromperá a atualização e a manutenção da assinatura V1 e não a oferecerá mais para novos buckets de armazenamento de objetos. Migre para a assinatura V4 o mais rápido possível para evitar interrupções no service. Para mais informações, consulte Anúncio.
crie um OssClient usando um nome de domínio do OSS
O código a seguir fornece um exemplo de como criar um OssClient usando um nome de domínio do OSS. Para mais informações sobre os nomes de domínio do OSS em diferentes regiões, 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();
}
crie um OssClient usando um nome de domínio personalizado
O código a seguir fornece um exemplo de como criar um OssClient usando um nome de domínio personalizado. Para mais informações sobre como acessar o OSS usando um nome de domínio personalizado, consulte Access OSS using a custom domain name.
Não é possível usar o método listBuckets com um nome de domínio 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();
}
crie um OssClient usando o STS
O código a seguir fornece um exemplo de como criar um OssClient usando o 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();
}
crie um OssClient usando uma função RAM de instância
Você pode acessar o OSS a partir de uma instância do Elastic Compute Service (ECS) usando uma função RAM de instância. Essa função permite associar uma função (role) a uma instância do ECS, possibilitando o acesso ao OSS de dentro da instância com credenciais temporárias do STS. O sistema gera e atualiza automaticamente as credenciais temporárias. Sua aplicação pode recuperar essas credenciais a partir de uma URL de metadados da instância especificada.
Antes de criar um OssClient usando uma função RAM de instância, execute o comando a seguir e instale o SDK com o Composer.
composer require alibabacloud/credentials
O código a seguir fornece um exemplo de como criar um OssClient usando uma função RAM de instância.
<?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();
}
crie um OssClient usando o STSAssumeRole
Antes de criar um OssClient usando o STSAssumeRole, execute o comando a seguir e instale o SDK com o Composer.
composer require alibabacloud/credentials
O código a seguir fornece um exemplo de como criar um OssClient usando o 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();
}
configure um OssClient
Você pode configurar parâmetros para um OssClient, como o servidor proxy, tempo limite de conexão e número máximo de conexões.
|
Parâmetro |
Descrição |
Método |
|
timeout |
O tempo limite para transmissão de dados na camada de soquete. O valor padrão é 5.184.000. Unidade: segundos. |
$ossClient->setTimeout(60); |
|
connectTimeout |
O tempo limite para estabelecer uma conexão. O valor padrão é 10. Unidade: segundos. |
$ossClient->setConnectTimeout(600); |
|
maxRetries |
O número máximo de tentativas para uma solicitação com falha. O valor padrão é 3. |
$ossClient->setMaxTries(5); |
|
useSSL |
defina se a verificação de certificado SSL deve ser ativada. 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();
}
configure um servidor proxy HTTP
As versões 5,3 e posteriores do PHP suportam a configuração de servidor proxy HTTP.
<?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();
}