🍑
[S3×AWS SDK for PHP]バケットで最も古いオブジェクトを取得する
概要
S3バケットから最も日時の古いオブジェクトを取得するサンプルコード(覚書き)
コード
getOldest.php
<?php
// AWS SDK for PHPの読み込み
require_once('/usr/lib/vendor/autoload.php');
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
// アクセスキー、シークレットアクセスキーの設定
define('AWS_ACCESS_KEY_ID', 'xxxxxxxxxxxxxxxx');
define('AWS_SECRET_ACCESS_KEY', 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy');
// タイムゾーンの設定
date_default_timezone_set('Asia/Tokyo');
// バケット名、リージョンを設定
$bucket = 'zzzzzzzzzzzzzzz';
$region = 'ap-northeast-1';
$s3Client = new S3Client([
'region' => $region,
'version' => 'latest',
'credentials' => [
'key' => AWS_ACCESS_KEY_ID,
'secret' => AWS_SECRET_ACCESS_KEY,
],
]);
// バケット内のオブジェクト一覧を取得
$results = $s3Client->listObjects([
'Bucket' => $bucket
])['Contents'];
$objects = array();
// 取得したオブジェクトから必要な要素(キー = ファイル名、日付: ソート用)を取得
foreach ($results as $result) {
$lastModified = (array)($result["LastModified"]);
array_push($objects, ['file' => $result["Key"], 'date' => $lastModified["date"]]);
}
// 並び替えの基準(date)を取得
$dates = array_column($objects, 'date');
// 以下PHP5.4用
/*
$dates = [];
foreach($dates as $date) {
$dates[] = $objects['date'];
}
*/
// dateの昇順でソート
array_multisort($dates, SORT_ASC, $objects);
// dateのいちばん古いものを取得
try {
// dateのもっとも古いファイルをtmpディレクトリ下にDL
$result = $s3Client->getObject([
'Bucket' => $bucket,
'Key' => $objects[0]['file'],
'SaveAs' => './tmp/' . $objects[0]['file']
]);
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
Discussion