首页 文章

为什么Azure SDK for PHP与Azure通用存储不兼容

提问于
浏览
0

Azure SDK for PHP Blob存储方法是否仅适用于Blob存储帐户?因为每当我尝试在Azure通用存储帐户(使您可以访问单个帐户下的表,队列,文件,Blob和Azure虚拟机磁盘等Azure存储服务)上使用它时,我的php程序就停止了特定过程以不一致的方式 . 有时它会完全处理,但是当我重新运行它时,它会在一个随机点再次停止 .

我的目标是使用foreach循环在我的Azure订阅下获取所有blob,因为我有一个数组变量,其中包含每个存储帐户的连接字符串 . 它适用于Blob存储帐户,但每当我包含通用存储帐户时,问题就会开始出现 .

我已经尝试覆盖我的php内存限制,但它仍然无法解决问题 .

任何建议家伙?先感谢您 .

2 回答

  • 0
    //Here is my code for you to visualize my goal..
    
    <!DOCTYPE html>
    <?php
    require_once "vendor/autoload.php";
    include_once 'Dbcon.php';
    
    use MicrosoftAzure\Storage\Common\ServicesBuilder;
    use MicrosoftAzure\Storage\Common\ServiceException;
    
    if (($handle = fopen("csv/azurestorages.csv", "r")) !== FALSE) {
        fgetcsv($handle);
        $acc_cred = array();
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            for ($c=0; $c < $num; $c++) {
                $acc_cred[$data[0]][$c] = $data[$c];
            }
       }
    }
    fclose($handle);
    
    $all_storage = array();
    
    foreach($acc_cred as $ac){
    
        $connstr = "DefaultEndpointsProtocol=http;AccountName=$ac[0];AccountKey=$ac[1]";
    
        // Create blob REST proxy.
        $blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connstr);
    
        // List all containers
        $container = $blobRestProxy->listContainers();
        $containers = $container->getContainers();
    
        if (count($containers) > 0) {
    
            $blob_xyzrobot = array();
    
            foreach($containers as $c){
                $blob_xyzrobot[] = $c->getName();
            }
    
            foreach($blob_xyzrobot as $bx)
            {
                    $uri_segments = array();
                    $blobstoragename = array();
    
                    // List blobs.
                    $blob_list = $blobRestProxy->listBlobs($bx);
    
                    $blobs = $blob_list->getBlobs();
    
                    if (count($blobs) > 0) {
    
                        $ctr = 0;
                        $uri_segments = explode('/', $blobs[0]->getUrl());
                        $blobstoragename = explode('.',$uri_segments[2]);
    
                        foreach($blobs as $blob)
                        {
                            $bprename = $blobstoragename[0];
                            $all_storage[$bprename."|".$bx][$ctr]['storage'] = $blobstoragename[0];
                            $all_storage[$bprename."|".$bx][$ctr]['container'] = $bx;
                            $all_storage[$bprename."|".$bx][$ctr]['whatdate'] = $blob->getProperties()->getLastModified()->format('Y-m-d');
                            $all_storage[$bprename."|".$bx][$ctr]['blob'] = $blob->getName();
                            $all_storage[$bprename."|".$bx][$ctr]['bytesize'] = $blob->getProperties()->getContentLength();
                            $all_storage[$bprename."|".$bx][$ctr]['datecreated'] = date("Y-m-d H:i:s");
                            $ctr++;
                        }
                    }
            }
        }
    }
    if (count($all_storage) > 0){
       print_r($all_storage);
    }else{
       echo "No blobs in found...";    
    }
    
    ?>
    
  • 0
    //And this is the powershell script that generates the csv file accessed by my php
    
        Get-AzureStorageAccount | foreach-object {
        Get-AzureStorageKey -StorageAccountName $_.StorageAccountName
        } | Select-object StorageAccountName, Primary, Secondary | Export-CSV "..csv\bs_asm.csv" -Encoding ascii -NoTypeInformation
        Start-Sleep 1
        Get-AzureRmStorageAccount | foreach-object {
        $Primary = (Get-AzureRmStorageAccountKey -Name $_.StorageAccountName -ResourceGroupName $_.ResourceGroupName).Value[0]
        $Secondary = (Get-AzureRmStorageAccountKey -Name $_.StorageAccountName -ResourceGroupName $_.ResourceGroupName).Value[1]
        New-Object -TypeName PSObject -Property @{
        StorageAccountName = $_.StorageAccountName
        Primary = $Primary
        Secondary = $Secondary
        } | Select-Object StorageAccountName, Primary, Secondary
        } | Export-CSV "..csv\bs_arm.csv" -Encoding ascii -NoTypeInformation
        $directory = "..csv\*.*";
        $csvFiles = Get-ChildItem -Path $directory -Filter *.csv;
        $content =@();
        foreach ($csv in $csvFiles) {
        $content += Import-Csv $csv;
        }
        $content | Export-Csv -Path "..csv\azureblobstorages.csv" -Encoding ascii -NoTypeInformation;
    

相关问题