Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php AmazonS3不缓存图像_Php_Amazon S3 - Fatal编程技术网

Php AmazonS3不缓存图像

Php AmazonS3不缓存图像,php,amazon-s3,Php,Amazon S3,我使用AmazonS3PHP类来上传图像,但是没有设置缓存头。这是我的电话 $s3->putObjectFile( $image_location, "bucketname", $image_file_name, S3::ACL_PUBLIC_READ, array( "Cache-Control" => "max-age=315360000", "Expires" => gmdate("D, d M Y

我使用AmazonS3PHP类来上传图像,但是没有设置缓存头。这是我的电话

$s3->putObjectFile(
    $image_location,
    "bucketname",
    $image_file_name,
    S3::ACL_PUBLIC_READ,
    array(
        "Cache-Control" => "max-age=315360000",
        "Expires" => gmdate("D, d M Y H:i:s T", strtotime("+5 years"))
    )
);
我得到的上传图像的标题响应是:

Date: Tue, 04 Oct 2011 04:21:09 GMT x-amz-request-id: B6BAAAAD9B460160 Content-Length: 34319 x-amz-id-2: Oxxx1hIG2nNKfff3vgH/xx/dffF59O/7a1UWrKrgZlju2g/8WvTcBpccYToULbm Last-Modified: Tue, 04 Oct 2011 04:19:20 GMT Server: AmazonS3 ETag: "4846afffbc1a7284fff4a590d5acd6cd" Content-Type: image/jpeg Accept-Ranges: bytes 日期:2011年10月4日星期二04:21:09 GMT x-amz-request-id:B6BAAAD9B460160 内容长度:34319 x-amz-id-2:Oxx1Hig2NkFFF3Vgh/xx/dffF59O/7a1UWrKrgZlju2g/8WvTcBpccYToULbm 最后修改:2011年10月4日星期二04:19:20 GMT 服务器:亚马逊3 ETag:“4846AFFBC1A7284FFF4A590D5ACD6CD” 内容类型:图像/jpeg 接受范围:字节
缓存控制
过期
头将从服务器发送到客户端,以指示客户端缓存数据。在您的情况下,客户端将这些头发送到服务器,这毫无意义。我相信您的意图是将头发送到S3,然后当另一个客户机请求该文件时,您希望它们由S3提供。我相信这是不受支持的


但是,S3提供的
ETAg
Last Modified
头应该足以满足大多数实际目的,因为除非在S3中更新文件,否则客户端几乎没有任何理由重新下载文件(在这种情况下,
ETAg
Last Modified
将更改)

我不熟悉,但快速查看一下就会发现,
putObjectFile
方法已贬值,您应该改用
putObject

<?php

    // PUT with custom headers:
    $put = S3::putObject(
        S3::inputFile($file),
        $bucket,
        $uri,
        S3::ACL_PUBLIC_READ,
        array(),
        array( // Custom $requestHeaders
            "Cache-Control" => "max-age=315360000",
            "Expires" => gmdate("D, d M Y H:i:s T", strtotime("+5 years"))
        )
    );
    var_dump($put);

?>

S3::putObjectFile
不接受请求头。你所看到的论点是不同的


S3::putObjectFile
只是
S3::putObjectFile
的一个包装器,所以下面的方法可以很好地工作

$s3->putObject(
S3::inputFile($image\u位置),
“bucketname”,
$image\u文件名,
S3::ACL_PUBLIC_READ,
数组(),//元头
数组(//请求头)
“缓存控制”=>“最大使用年限=315360000”,
)
);

这些头被发送出去,这样当客户端请求特定的图像时,Amazon就知道要将哪些头发送回客户端,我知道它们不是作为头,而是作为元数据发送到服务器。另外,感谢ETag和上次修改的想法,我会继续查看它的博客!非常感谢你。我不知道我用的是降价的东西,我猜这就是当你盲目地在线阅读教程而不检查它的发布日期时会发生的事情。
// Instantiate the class
$s3 = new AmazonS3();

$response = $s3->create_object('my-bucket', 'üpløåd/î\'vé nøw béén üpløådéd.txt', array(
    'fileUpload' => 'upload_me.txt',
    'acl' => AmazonS3::ACL_PUBLIC,
    'contentType' => 'text/plain',
    'storage' => AmazonS3::STORAGE_REDUCED,
    'headers' => array( // raw headers
        'Cache-Control' => 'max-age',
        'Content-Encoding' => 'gzip',
        'Content-Language' => 'en-US',
        'Expires' => 'Thu, 01 Dec 1994 16:00:00 GMT',
    ),
    'meta' => array(
        'word' => 'to your mother', // x-amz-meta-word
        'ice-ice-baby' => 'too cold, too cold' // x-amz-meta-ice-ice-baby
    ),
));

// Success?
var_dump($response->isOK());