我正在尝试列出我的Amazon S3存储桶中的所有项目。 我有几个嵌套目录。
每个子目录包含多个文件。 我需要获得具有此文件结构的嵌套数组。
我正在使用Amazon AWS SDK for PHP 2.4.2
这是我的代码:
$dir = 's3://bucketname';
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($iterator as $file) {
echo $file->getType() . ': ' . $file . "\n";
}
但是,结果只列出存储桶中的文件,而不是列在目录/子目录中的文件(带前缀的文件)或目录本身。
如果我遍历($dir.'/folder')
,则根本没有结果。
我将RecursiveIteratorIterator::SELF_FIRST
作为第二个参数传递给迭代器的构造函数,我只获得了第一级目录 - 没有子目录。
如何使用AWS流包装器和PHP RecursiveIterator列出存储桶中所有目录中的所有文件?
我希望有人可以帮助我。
谢谢!
答案 0 :(得分:1)
我遇到了同样的问题,我用以下方法解决了这个问题:
use \Aws\S3\StreamWrapper;
use \Aws\S3\S3Client;
private $files = array();
private $s3path = 'YOUR_BUCKET';
private $s3key = 'YOUR_KEY';
private $s3auth = 'YOUR_AUTH_CODE';
public function recursive($path)
{
$dirHandle = scandir($path);
foreach($dirHandle as $file)
{
if(is_dir($path.$file."/") && $file != '.' && $file != '..')
{
$this->recursive($path.$file."/");
}
else
{
$this->files[$path.$file] = $path.$file;
}
}
}
public function registerS3()
{
$client = S3Client::factory(array(
'key' => $this->s3key,
'secret' => $this->s3auth
));
$wp = new StreamWrapper();
$wp->register($client);
}
public function run()
{
$folder = 's3://'.$this->s3path.'/';
$this->registerS3();
$this->recursive($folder);
}
现在,如果您在$ this->文件中执行DUMP,则应显示存储桶中的所有文件。