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

mikmprdd

我添加了一个新的媒体映像(使用amazon-s3-and-cloudfrontamazon-web-services wordpress插件),并且需要清除该映像的缓存。

我使用smush PRO压缩图像:它仅在本地压缩图像,因此我需要在S3上重新放置图像。

这是我的代码

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);
    }
}

变量$ 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";}

所以现在我需要清除图像。

有人可以帮我吗?我也尝试使用https://github.com/subchild/CloudFront-PHP-Invalidator/blob/master/CloudFront.php,但是它不起作用。

谢尔盖·科瓦列夫(Sergey Kovalev)

看来您的问题不是关于S3,而是关于CloudFront。

您可以使用适用于PHP的AWS开发工具包通过以下方法使任何一个或多个对象无效createInvalidationhttp : //docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.CloudFront.CloudFrontClient.html#_createInvalidation

如果由于某种原因不想使用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;

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建亚马逊AWS S3预签名URL PHP

来自分类Dev

从PHP AWS SDK设置S3对象的缓存控制HTTP标头

来自分类Dev

Amazon S3存储桶缓存清除

来自分类Dev

基本的AWS S3 PHP设置

来自分类Dev

使用PHP SDK列出AWS S3存储桶

来自分类Dev

AWS PHP SDK S3 RequestTimeTooSkewed错误

来自分类Dev

Listing AWS S3 buckets using the PHP SDK

来自分类Dev

使用AWS PHP SDK访问Swisscom S3服务

来自分类Dev

AWS 同步文件与亚马逊 s3 存储桶

来自分类常见问题

如何在AWS S3中添加缓存控制?

来自分类Dev

(使用aws-sdk)如何查找存储在亚马逊s3中的文件夹的总大小

来自分类Dev

如何在AWS S3上根本不设置任何缓存?

来自分类Dev

Amazon S3签名不匹配-AWS SDK Java

来自分类Dev

AWS S3 Java SDK-拒绝访问

来自分类Dev

AWS-SDK S3 deleteObjects返回MalformedXML吗?

来自分类Dev

使用AWS C ++ SDK的分段上传S3

来自分类Dev

AWS S3 + Ruby SDK:如何列出存储桶

来自分类Dev

S3 putObject使用AWS-SDK失败

来自分类Dev

使用 AWS S3 Javascript SDK 加载新网页

来自分类Dev

在 AWS S3 SDK 中上传文件

来自分类Dev

在AWS S3上以编程方式启用版本控制

来自分类Dev

在AWS S3上合并文件(使用Apache Camel)

来自分类Dev

AWS上的Cloudfront URL与S3 URL

来自分类Dev

在S3 AWS Bucket上启用MFA删除

来自分类Dev

在AWS S3 + Cloudfront上更新Angular应用

来自分类Dev

在AWS S3上合并文件(使用Apache Camel)

来自分类Dev

在Cloudfront和S3上使用Rails AWS资产

来自分类Dev

在AWS S3存储桶上上传失败的通知

来自分类Dev

通过AWS PHP SDK向IAM用户授予对AWS S3文件的权限