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:

  1. No portal do Azure aceda à sua conta de armazenamento.

  2. 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.

  3. Tome nota do nome da conta de armazenamento que irá precisar para autorização.

  4. Localize o valor chave em key1 e selecione Copiar para copiar a chave da conta.

    Captura de ecrã que mostra como copiar a chave de conta do portal do Azure

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.

export ACCOUNT_NAME=<youraccountname>
export ACCOUNT_KEY=<youraccountkey>

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:

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).