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

Php 如何有效地获取匹配AmazonS3文件的列表?

Php 如何有效地获取匹配AmazonS3文件的列表?,php,optimization,amazon-s3,amazon-web-services,file-exists,Php,Optimization,Amazon S3,Amazon Web Services,File Exists,假设一个扁平的Amazon S3存储桶中有200000个图像 水桶看起来像这样: 000000-1.jpg 000000-2.jpg 000000-3.jpg 000000-4.jpg 000001-1.jpg 000001-2.jpg 000002-1.jpg ... ZZZZZZ-9.jpg ZZZZZZ-10.jpg (一个6位数的散列,后跟一个计数,后跟扩展名) 如果我需要所有匹配000001-*.jpg的文件,那么最有效的方法是什么 在PHP中,我会使用rglob($path,{00

假设一个扁平的Amazon S3存储桶中有200000个图像

水桶看起来像这样:

000000-1.jpg
000000-2.jpg
000000-3.jpg
000000-4.jpg
000001-1.jpg
000001-2.jpg
000002-1.jpg
...
ZZZZZZ-9.jpg
ZZZZZZ-10.jpg
(一个6位数的散列,后跟一个计数,后跟扩展名)

如果我需要所有匹配
000001-*.jpg
的文件,那么最有效的方法是什么

在PHP中,我会使用
rglob($path,{000001-*.jpg}',GLOB_BRACE)
来获取匹配数组,但我认为这在远程情况下不起作用

我可以获得bucket中所有文件的列表,然后在数组中查找匹配项,但这似乎是一个昂贵的请求


您有什么建议?

Amazon提供了一种直接使用S3API实现这一点的方法

调用清单S3对象时,可以使用
前缀
选项仅返回以前缀开头的对象。例如,使用AWS SDK for PHP:

// Instantiate the class
$s3 = new AmazonS3();

$response = $s3->list_objects('my-bucket', array(
    'prefix' => '000001-'
));

// Success?
var_dump($response->isOK());
var_dump(count($response->body->Contents))
您可能还会发现
分隔符
选项很有用-您可以使用它来获取所有唯一的6位哈希的列表