OssClient é o cliente PHP para Object Storage Service (OSS). Use-o para gerenciar recursos do OSS, como buckets e arquivos. Para enviar uma solicitação ao OSS usando o kit de desenvolvimento de software (SDK) PHP, você deve inicializar uma instância de OssClient e modifique suas configurações padrão conforme necessário.
Crie um OssClient
Signature V4 (Recommended)
Utilize o algoritmo Signature V4, que oferece maior segurança. Ao inicializar um cliente com Signature V4, especifique um endpoint e um ID de região de uso geral da Alibaba Cloud. O ID da região identifica a origem da solicitação. Por exemplo, especifique cn-hangzhou. Declare também OssClient::OSS_SIGNATURE_VERSION_V4. As versões 2.7.0 e posteriores do OSS PHP SDK suportam Signature V4.
O código abaixo exemplifica a criação de um OssClient usando um nome de domínio do OSS e Signature V4. Para outros cenários, como crie um OssClient com um nome de domínio personalizado ou Security Token Service (STS), adapte o código deste 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 (Not recommended)
Crie um OssClient usando um nome de domínio do OSS
O exemplo a seguir demonstra como crie um OssClient utilizando um nome de domínio do OSS. Para mais detalhes sobre os nomes de domínio do OSS em diferentes regiões, consulte Regiões e 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
Este trecho de código ilustra a criação de um OssClient com um nome de domínio personalizado. Para saber mais sobre o acesso ao OSS via nome de domínio personalizado, veja Acessar o OSS usando um nome de domínio personalizado.
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 STS
Confira abaixo um exemplo de como crie um OssClient utilizando 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
É possível acessar o OSS a partir de uma instância do Elastic Compute Service (ECS) por meio de uma função ram de instância. Esse recurso permite associar uma função a uma instância ECS, possibilitando o acesso ao OSS de dentro da instância com credenciais temporárias do STS. O sistema gera e atualiza essas credenciais automaticamente. Sua aplicação pode obtê-las em uma URL de metadados da instância específica.
Antes de crie um OssClient com uma função ram de instância, execute o comando abaixo para instale o SDK via Composer.
composer require alibabacloud/credentials
O código a seguir mostra como crie um OssClient utilizando 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 STSAssumeRole
Para crie um OssClient com STSAssumeRole, execute primeiro o comando abaixo e instale o SDK usando o Composer.
composer require alibabacloud/credentials
Veja a seguir um exemplo de criação de OssClient com 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
Defina parâmetros para o OssClient, como servidor proxy, tempo limite de conexão e número máximo de conexões.
|
Parâmetro |
Descrição |
Método |
|
timeout |
Tempo limite para transmissão de dados na camada de socket. O valor padrão é 5184000. Unidade: segundos. |
$ossClient->setTimeout(60); |
|
connectTimeout |
Tempo limite para estabelecer uma conexão. O valor padrão é 10. Unidade: segundos. |
$ossClient->setConnectTimeout(600); |
|
maxRetries |
Número máximo de tentativas para uma solicitação com falha. O valor padrão é 3. |
$ossClient->setMaxTries(5); |
|
useSSL |
Define 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
As versões 5,3 e superiores do PHP permitem a configuração de 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();
}