使用PHP/LARAVEL更改Azure Blob存储的DefaulServiceVersion
有没有可能有人知道如何通过php/laravel设置?我在C#上看到了答案,他们使用集成SDK。我试过了,但我无法开始,因为关于如何使用azure PHP SDK for Laravel的信息很少,或者我不明白 我尝试过但失败了:使用PHP/LARAVEL更改Azure Blob存储的DefaulServiceVersion,php,laravel,azure,api,sdk,Php,Laravel,Azure,Api,Sdk,有没有可能有人知道如何通过php/laravel设置?我在C#上看到了答案,他们使用集成SDK。我试过了,但我无法开始,因为关于如何使用azure PHP SDK for Laravel的信息很少,或者我不明白 我尝试过但失败了: $date = gmdate('D, d M Y H:i:s \G\M\T'); $account_name = "**************"; $containername = "media";
$date = gmdate('D, d M Y H:i:s \G\M\T');
$account_name = "**************";
$containername = "media";
$access_key = "access_key_from_portal";
$canonicalizedHeaders = "x-ms-date:$date\nx-ms-version:2017-11-09";
// $canonicalizedResource = "/$account_name/$containername\ncomp:list\nrestype:container";
// $canonicalizedResource = "/$account_name\nrestype:service\ncomp:properties";
$canonicalizedResource = "/$account_name /$containername\ncomp:metadata\nrestype:container\ntimeout:20";
$arraysign = array();
$arraysign[] = 'PUT'; /*HTTP Verb*/
$arraysign[] = ''; /*Content-Encoding*/
$arraysign[] = ''; /*Content-Language*/
$arraysign[] = ''; /*Content-Length (include value when zero)*/
$arraysign[] = ''; /*Content-MD5*/
$arraysign[] = ''; /*Content-Type*/
$arraysign[] = ''; /*Date*/
$arraysign[] = ''; /*If-Modified-Since */
$arraysign[] = ''; /*If-Match*/
$arraysign[] = ''; /*If-None-Match*/
$arraysign[] = ''; /*If-Unmodified-Since*/
$arraysign[] = ''; /*Range*/
$arraysign[] = $canonicalizedHeaders; /*CanonicalizedHeaders*/
$arraysign[] = $canonicalizedResource; /*CanonicalizedResource*/
$stringtosign = implode("\n", $arraysign);
$signature = 'SharedKey' . ' ' . $account_name . ':' . base64_encode(hash_hmac('sha256', utf8_encode($stringtosign), base64_decode($access_key)));
$endpoint = 'https://' . $account_name . '.blob.core.windows.net';
// $endpoint = 'https://management.azure.com/subscriptions/df4efeca-7f1e-44cd-b037-5ced337b68b0/resourceGroups/PiHealthcare/providers/Microsoft.Storage/storageAccounts/preceptorshipblobstorage?api-version=2019-06-01';
$url = $endpoint . '/' . '?restype=service&comp=properties';
$headers = [
"Content-Length:0",
"x-ms-date:{$date}",
'x-ms-version:2017-11-09',
'Accept:application/json;odata=nometadata',
"Authorization:{$signature}"
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
echo curl_error($ch);
curl_close($ch);
echo '<pre>';
print_r($response);
echo '<hr>';
print_r($signature);
echo '<pre>';
print_r($date);
echo '<hr>';
print_r($stringtosign);
echo '<hr>';
print_r($canonicalizedHeaders);
$date=gmdate('D,dm Y H:i:s\G\M\T');
$account_name=“****************”;
$containername=“媒体”;
$access\u key=“从门户访问”;
$canonicalizedHeaders=“x-ms-date:$date\nx ms版本:2017-11-09”;
//$canonicalizedResource=“/$account\u name/$containername\ncomp:list\nrestype:container”;
//$canonicalizedResource=“/$account\u name\nrestype:service\ncomp:properties”;
$canonicalizedResource=“/$account\u name/$containername\ncomp:metadata\nrestype:container\ntimeout:20”;
$arraysign=array();
$arraysign[]='PUT'/*HTTP动词*/
$arraysign[]=''/*内容编码*/
$arraysign[]=''/*内容语言*/
$arraysign[]=''/*内容长度(包括零时的值)*/
$arraysign[]=''/*Content-MD5*/
$arraysign[]=''/*内容类型*/
$arraysign[]=''/*日期*/
$arraysign[]=''/*如果修改自*/
$arraysign[]=''/*如果匹配*/
$arraysign[]=''/*如果没有匹配*/
$arraysign[]=''/*如果未修改自*/
$arraysign[]=''/*射程*/
$arraysign[]=$canonicalizedHeaders/*标准化领导者*/
$arraysign[]=$canonicalizedResource/*标准化数据源*/
$stringtosign=内爆(“\n”,$arraysign);
$signature='SharedKey'。“$帐户名称。“:”。base64_编码(hash_hmac('sha256',utf8_编码($stringtosign),base64_解码($access_key));
$endpoint='https://'$账户名称。blob.core.windows.net';
//$endpoint=https://management.azure.com/subscriptions/df4efeca-7f1e-44cd-b037-5ced337b68b0/resourceGroups/PiHealthcare/providers/Microsoft.Storage/storageAccounts/preceptorshipblobstorage?api-版本=2019-06-01';
$url=$endpoint.'/'?重新类型=服务&组件=属性';
$headers=[
“内容长度:0”,
“x-ms-date:{$date}”,
“x-ms-version:2017-11-09”,
'Accept:application/json;odata=nometadata',
“授权:{$signature}”
];
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$URL);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'PUT');
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$response=curl\u exec($ch);
回波旋度误差($ch);
卷曲关闭($ch);
回声';
打印(回复);
回声“
”;
打印(签名);
回声';
打印(日期);
回声“
”;
打印(stringtosign);
回声“
”;
印刷品(标准化领导者);
我总是会遇到同样的错误:
http请求中找到的mac签名与任何计算签名不同
我想我没有用正确的方式对共享密钥进行编码
某人?如果您想在PHP应用程序中设置blob服务属性,可以使用来实现它 比如说
$connectionString='DefaultEndpointsProtocol=https;AccountName=;AccountKey=';
$blobClient=BlobRestProxy::createBlobService($connectionString);
echo“获取Blob服务属性”。PHP_EOL;
$originalProperties=$blobClient->getServiceProperties();
//设置blob服务属性
echo“设置Blob服务属性”。PHP_EOL;
$retentionPolicy=新的retentionPolicy();
$retentionPolicy->setEnabled(真);
$retentionPolicy->setDays(10);
$logging=新日志记录();
$logging->setRetentionPolicy($retentionPolicy);
$logging->setVersion('1.0');
$logging->setDelete(true);
$logging->setRead(true);
$logging->setWrite(true);
$metrics=新指标();
$metrics->setRetentionPolicy($retentionPolicy);
$metrics->setVersion('1.0');
$metrics->setEnabled(true);
$metrics->setIncludeAPIs(true);
$serviceProperties=新的serviceProperties();
$serviceProperties->setLogging($logging);
$serviceProperties->setHourMetrics($metrics);
$blobClient->setServiceProperties($serviceProperties);
//恢复到原始属性
echo“恢复到原始服务属性”。PHP_EOL;
$blobClient->setServiceProperties($originalProperties->getValue());
回显“服务属性示例已完成”。PHP_EOL;
感谢您的回答,我正在从我的web routes中调用此代码,作为控制器中的Get方法。不确定这样做是否正确,因为它需要PUT请求?
$connectionString = 'DefaultEndpointsProtocol=https;AccountName=<yourAccount>;AccountKey=<yourKey>';
$blobClient = BlobRestProxy::createBlobService($connectionString);
echo "Get Blob Service properties" . PHP_EOL;
$originalProperties = $blobClient->getServiceProperties();
// Set blob service properties
echo "Set Blob Service properties" . PHP_EOL;
$retentionPolicy = new RetentionPolicy();
$retentionPolicy->setEnabled(true);
$retentionPolicy->setDays(10);
$logging = new Logging();
$logging->setRetentionPolicy($retentionPolicy);
$logging->setVersion('1.0');
$logging->setDelete(true);
$logging->setRead(true);
$logging->setWrite(true);
$metrics = new Metrics();
$metrics->setRetentionPolicy($retentionPolicy);
$metrics->setVersion('1.0');
$metrics->setEnabled(true);
$metrics->setIncludeAPIs(true);
$serviceProperties = new ServiceProperties();
$serviceProperties->setLogging($logging);
$serviceProperties->setHourMetrics($metrics);
$blobClient->setServiceProperties($serviceProperties);
// revert back to original properties
echo "Revert back to original service properties" . PHP_EOL;
$blobClient->setServiceProperties($originalProperties->getValue());
echo "Service properties sample completed" . PHP_EOL;