Php 如何降低数据传输成本?亚马逊S3-->;Cloudflare-->;访客

Php 如何降低数据传输成本?亚马逊S3-->;Cloudflare-->;访客,php,caching,amazon-s3,amazon,cloudflare,Php,Caching,Amazon S3,Amazon,Cloudflare,我最近开始使用AmazonS3向访问者提供图像,因为这将减少服务器负载。现在,有一个新问题:今天我查看了我的AWS账单。我注意到有一大笔账单等着我——在20天内总共有4TB AWS数据传输 显然,这是因为大量的AmazonS3流量(到Cloudflare,然后由Cloudflare提供给访问者)。现在,我应该通过设置缓存头来减少请求的文件量(因为Cloudflare的爬虫程序将尊重这一点)。我对代码进行了如下修改: $s3->putObjectFile($path, $bucket , '

我最近开始使用AmazonS3向访问者提供图像,因为这将减少服务器负载。现在,有一个新问题:今天我查看了我的AWS账单。我注意到有一大笔账单等着我——在20天内总共有4TB AWS数据传输

显然,这是因为大量的AmazonS3流量(到Cloudflare,然后由Cloudflare提供给访问者)。现在,我应该通过设置缓存头来减少请求的文件量(因为Cloudflare的爬虫程序将尊重这一点)。我对代码进行了如下修改:

$s3->putObjectFile($path, $bucket , 'images/'.$id.'.jpg', S3::ACL_PUBLIC_READ);

但是,它仍然不起作用。Cloudflare不尊重缓存,因为缓存控制在标头中不显示为“缓存控制”,而是显示为“x-amz-meta-cachecontrol”。Cloudflare忽略了这一点

有没有人能简单地解决这个问题

TL;博士:我和这个家伙或多或少有同样的问题:(那是在2008年)

编辑:我偶然发现了这个问题:但不幸的是,这个解决方案对我不起作用

编辑2:结果它不起作用,因为我使用的是旧版本的“AmazonS3类”。我已经更新了,代码现在可以运行了

谢谢您的时间。

如果您获得的是“x-amz-meta-cachecontrol”,则可能是您没有正确设置标题。这可能正是您在代码中执行此操作的方式。这应该是有效的。我推断这是php使用亚马逊S3 php类

试试这个:

$s3->putObject(file_get_contents($path), $bucket, $url, S3::ACL_PUBLIC_READ, array(), array('Cache-Control' => 'max-age=31536000, public'));
中,putObjectFile
列在旧方法下:

putObjectFile (string $file, 
               string $bucket, 
               string $uri, 
               [constant $acl = S3::ACL_PRIVATE], 
               [array $metaHeaders = array()], 
               [string $contentType = null])
与此相比:

putObject (mixed $input, 
           string $bucket, 
           string $uri, 
           [constant $acl = S3::ACL_PRIVATE], 
           [array $metaHeaders = array()], 
           [array $requestHeaders = array()])
您需要将缓存控制设置为请求头,但似乎无法使用
putObjectFile
设置请求头,而只能设置元头。您必须使用
putObject
并为其提供一个空数组作为元头,然后使用另一个带有请求头的数组(包括缓存控制)

您还可以尝试下面列出的其他一些工作示例

另见:

(菲律宾)

(python)


您现在可以。去s3水桶。打开文件并设置属性


我明白了为什么它不起作用。原来我使用的是“AmazonS3PHP类”的旧版本。我更新并使用了您建议的代码,现在新文件有一个缓存控制集。伟大的我还将查看您的第二个链接,为bucket中已经存在的文件设置所有缓存控制头。这应该能解决我所有的问题。谢谢你所做的一切@乔纳斯:你能用这种方法减少数据传输吗?。。我知道它很长。。但我现在在你的船上。
putObject (mixed $input, 
           string $bucket, 
           string $uri, 
           [constant $acl = S3::ACL_PRIVATE], 
           [array $metaHeaders = array()], 
           [array $requestHeaders = array()])