Intereting Posts
Как организовать просмотр страны / города / города в MVC Нужно ли в любом случае переносить значение в php на вторую страницу? Sonata Admin + показать все элементы в представлении списка (не на странице) Как получить информацию о клиенте из заказа в WooCommerce? В чем разница между require и require-dev? установить mysql и mysqlnd на ubuntu 12.04 Woocommerce обновляет методы доставки при оформлении заказа через ajax Что означает $ {} в синтаксисе PHP? Прототипное наследование в PHP (например, в JavaScript) Пользовательская проверка полей проверки WooCommerce Как заменить смайлики еще после того, как пользователь написал текст и нажмите пробел Остановить отправку с пустым значением ввода с помощью PHP Symfony, как использовать событие формы для проверки динамической клиентской формы Присвоение нескольких переменных одному элементу PHP PHP max_execution_time игнорируется (нет безопасного режима, нет общего хоста, только localhost / windows7 / php 5.3.1 и время ожидания Apache равно 300)

Содержимое ведра S3 не попадает в список до последнего

Я начал перечислять содержимое ведра 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 в качестве предела.

WWW: http://www.drupalcontrib.org/api/drupal/contributions!media_mover!contrib!mm_s3!S3.php/function/S3%3A%3AgetBucket/6

Если вы используете одну и ту же библиотеку.

Как указано в документации разработчика S3 :

Поскольку ведра могут содержать практически неограниченное количество ключей, полные результаты запроса списка могут быть чрезвычайно большими. Чтобы управлять большими наборами результатов, Amazon S3 API поддерживает разбиение на страницы, чтобы разделить их на несколько ответов. Каждый ответ ключей списка возвращает страницу до 1000 ключей с индикатором, указывающим, был ли ответ усечен. Вы отправляете серию запросов ключей списка, пока не получите все ключи. Библиотеки обертки AWS SDK обеспечивают одинаковое разбиение на страницы.

Это означает, что вам нужно многостраничные запросы для повторения нескольких «страниц». Это будет зависеть от реализации вашего «s3» -класса. Какую библиотеку вы используете для s3?

Если реализация, которую вы используете, предлагает метод getBucket, будет необязательный параметр $ marker . Поместите здесь ключ последнего объекта для извлечения следующих 1000 объектов после этого объекта.

Документация:

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html