我如何在 softlayer 的 "standalone cdn + object storage" 上缓存清除?
how can i cache purge on softlayer's "standalone cdn + object storage"?
我们正在使用 softlayer 的 "standalone cdn + object storage" 并尝试清除像
这样的 url 的缓存
HTTP URL
http:// 000aa.http.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt
HTTPS URL
https:// 000aa.https.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt
使用写在
上的方法
参考资料
http://sldn.softlayer.com/reference/services/SoftLayer_Network_ContentDelivery_Account/purgeCache
但是缓存清除不起作用。
我如何在 softlayer 的 "standalone cdn + object storage" 上缓存清除?
以下是我们的代码和错误。
--------------------------------------------------------------------------------
softlayer-api-php-client
--------------------------------------------------------------------------------
■code
<?php
$apiUsername = 'SL0000000’;
$apiKey = '0000000000000000000000000000000000000000000000000000000000000000';
$client = SoftLayer\SoapClient::getClient('SoftLayer_Network_ContentDelivery_Account', null, $apiUsername, $apiKey);
$client->purgeCache( array( 'http:// 000aa.http.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt' ) );
exit;
■error
PHP Fatal error: Uncaught SoapFault exception: [SoftLayer_Exception] Object does not exist to execute method on. (SoftLayer_Network_ContentDelivery_Account::purgeCache) in /softlayer-api-php-client-master/src/SoapClient.php:202
Stack trace:
#0 /softlayer-api-php-client-master/src/SoapClient.php(202): SoapClient->__call('purgeCache', Array, NULL, Array, Array)
#1 /softlayer-api-php-client-master/example.php(80): SoftLayer\SoapClient->__call('purgeCache', Array)
#2 /softlayer-api-php-client-master/example.php(80): SoftLayer\SoapClient->purgeCache(Array)
#3 {main}
--------------------------------------------------------------------------------
softlayer-object-storage-php
--------------------------------------------------------------------------------
■code
$options = array('adapter' => ObjectStorage_Http_Client::SOCKET, 'timeout' => 10);
$host = 'https://tok02.objectstorage.softlayer.net';
$username = 'SLOS0000000-0:SL0000000’;
$password = '0000000000000000000000000000000000000000000000000000000000000000';
$objectStorage = new ObjectStorage( $host, $username, $password, $options);
$objectStorage->with('web/test.txt')->purgeCache();
■error
[17-Apr-2017 18:24:04 Asia/Tokyo] PHP Fatal error: Uncaught exception 'ObjectStorage_Exception_Http_MethodNotAllowed' with message 'Failed to save ObjectStorage Object. 'NoneType' object has no attribute 'get'' in /softlayer-object-storage-php-master/lib/ObjectStorage.php:589
Stack trace:
#0 /softlayer-object-storage-php-master/lib/ObjectStorage.php(589): ObjectStorage_Exception_Http::factory('Failed to save ...', 405)
#1 /softlayer-object-storage-php-master/lib/ObjectStorage/Object.php(71): ObjectStorage->update(Object(ObjectStorage_Object))
#2 /softlayer-object-storage-php-master/example.php(91): ObjectStorage_Object->purgeCache()
#3 {main}
thrown in /softlayer-object-storage-php-master/lib/ObjectStorage.php on line 589
方法 SoftLayer_Network_ContentDelivery_Account::purgeCache 适用于通过产品订单流程创建的 CDN 对象。正如您在文档中看到的那样,此方法需要一个 InitParameter,它是 CDN id 和要清除缓存的 URL。
错误"Object does not exist to execute method on"是因为您没有在
中指定CDN id
$client = SoftLayer\SoapClient::getClient('SoftLayer_Network_ContentDelivery_Account', [ID], $apiUsername, $apiKey);
如果您订购了 CDN,您应该可以通过页面 https://control.softlayer.com/storage/cdn or by calling the method SoftLayer_Account::getCdnAccounts. If this is your case, you can create a "origin pull mapping" by using the method SoftLayer_Network_ContentDelivery_Account::createOriginPullMapping. After that, you should be able to use purgeCache 方法看到它,使用您在 createOriginPullMapping 期间输入的 CNAME。
我无法重现您提供的第二个 PHP 代码中描述的错误。代码很好,我能够使用相同的代码制作 purgeCache,但我注意到以下内容:
以下行代码的结果为真:
$result = $objectStorage->with('/web/test.txt')->get()->purgeCache();
$result = $objectStorage->with('/web/test.txt')->purgeCache();
$result = $objectStorage->with('/web/test456465.txt')->purgeCache();
最后一个问题,“/web/test456465.txt”不存在但结果为真。在 purgeCache.
之前添加方法 get 时为 FALSE
错误可能与 get 方法有关,因为它说:
'NoneType'对象没有属性'get'
我建议在 purgeCache 之前添加 get 方法以验证对象是否存在,您也可以使用以下方法验证它线路代码:
$result = $objectStorage->with('/web/test.txt')->get()->getPath();
print $result;
如果打印'/web/test.txt',则表示该对象存在。
如果错误"Failed to save ObjectStorage Object"仍然存在,您可以换个位置试试。
您也可以手动清除缓存,如下所示:
提出POST请求如下:
POST: https://000aa.https.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt
Headers:
X-Context: cdn
X-Auth-Token: AUTH_tka456546546546545
X-Cdn-Purge: true
其中“AUTH_tka456546546546545”是你在使用CURL时应该得到的X-Auth-Token。参见
参考文献:
https://sldn.softlayer.com/reference/Object-Storage-CDN
http://sldn.softlayer.com/blog/waelriac/managing-softlayer-object-storage-through-rest-apis
https://sldn.softlayer.com/node/272962
https://sldn.softlayer.com/taxonomy/term/61
https://github.com/softlayer/softlayer-object-storage-php
希望对你有所帮助。
此致。
我们正在使用 softlayer 的 "standalone cdn + object storage" 并尝试清除像
这样的 url 的缓存HTTP URL
http:// 000aa.http.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt
HTTPS URL
https:// 000aa.https.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt
使用写在
上的方法参考资料 http://sldn.softlayer.com/reference/services/SoftLayer_Network_ContentDelivery_Account/purgeCache
但是缓存清除不起作用。 我如何在 softlayer 的 "standalone cdn + object storage" 上缓存清除? 以下是我们的代码和错误。
--------------------------------------------------------------------------------
softlayer-api-php-client
--------------------------------------------------------------------------------
■code
<?php
$apiUsername = 'SL0000000’;
$apiKey = '0000000000000000000000000000000000000000000000000000000000000000';
$client = SoftLayer\SoapClient::getClient('SoftLayer_Network_ContentDelivery_Account', null, $apiUsername, $apiKey);
$client->purgeCache( array( 'http:// 000aa.http.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt' ) );
exit;
■error
PHP Fatal error: Uncaught SoapFault exception: [SoftLayer_Exception] Object does not exist to execute method on. (SoftLayer_Network_ContentDelivery_Account::purgeCache) in /softlayer-api-php-client-master/src/SoapClient.php:202
Stack trace:
#0 /softlayer-api-php-client-master/src/SoapClient.php(202): SoapClient->__call('purgeCache', Array, NULL, Array, Array)
#1 /softlayer-api-php-client-master/example.php(80): SoftLayer\SoapClient->__call('purgeCache', Array)
#2 /softlayer-api-php-client-master/example.php(80): SoftLayer\SoapClient->purgeCache(Array)
#3 {main}
--------------------------------------------------------------------------------
softlayer-object-storage-php
--------------------------------------------------------------------------------
■code
$options = array('adapter' => ObjectStorage_Http_Client::SOCKET, 'timeout' => 10);
$host = 'https://tok02.objectstorage.softlayer.net';
$username = 'SLOS0000000-0:SL0000000’;
$password = '0000000000000000000000000000000000000000000000000000000000000000';
$objectStorage = new ObjectStorage( $host, $username, $password, $options);
$objectStorage->with('web/test.txt')->purgeCache();
■error
[17-Apr-2017 18:24:04 Asia/Tokyo] PHP Fatal error: Uncaught exception 'ObjectStorage_Exception_Http_MethodNotAllowed' with message 'Failed to save ObjectStorage Object. 'NoneType' object has no attribute 'get'' in /softlayer-object-storage-php-master/lib/ObjectStorage.php:589
Stack trace:
#0 /softlayer-object-storage-php-master/lib/ObjectStorage.php(589): ObjectStorage_Exception_Http::factory('Failed to save ...', 405)
#1 /softlayer-object-storage-php-master/lib/ObjectStorage/Object.php(71): ObjectStorage->update(Object(ObjectStorage_Object))
#2 /softlayer-object-storage-php-master/example.php(91): ObjectStorage_Object->purgeCache()
#3 {main}
thrown in /softlayer-object-storage-php-master/lib/ObjectStorage.php on line 589
方法 SoftLayer_Network_ContentDelivery_Account::purgeCache 适用于通过产品订单流程创建的 CDN 对象。正如您在文档中看到的那样,此方法需要一个 InitParameter,它是 CDN id 和要清除缓存的 URL。
错误"Object does not exist to execute method on"是因为您没有在
中指定CDN id$client = SoftLayer\SoapClient::getClient('SoftLayer_Network_ContentDelivery_Account', [ID], $apiUsername, $apiKey);
如果您订购了 CDN,您应该可以通过页面 https://control.softlayer.com/storage/cdn or by calling the method SoftLayer_Account::getCdnAccounts. If this is your case, you can create a "origin pull mapping" by using the method SoftLayer_Network_ContentDelivery_Account::createOriginPullMapping. After that, you should be able to use purgeCache 方法看到它,使用您在 createOriginPullMapping 期间输入的 CNAME。
我无法重现您提供的第二个 PHP 代码中描述的错误。代码很好,我能够使用相同的代码制作 purgeCache,但我注意到以下内容:
以下行代码的结果为真:
$result = $objectStorage->with('/web/test.txt')->get()->purgeCache();
$result = $objectStorage->with('/web/test.txt')->purgeCache();
$result = $objectStorage->with('/web/test456465.txt')->purgeCache();
最后一个问题,“/web/test456465.txt”不存在但结果为真。在 purgeCache.
之前添加方法 get 时为 FALSE错误可能与 get 方法有关,因为它说: 'NoneType'对象没有属性'get'
我建议在 purgeCache 之前添加 get 方法以验证对象是否存在,您也可以使用以下方法验证它线路代码:
$result = $objectStorage->with('/web/test.txt')->get()->getPath();
print $result;
如果打印'/web/test.txt',则表示该对象存在。
如果错误"Failed to save ObjectStorage Object"仍然存在,您可以换个位置试试。
您也可以手动清除缓存,如下所示:
提出POST请求如下:
POST: https://000aa.https.cdn.softlayer.net/00000AA/tok02/v1/AUTH_secretsecretsecretsecretsecretsecret/web/test.txt
Headers:
X-Context: cdn
X-Auth-Token: AUTH_tka456546546546545
X-Cdn-Purge: true
其中“AUTH_tka456546546546545”是你在使用CURL时应该得到的X-Auth-Token。参见
参考文献:
https://sldn.softlayer.com/reference/Object-Storage-CDN
http://sldn.softlayer.com/blog/waelriac/managing-softlayer-object-storage-through-rest-apis
https://sldn.softlayer.com/node/272962
https://sldn.softlayer.com/taxonomy/term/61
https://github.com/softlayer/softlayer-object-storage-php
希望对你有所帮助。
此致。