У меня 0,5 миллиона изображений в корзине S3, и количество изображений растет на 35-40 тысяч в день.Изображения соответствуют номенклатуре следующим образом:
est20181127-124627.jpg
est20181127-124628.jpg
В именах указаны дата и время создания.Я использую AWS SDK FOR PHP для взаимодействия с S3 Bucket.Когда я предоставляю следующий код:
$objects = $s3->getIterator('ListObjects', ['Bucket' => $bucket]);
foreach ($objects as $object) {
$urls = $s3->getObjectUrl(BUCKET, $object['Key']);
echo $urls;
}
, я получаю следующий ответ:
https://homesecmum.s3.ap-south-1.amazonaws.com/est20181127-124627.jpg https://homesecmum.s3.ap-south-1.amazonaws.com/est20181127-124628.jpg https://homesecmum.s3.ap-south-1.amazonaws.com/est20181127-124629.jpg https://homesecmum.s3.ap-south-1.amazonaws.com/est20181127-124630.jpg https://homesecmum.s3.ap-south-1.amazonaws.com/est20181127-124631.jpg https://homesecmum.s3.ap-south-1.amazonaws.com/est20181127-124632.jpg
Я пытаюсь фильтровать изображения на основе шаблонов даты и времени.Я попробовал следующий код:
$stdate = '20181127-123556';
$endate = '20181127-123700';
$start = DateTime::createFromFormat('Ymj-His',$stdate);
$end = DateTime::createFromFormat('Ymj-His',$endate);
$patternval = '/(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})-(?<hour>\d{2})(?<minute>\d{2})(?<second>\d{2})/';
$format = 'Ymj-His';
foreach ($objects as $object) {
$matches=array();
preg_match($patternval, basename($s3->getObjectUrl(BUCKET, $object['Key'])), $matches);
if ($matches) {
$filedate = DateTime::createFromFormat($format, $matches[0]);
}
if ($filedate >= $start && $filedate <= $end) {
$good_files[] = $s3->getObjectUrl(BUCKET, $object['Key']);
print_r($good_files);
}
}
Вышеприведенное возвращает следующее:
Array
(
[0] => https://homesecmum.s3.ap-south-1.amazonaws.com/est20181127-124627.jpg
)
Array
(
[0] => https://homesecmum.s3.ap-south-1.amazonaws.com/est20181127-124627.jpg
[1] => https://homesecmum.s3.ap-south-1.amazonaws.com/est20181127-124628.jpg
)
, т. Е. Для каждого изображения в диапазоне времени и даты foreach выполняет итерации и предоставляет несколько массивов.Однако, когда я попытался с этим кодом:
for ($i = 0; $i < count($objects); $i++) {
$matches=array();
preg_match($patternval, basename($s3->getObjectUrl(BUCKET, $object['Key'])), $matches);
if ($matches) {
$filedate = DateTime::createFromFormat($format, $matches[0]);
}
if ($filedate >= $start && $filedate <= $end) {
$good_files[] = $s3->getObjectUrl(BUCKET, $object['Key']);
print_r($good_files);
}
}
я получил следующую ошибку:
PHP Fatal error: Cannot use object of type Generator as array in /var/www/html