共用方式為


使用 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] 底下尋找 [Key] 值,然後選取 [複製] 以複製帳戶密鑰。

    顯示如何從 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 物件,指向您感興趣的特定 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,而在本快速入門中也是如此。

若要將檔案上傳至 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() 方法。 區塊 Blob 的大小可以高達 4.7 TB,內容可以包括從 Excel 電子表格到大型視訊檔案的各類檔案。 頁面 Blob 主要用於支援 IaaS 虛擬機器的 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 記憶體資源