Transferir objetos de/para o armazenamento de Blobs do Azure com PHP
Neste início rápido, vai aprender a utilizar PHP para carregar, transferir e listar blobs de blocos num contentor no armazenamento de Blobs do Azure.
Pré-requisitos
Para aceder ao Armazenamento do Azure, precisará de uma subscrição do Azure. Se ainda não tiver uma subscrição, crie uma conta gratuita antes de começar.
Todo o acesso ao Armazenamento do Azure ocorre através de uma conta de armazenamento. Neste início rápido, crie uma conta de armazenamento com o portal do Azure, Azure PowerShell ou a CLI do Azure. Para obter ajuda para criar uma conta de armazenamento, veja Criar uma conta de armazenamento.
Certifique-se de que tem os seguintes pré-requisitos adicionais instalados:
Transferir a aplicação de exemplo
O exemplo de aplicação utilizado neste início rápido é uma aplicação PHP básica.
Utilize o git para transferir uma cópia da aplicação para o seu ambiente de desenvolvimento.
git clone https://github.com/Azure-Samples/storage-blobs-php-quickstart.git
Este comando clona o repositório para a sua pasta local do git. Para abrir a aplicação de exemplo PHP, procure a pasta storage-blobs-php-quickstart e abra o ficheiro phpqs.php.
Copiar as credenciais do Portal do Azure
A aplicação de exemplo tem de autorizar o acesso à sua conta de armazenamento. Forneça as credenciais da conta de armazenamento à aplicação sob a forma de uma cadeia de ligação. Para ver as credenciais da conta de armazenamento:
No portal do Azure aceda à sua conta de armazenamento.
Na secção Definições da descrição geral da conta de armazenamento, selecione Chaves de acesso para apresentar as chaves de acesso da conta e a cadeia de ligação.
Tome nota do nome da conta de armazenamento que irá precisar para autorização.
Localize o valor chave em key1 e selecione Copiar para copiar a chave da conta.
Configurar a cadeia de ligação de armazenamento
Na aplicação, tem de indicar o nome da conta de armazenamento e a chave de conta para criar a instância BlobRestProxy para a aplicação. É recomendado armazenar estes identificadores numa variável de ambiente no computador local que está a executar a aplicação. Utilize um dos exemplos seguintes, consoante o Sistema Operativo para criar a variável de ambiente. Substitua os valores youraccountname e youraccountkey pelo nome da conta e a chave.
Configurar o ambiente
Retire a pasta da pasta git local e coloque-a num diretório servido pelo servidor PHP. Em seguida, abra uma linha de comandos no âmbito desse mesmo diretório e introduza: php composer.phar install
Executar o exemplo
Este exemplo cria um ficheiro de teste na pasta ".". O programa de exemplo carrega o ficheiro de teste para o armazenamento de Blobs, lista os blobs no contentor e transfere o ficheiro com um novo nome.
Execute o exemplo. O resultado seguinte é um exemplo do resultado devolvido ao executar a aplicação:
Uploading BlockBlob: HelloWorld.txt
These are the blobs present in the container: HelloWorld.txt: https://myexamplesacct.blob.core.windows.net/blockblobsleqvxd/HelloWorld.txt
This is the content of the blob uploaded: Hello Azure!
Quando prime o botão apresentado, o programa de exemplo elimina o contentor de armazenamento e os ficheiros. Antes de continuar, procure os dois ficheiros na pasta do servidor. Pode abrir e ver que são idênticos.
Também pode utilizar uma ferramenta como o Explorador de Armazenamento do Azure para ver os ficheiros no armazenamento de Blobs. O Explorador de Armazenamento do Azure é uma ferramenta multiplataformas gratuita que lhe permite aceder às informações da sua conta de armazenamento.
Depois de verificar os ficheiros, prima qualquer tecla para concluir a demonstração e eliminar os ficheiros de teste. Agora que sabe o que o exemplo faz, abra o ficheiro example.rb para ver o código.
Compreender o código de exemplo
Em seguida, vamos analisar o código de exemplo, para que saiba como funciona.
Obter referências para os objetos de armazenamento
A primeira coisa a fazer é criar as referências para os objetos utilizados para aceder e gerir ao armazenamento de Blobs. Estes objetos dependem uns dos outros e cada um é utilizado pelo que vem a seguir na lista.
- Crie uma instância do objeto do armazenamento do Azure BlobRestProxy para configurar as credenciais de ligação.
- Crie o objeto BlobService, que aponta para o serviço Blob na sua conta de armazenamento.
- Crie o objeto Container, que represente o contentor a que está aceder. Os contentores são utilizados para organizar os blobs, da mesma forma como utiliza pastas para organizar os ficheiros.
Quando tiver o objeto de contentor blobClient, pode criar o objeto de blob Block que aponta para o blob específico no qual está interessado. Em seguida, pode efetuar operações como carregar, transferir e copiar.
Importante
Os nomes dos contentores têm de estar em minúscula. Para obter informações sobre os nomes dos contentores e dos blobs, veja Naming and Referencing Containers, Blobs, and Metadata (Dar Nomes e Referenciar Contentores, Blobs e Metadados).
Nesta secção, vai configurar uma instância do cliente de armazenamento do Azure, instanciar o objeto do serviço Blob, criar um contentor novo e definir as permissões no contentor, para que os blobs sejam públicos. O contentor é designado quickstartblobs.
# Setup a specific instance of an Azure::Storage::Client
$connectionString = "DefaultEndpointsProtocol=https;AccountName=".getenv('account_name').";AccountKey=".getenv('account_key');
// Create blob client.
$blobClient = BlobRestProxy::createBlobService($connectionString);
# Create the BlobService that represents the Blob service for the storage account
$createContainerOptions = new CreateContainerOptions();
$createContainerOptions->setPublicAccess(PublicAccessType::CONTAINER_AND_BLOBS);
// Set container metadata.
$createContainerOptions->addMetaData("key1", "value1");
$createContainerOptions->addMetaData("key2", "value2");
$containerName = "blockblobs".generateRandomString();
try {
// Create container.
$blobClient->createContainer($containerName, $createContainerOptions);
Carregar blobs para o contentor
O armazenamento de blobs suporta blobs de blocos, blobs de acréscimo e blobs de páginas. Os blobs de blocos são os mais utilizados e vamos utilizá-los neste guia de introdução.
Para carregar um ficheiro para um blob, obtenha o caminho completo do ficheiro ao associar o nome de diretório e o nome de ficheiro no disco local. Em seguida, pode carregar o ficheiro para o caminho especificado, com o método createBlockBlob().
O código de exemplo utiliza um ficheiro local e carrega-o para o Azure. O ficheiro é armazenado como myfile e o nome do blob como fileToUpload no código. O exemplo seguinte carrega o ficheiro para o seu contentor com o nome quickstartblobs.
$myfile = fopen("HelloWorld.txt", "w") or die("Unable to open file!");
fclose($myfile);
# Upload file as a block blob
echo "Uploading BlockBlob: ".PHP_EOL;
echo $fileToUpload;
echo "<br />";
$content = fopen($fileToUpload, "r");
//Upload blob
$blobClient->createBlockBlob($containerName, $fileToUpload, $content);
Para efetuar uma atualização parcial do conteúdo de um blob de blocos, utilize o método createblocklist(). Os blobs de blocos podem ter no máximo 4,7 TB e podem ser qualquer coisa, desde folhas de cálculo do Excel a ficheiros grandes de vídeo. Os blobs de páginas utilizam-se principalmente para os ficheiros VHD utilizados para fazer cópias de VMs de IaaS. Os blobs de acréscimo servem para registo, como quando quer escrever num ficheiro e continuar a adicionar mais informações. Deve anexar o blob num único modelo de escritor. A maioria dos objetos guardados no armazenamento de Blobs são blobs de blocos.
Listar os blobs num contentor
Pode obter uma lista de ficheiros no contentor com o método listBlobs(). O código seguinte obtém a lista de blobs, depois percorre-os e mostra os nomes dos blobs encontrados num contentor.
$listBlobsOptions = new ListBlobsOptions();
$listBlobsOptions->setPrefix("HelloWorld");
echo "These are the blobs present in the container: ";
do{
$result = $blobClient->listBlobs($containerName, $listBlobsOptions);
foreach ($result->getBlobs() as $blob)
{
echo $blob->getName().": ".$blob->getUrl()."<br />";
}
$listBlobsOptions->setContinuationToken($result->getContinuationToken());
} while($result->getContinuationToken());
Obter o conteúdo dos blobs
Obtenha o conteúdo dos blobs com o método getBlob(). O código seguinte apresenta o conteúdo do blob atualizado numa secção anterior.
$blob = $blobClient->getBlob($containerName, $fileToUpload);
fpassthru($blob->getContentStream());
Limpar os recursos
Se já não precisar dos blobs carregados neste início rápido, pode eliminar o contentor inteiro com o método deleteContainer(). Se os ficheiros criados já não forem necessários, utilize o método deleteBlob() para eliminar os ficheiros.
// Delete blob.
echo "Deleting Blob".PHP_EOL;
echo $fileToUpload;
echo "<br />";
$blobClient->deleteBlob($_GET["containerName"], $fileToUpload);
// Delete container.
echo "Deleting Container".PHP_EOL;
echo $_GET["containerName"].PHP_EOL;
echo "<br />";
$blobClient->deleteContainer($_GET["containerName"]);
//Deleting local file
echo "Deleting file".PHP_EOL;
echo "<br />";
unlink($fileToUpload);
Recursos para desenvolver aplicações PHP com blobs
Consulte estes recursos adicionais para o desenvolvimento de PHP com armazenamento de blobs:
- Veja, transfira e instale o código fonte em PHP da biblioteca cliente do Armazenamento do Azure no GitHub.
- Explore os exemplos de armazenamento de blobs escritos com a biblioteca de cliente PHP.
Passos seguintes
Neste início rápido, aprendeu a transferir ficheiros entre um disco local e o armazenamento de Blobs do Azure com PHP. Para obter mais informações sobre como trabalhar com o PHP, avance para o nosso Centro de programadores de PHP.
Para obter mais informações sobre o Explorador de armazenamento e os Blobs, veja Manage Azure Blob storage resources with Storage Explorer (Gerir recursos do armazenamento de Blobs do Azure com o Explorador de Armazenamento).