Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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_Mysql_Amazon S3_Amazon Web Services_Amazon - Fatal编程技术网

Php 动态获取AmazonS3存储桶中文件的大小

Php 动态获取AmazonS3存储桶中文件的大小,php,mysql,amazon-s3,amazon-web-services,amazon,Php,Mysql,Amazon S3,Amazon Web Services,Amazon,我以前看过关于“如何找到整个S3存储桶的大小”的问题。这是一个有点不同的问题——因此,如果问题含糊不清,我提前道歉。我会尽我最大的努力解释我想要达到的目标 我目前正在使用 这就是我努力实现的目标: 我希望能够循环使用MySQL数据库,并获得S3服务器上文件的特定文件名。(这可能基于用户) 在循环过程中,以某种方式查询AmazonS3 bucket并获取MySQL循环中每个文件的文件大小 将所有文件大小相加,得到一个大致的字节大小 因此,本质上,假设我有一个用户,在S3存储桶中有5个文件。我如何能

我以前看过关于“如何找到整个S3存储桶的大小”的问题。这是一个有点不同的问题——因此,如果问题含糊不清,我提前道歉。我会尽我最大的努力解释我想要达到的目标

我目前正在使用

这就是我努力实现的目标:

  • 我希望能够循环使用MySQL数据库,并获得S3服务器上文件的特定文件名。(这可能基于用户)

  • 在循环过程中,以某种方式查询AmazonS3 bucket并获取MySQL循环中每个文件的文件大小

  • 将所有文件大小相加,得到一个大致的字节大小

  • 因此,本质上,假设我有一个用户,在S3存储桶中有5个文件。我如何能够查询S3存储桶,以查看此用户的5个文件在我的存储桶中存储了多少数据

    如果这很难理解,我深表歉意。如果需要,我可以重新表达


    任何朝正确方向的轻推都将不胜感激。

    您真的应该将文件大小存储在Mysql表中。更快地获取信息,更低的成本

    但是。。。试试这个

    $s3=新的Aws\s3\s3客户端($parameters);
    $obj_数据=$s3->headObject([
    “Bucket”=>$Bucket,
    “Key”=>$Key
    ]);
    回显“大小为:”.$obj_数据['ContentLength'];
    
    现在,AWS发布了一个支持PHP SDK,您可能需要考虑切换到使用: 它还包括获取对象大小的api:get\u object\u filesize()


    我同意约翰·凡蒂米格里亚的观点。每次调用S3都需要时间和金钱。如果您可以在本地存储信息,它将提供更好的客户体验(更快)和更便宜。

    我确实在MYSQL中存储信息,但有时您需要进行清理,最好了解MSYQL和S3之间的任何不匹配。当我需要获得文件大小时,我列出所有文件并计算文件大小

    include("sdk.class.php");
    
            $s3 = new AmazonS3();
    
            $response = $s3->list_objects('mojag');
            foreach ($response->body as $object)
            {
                //print_r($object);
                echo $object->Key.'('.$object->Size.')</br>';
                $size  = $size+$object->Size;
    
            }
            $size = number_format($size / 1024 / 1024, 2); 
    
            echo $size;
    
    include(“sdk.class.php”);
    $s3=新亚马逊3();
    $response=$s3->list_对象('mojag');
    foreach($response->body as$object)
    {
    //打印(对象);
    回显$object->Key.'('.$object->Size.')
    ; $size=$size+$object->size; } $size=number\u格式($size/1024/1024,2); 回声$大小;
    答案的添加

    该方法是分页的,它提供的结果可能不会超过1000,因为默认值为1000,因此您需要进行分页以获得完全准确的结果

    但您可以使用返回
    max keys
    结果的方法

    包括(“sdk.class.php”)

    $s3=newamazons3();
    $response=$s3->get_object_list('mojag');
    foreach($response->body as$object)
    {
    //打印(对象);
    回显$object->Key.'('.$object->Size.')
    ; $size=$size+$object->size; } $size=number\u格式($size/1024/1024,2); 回声$大小;
    2015年,我必须使用

    然后

    $size = filesize('s3://' . $bucket . '/' . $key);
    

    我希望这会对某些人有所帮助。

    我不知道AWS PHP SDK。我得玩玩它。关于存储信息,你们都是对的。我正在本地存储文件大小。非常感谢。请投票支持“您真的应该在Mysql表中存储文件大小”php aws sdk中没有
    getObjectInfo
    方法。
    $client->registerStreamWrapper();
    
    $size = filesize('s3://' . $bucket . '/' . $key);