Я начал перечислять содержимое ведра S3 с использованием цикла foreach.
$contents = $s3->getBucket("bucket-name"); foreach($contents as $value) { print $value['name']; echo "<br>"; }
Но проблема в том, что он не перечисляет индекс выше 1000. Последние несколько файлов не отображаются. Я попытался получить длину массива, и я обнаружил, что последние несколько файлов даже не хранятся в этом массиве.
Что мне делать, чтобы перечислить их все?
Количество зарегистрированных файлов по умолчанию равно 1000, поэтому вы не можете получить более 1000 файлов:
Здесь у вас есть описание функции:
public static function getBucket($bucket, $prefix = null, $marker = null, $maxKeys = null, $delimiter = null) {
Используйте $marker
чтобы указать, где начать получать файлы и $maxKeys
в качестве предела.
Если вы используете одну и ту же библиотеку.
Как указано в документации разработчика S3 :
Поскольку ведра могут содержать практически неограниченное количество ключей, полные результаты запроса списка могут быть чрезвычайно большими. Чтобы управлять большими наборами результатов, Amazon S3 API поддерживает разбиение на страницы, чтобы разделить их на несколько ответов. Каждый ответ ключей списка возвращает страницу до 1000 ключей с индикатором, указывающим, был ли ответ усечен. Вы отправляете серию запросов ключей списка, пока не получите все ключи. Библиотеки обертки AWS SDK обеспечивают одинаковое разбиение на страницы.
Это означает, что вам нужно многостраничные запросы для повторения нескольких «страниц». Это будет зависеть от реализации вашего «s3» -класса. Какую библиотеку вы используете для s3?
Если реализация, которую вы используете, предлагает метод getBucket, будет необязательный параметр $ marker . Поместите здесь ключ последнего объекта для извлечения следующих 1000 объектов после этого объекта.
Документация:
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html