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
如何使用AWS SDK for PHP v3 AWS/ResultPaginator->Search和JMESPath表达式按大小筛选S3对象?_Php_Amazon S3_Jmespath - Fatal编程技术网

如何使用AWS SDK for PHP v3 AWS/ResultPaginator->Search和JMESPath表达式按大小筛选S3对象?

如何使用AWS SDK for PHP v3 AWS/ResultPaginator->Search和JMESPath表达式按大小筛选S3对象?,php,amazon-s3,jmespath,Php,Amazon S3,Jmespath,我需要一些帮助来使用AWS SDK for PHPV3和JMESPath过滤S3结果。正如JMESPath文档和在线示例所表明的那样,按数字过滤不适用于phpsdk <?php // test.php use Aws\S3\S3Client; // Create S3 client $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); $bucket = 'my-b

我需要一些帮助来使用AWS SDK for PHPV3和JMESPath过滤S3结果。正如JMESPath文档和在线示例所表明的那样,按数字过滤不适用于phpsdk

<?php
// test.php

use Aws\S3\S3Client;

// Create S3 client
$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

$bucket = 'my-bucket-name';
$prefix = 'path/to/my/objects';

// Call list-objects-v2
$awspaginator = $s3->getPaginator('ListObjectsV2', [
    'Bucket' => $bucket,
    'Prefix' => $prefix
]);

// Apply filter to paginator
$jmes = "reverse(Contents[?Size>`0`].{Key: Key, Date: LastModified, Size: Size}) | [-10:]";
$results = $awspaginator->search($jmes);

// Echo results
$i = 0;
foreach ($results as $result) {
    echo "\nResult: " . print_r($result);
    $i++;
}
echo "\nCount: " . $i . PHP_EOL;
?>

感谢您的帮助

我很难在任何地方找到这个文档,但似乎大小是以字符串的形式显示的。我能够使您的示例使用[?to_numberSize>`0`]或者实际上使用[?Size!='0']

这似乎是一个bug,或者至少是文档中的一个故障,正如文档中所述:

AWS CLI支持JMESPath。为CLI输出编写的表达式与为AWS SDK for PHP编写的表达式完全兼容

我所能找到的唯一一件事,即使是暗指这种行为,也仅仅是微不足道的关联:

这里的问题是DynamoDB API希望以字符串形式接收数字,Amazon代表指出,这种行为是a,因为SDK必须支持32位环境,不能处理超过20亿的整数,b通常所有AWS SDK都是从一组与语言无关的数据文件自动生成的,他们宁愿在可以避免的情况下避免例外。这似乎意味着在SDK中广泛使用字符串作为整数。尽管如此,我在其他地方找不到任何提及

不管这是否是故意的,这似乎是因为PHPSDK的Api/Parser/XmlParser没有声明为的长类型的映射。它返回到默认行为,即将其解析为字符串:


我很难在任何地方找到这个文档,但似乎大小是以字符串的形式显示的。我能够使您的示例使用[?to_numberSize>`0`]或者实际上使用[?Size!='0']

这似乎是一个bug,或者至少是文档中的一个故障,正如文档中所述:

AWS CLI支持JMESPath。为CLI输出编写的表达式与为AWS SDK for PHP编写的表达式完全兼容

我所能找到的唯一一件事,即使是暗指这种行为,也仅仅是微不足道的关联:

这里的问题是DynamoDB API希望以字符串形式接收数字,Amazon代表指出,这种行为是a,因为SDK必须支持32位环境,不能处理超过20亿的整数,b通常所有AWS SDK都是从一组与语言无关的数据文件自动生成的,他们宁愿在可以避免的情况下避免例外。这似乎意味着在SDK中广泛使用字符串作为整数。尽管如此,我在其他地方找不到任何提及

不管这是否是故意的,这似乎是因为PHPSDK的Api/Parser/XmlParser没有声明为的长类型的映射。它返回到默认行为,即将其解析为字符串:

--bucket my-bucket-name \
--prefix path/to/my/objects \
--query "reverse(Contents[?Size>\`0\`].{Key: Key, Date: LastModified, Size: Size}) | [-10:]"