使用 PHP 将对象在 Azure Blob 存储之间传输。

本快速入门指南将介绍如何使用 PHP 在 Azure Blob 存储中的容器中上传、下载和列出块 Blob。

先决条件

若要访问 Azure 存储,需要一个 Azure 订阅。 如果还没有订阅,请在开始前创建一个免费帐户

对 Azure 存储进行的所有访问都要通过存储帐户完成。 对于本快速入门,请使用 Azure 门户、Azure PowerShell 或 Azure CLI 创建存储帐户。 有关如何创建存储帐户的帮助,请参阅创建存储帐户

请确保已安装以下附加先决条件:

下载示例应用程序

本快速入门中使用的 示例应用程序 是一个基本的 PHP 应用程序。

使用 git 可将应用程序的副本下载到开发环境。

git clone https://github.com/Azure-Samples/storage-blobs-php-quickstart.git

此命令会将存储库克隆到本地 git 文件夹。 若要打开 PHP 示例应用程序,请查找 storage-blobs-php-quickstart 文件夹,并打开phpqs.php文件。

从 Azure 门户复制凭据

示例应用程序需要授权访问存储帐户。 以连接字符串的形式向应用程序提供存储帐户凭据。 若要查看存储帐户凭据,请执行以下步骤操作:

  1. Azure 门户中,进入您的存储帐户。

  2. 在存储帐户概述的 设置 部分中,选择 访问密钥 以显示帐户访问密钥和连接字符串。

  3. 请记录下存储帐户的名称,因为您将在授权过程中需要用到它。

  4. key1下找到 值,然后选择 复制 以便复制帐户密钥。

    显示如何从 Azure 门户复制帐户密钥的屏幕截图

配置存储连接字符串

在应用程序中,必须提供存储帐户名称和帐户密钥,以便为应用程序创建 BlobRestProxy 实例。 建议将这些标识符存储在运行应用程序的本地计算机上的环境变量中。 根据您使用的操作系统,选择以下示例之一来创建环境变量。 将 youraccountnameyouraccountkey 值替换为帐户名称和密钥。

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

配置您的环境

从本地 git 文件夹中获取该文件夹,并将其放置在 PHP 服务器提供的目录中。 然后,打开限定为同一目录的命令提示符,然后输入: php composer.phar install

运行示例

此示例在“.”文件夹中创建一个测试文件。 示例程序将测试文件上传到 Blob 存储,列出容器中的 Blob,并下载具有新名称的文件。

运行示例。 以下输出是运行应用程序时返回的输出示例:

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!

按下显示的按钮时,示例程序将删除存储容器和文件。 在继续之前请检查服务器文件夹中的两个文件。 你可以打开它们并查看它们是完全相同的。

还可以使用工具(如 Azure 存储资源管理器)查看 Blob 存储中的文件。 Azure 存储资源管理器是免费的跨平台工具,可用于访问存储帐户信息。

验证文件后,按任意键完成演示并删除测试文件。 了解示例的作用后,请打开 example.rb 文件来查看代码。

了解示例代码

接下来,我们将演练示例代码,以便了解其工作原理。

获取对存储对象的引用

首先,创建对用于访问和管理 Blob 存储的对象的引用。 这些对象相互生成,每个对象都由列表中的下一个对象使用。

  • 创建 Azure 存储 BlobRestProxy 对象的实例以设置连接凭据。
  • 创建指向存储帐户中的 Blob 服务的 BlobService 对象。
  • 创建 Container 对象,该对象表示要访问的容器。 容器用于组织 Blob 存储,就像使用计算机上的文件夹来组织文件一样。

获得 blobClient 容器对象后,可以创建一个指向特定 blob 的 Block 类型 blob 对象。 然后,可以执行上传、下载和复制等作。

重要

容器名称必须为小写。 有关容器 和 Blob 名称的详细信息,请参阅命名和引用容器、Blob 和元数据

在本部分中,将设置 Azure 存储客户端的实例、实例化 Blob 服务对象、创建新容器并设置容器的权限,以便 Blob 是公共的。 容器称为 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);

将 Blob 上传到容器

Blob 存储支持块 Blob、追加 Blob 和页 Blob。 在这类快速入门中,最常用的存储类型是块状 Blob。

若要将文件上传到 Blob,请通过联接本地驱动器上的目录名称和文件名来获取文件的完整路径。 然后,可以使用 createBlockBlob() 方法将文件上传到指定的路径。

示例代码采用本地文件并将其上传到 Azure。 该文件作为 myfile 存储,blob 的名称作为 fileToUpload 存储在代码中。 以下示例将文件上传到名为 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);

若要对块 Blob 的内容执行部分更新,请使用 createblocklist() 方法。 Block Blob 的大小可以高达 4.7 TB,而且可以包括从 Excel 电子表格到大型视频文件在内的任何内容。 页 Blob 主要用于用于支持 IaaS VM 的 VHD 文件。 追加 Blob 用于日志记录,例如在您想要写入文件并不断添加更多信息时。 应在单一写入者模型中使用追加 Blob 对象。 在 Blob 存储中,存储的大多数对象都是块 Blob。

列出容器中的 Blob

可以使用 listBlobs() 方法获取容器中的文件列表。 以下代码检索 blob 清单,然后遍历它们,并显示在容器中找到的 blob 的名称。

    $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());

获取 Blob 的内容

使用 getBlob() 方法获取 Blob 的内容。 以下代码显示上一部分中上传的 Blob 的内容。

    $blob = $blobClient->getBlob($containerName, $fileToUpload);
    fpassthru($blob->getContentStream());

清理资源

如果您不再需要在本快速入门中上传的 Blob 对象,可以使用 deleteContainer() 方法删除整个容器。 如果不再需要创建的文件,请使用 deleteBlob() 方法删除文件。

    // 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);   

用于使用 Blob 开发 PHP 应用程序的资源

请参阅以下附加资源,了解如何使用 Blob 存储进行 PHP 开发:

后续步骤

本快速入门介绍了如何使用 PHP 在本地磁盘和 Azure Blob 存储之间传输文件。 若要了解有关使用 PHP 的详细信息,请继续访问我们的 PHP 开发人员中心。

有关存储资源管理器和 Blob 的详细信息,请参阅 使用存储资源管理器管理 Azure Blob 存储资源