简体   繁体   English

清除AWS s3 php亚马逊sdk上的缓存

[英]clear cache on AWS s3 php amazon sdk

I add a new media image (using amazon-s3-and-cloudfront and amazon-web-services wordpress plugins) and I need to clear cache of this image. 我添加了一个新的媒体映像(使用amazon-s3-and-cloudfrontamazon-web-services wordpress插件),并且需要清除该映像的缓存。

I use smush PRO to compress image: it compress image only locally so I need to re-put images on S3. 我使用smush PRO压缩图像:它仅在本地压缩图像,因此我需要在S3上重新放置图像。

This is my code 这是我的代码

global $as3cf;
if ( ! $as3cf instanceof Amazon_S3_And_CloudFront ) return;

$results = new WP_Query( $query );

$attachments=(array)$results->get_posts();
if(!empty($attachments)){
    foreach($attachments as $attachment){
        $amazons3_info=get_post_meta($attachment->ID,'amazonS3_info');
        @$as3cf->delete_attachment($attachment->ID);
        $new_files = $as3cf->upload_attachment_to_s3($attachment->ID);
        if(is_wp_error($new_files) && isset($amazons3_info) && !empty($amazons3_info)){
            update_post_meta($attachment->ID,'amazonS3_info',$amazons3_info);
        }
        update_post_meta($attachment->ID,'my-smpro-smush',$new_files);
    }
}

The variable $new_files contains something like that 变量$ new_files包含类似的内容

a:3:{s:6:"bucket";s:21:"static.example.com";s:3:"key";s:63:"wp-content/uploads/2016/12/334ca0545d748d0fe135eb30212154db.jpg";s:6:"region";s:9:"eu-west-1";}

So now i need to clear image. 所以现在我需要清除图像。

Someone can help me? 有人可以帮我吗? I also try https://github.com/subchild/CloudFront-PHP-Invalidator/blob/master/CloudFront.php but it doesn't work. 我也尝试使用https://github.com/subchild/CloudFront-PHP-Invalidator/blob/master/CloudFront.php,但这不起作用。

It seems that your question is not about S3, but about CloudFront. 看来您的问题不是关于S3,而是关于CloudFront。

You can use AWS SDK for PHP to invalidate any object or objects with createInvalidation : http://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.CloudFront.CloudFrontClient.html#_createInvalidation 您可以使用适用于PHP的AWS开发工具包通过createInvalidation使任何一个或多个对象无效: http : //docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.CloudFront.CloudFrontClient.html#_createInvalidation

If you don't want to use SDK for some reason, here is a good example of plain POST request to invalidate CloudFront cache: 如果由于某种原因不想使用SDK,下面是一个简单的POST请求示例,该示例使CloudFront缓存无效:

<?php
/**
 * Super-simple AWS CloudFront Invalidation Script
 * 
 * Steps:
 * 1. Set your AWS access_key
 * 2. Set your AWS secret_key
 * 3. Set your CloudFront Distribution ID
 * 4. Define the batch of paths to invalidate
 * 5. Run it on the command-line with: php cf-invalidate.php
 * 
 * The author disclaims copyright to this source code.
 *
 * Details on what's happening here are in the CloudFront docs:
 * http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html
 * 
 */
$access_key = 'AWS_ACCESS_KEY';
$secret_key = 'AWS_SECRET_KEY';
$distribution = 'DISTRIBUTION_ID';
$epoch = date('U');

$xml = <<<EOD
<InvalidationBatch>
    <Path>/index.html</Path>
    <Path>/blog/index.html</Path>
    <CallerReference>{$distribution}{$epoch}</CallerReference>
</InvalidationBatch>
EOD;


/**
 * You probably don't need to change anything below here.
 */
$len = strlen($xml);
$date = gmdate('D, d M Y G:i:s T');
$sig = base64_encode(
    hash_hmac('sha1', $date, $secret_key, true)
);

$msg = "POST /2010-11-01/distribution/{$distribution}/invalidation HTTP/1.0\r\n";
$msg .= "Host: cloudfront.amazonaws.com\r\n";
$msg .= "Date: {$date}\r\n";
$msg .= "Content-Type: text/xml; charset=UTF-8\r\n";
$msg .= "Authorization: AWS {$access_key}:{$sig}\r\n";
$msg .= "Content-Length: {$len}\r\n\r\n";
$msg .= $xml;

$fp = fsockopen('ssl://cloudfront.amazonaws.com', 443, 
    $errno, $errstr, 30
);
if (!$fp) {
    die("Connection failed: {$errno} {$errstr}\n");
}
fwrite($fp, $msg);
$resp = '';
while(! feof($fp)) {
    $resp .= fgets($fp, 1024);
}
fclose($fp);
echo $resp;

Source: https://gist.github.com/claylo/1009169 资料来源: https : //gist.github.com/claylo/1009169

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM